本文主要记录了如何通过R7800的ESATA口外接一个机械硬盘,在路由器上搭建NAS。
前言
购买了网件R7800后,绝不会是简单的YouTuBe 4K体验的升级,我们更具需要的是将其打造成一整套的NAS,于是购买了一个4TB的硬盘以及相关的底座,搞起。
P.S. 刚开始玩的时候没有留意,所以就随便买了一个硬盘,估计要重新买酷狼或者金盘了。
I. 硬盘挂载
1. 驱动安装
1 2 3
| opkg install kmod-usb-ohci opkg install kmod-usb-storage opkg install kmod-fs-ext4
|
2. 列出所有可用的硬盘
3. 格式化
1 2
| opkg install e2fsprogs mkfs.ext4 /dev/sda
|
4. 挂载
5. 查看情况
6. 生效开机自动挂载运行
这边用block-mount
结合配置文件/etc/config/fstab
始终存在问题,可能是原生的挂载冲突导致,这边未做深究,直接自己写了一个,创建/etc/init.d/msda
并添加以下内容(以下内容假设你也和我一样,前面输出的磁盘是在/dev/sda
,并且你需要将其挂载在/mnt/sda
目录下)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #!/bin/sh /etc/rc.common
START=99
boot() { /bin/mount /dev/sda /mnt/sda }
start() { /bin/mount /dev/sda /mnt/sda /bin/df -h | grep sda }
stop() { /bin/umount /dev/sda /bin/df -h | grep sda }
|
给到msda
执行权限:
1
| chmod +x /etc/init.d/msda
|
创建挂载的目录(上面我们挂载在/mnt/sda
):
设置开启自动挂载
7. 磁盘闲置自动休眠
设置闲置5分钟自动休眠:
立即休眠:
II. 安装Samba
1. 安装相关软件与界面
1 2 3
| opkg install samba36-server opkg install luci-app-samba opkg install luci-i18n-samba-zh-cn
|
2. 添加用户
编辑/etc/passwd
添加:
1
| jacks:x:501:501:home:/mnt/sda:/bin/ash
|
为该账户设置smb的密码
好了以后,我们到/mnt/sda
创建jacks
目录,并修改该目录的用户组,确保我们通过jacks
登录后,该目录可操作:
1 2 3
| cd /mnt/sda mkdir jacks chown jacks jacks
|
3. 配置
上面都设置好后,我们直接通过luci进行配置,我们通过服务
->网路共享
->基本设置
中添加共享目录,如下设置:
配置完保存并应用后,便可以在其他设备上通过smb访问了,如在Mac下通过Finder
的Connect to Server
(在Finder
下默认Command + K
快捷键),然后输入smb://192.168.99.1
可以直接通过用户名密码访问了。
III. 安装Aria2
1
| opkg install aria2 luci-app-aria2 luci-i18n-aria2-zh-cn webui-aria2
|
在/mnt/sda
下创建一个aria2
目录,将其权限给到aria2
用户:
1 2
| mkdir -p /mnt/sda/aria2 chown aria2 /mnt/sda/aria2
|
服务配置:
在服务
-> Aria2 配置
-> 文件和目录
,将默认下载目录
修改为:
在基本设置
中选中启用。
界面打开:
http://192.168.99.1/webui-aria2/
IV. 打开路由器上的电影
1 2 3
| opkg install minidlna opkg install luci-app-minidlna opkg install luci-i18n-minidlna-zh-cn
|
然后我们根据上面的挂载与aria2下载目录情况,将其媒体目录配置到/mnt/sda
,访问服务
->miniDLNA
->基本设置
,配置媒体目录
为:
然后勾选启用后选择保存并应用,此时可以通过端口(默认8200
)访问验证情况: http://192.168.99.1:8200
VLC
在其他设备上,如Mac/Windows上此时下载VLC,然后便可以在VLC上直接访问通过DLNA服务提供的路由器上的视频了:
V. 安装MariaDB(15M左右)
1 2 3
| opkg remove libmysqlclient libmysqlclient-r opkg update opkg install mariadb-server-extra libmariadbclient mariadb-client-extra
|
执行好上面的命令后,为了避免内置存储容量不够,通过编辑/etc/mysql/my.cnf
修改datadir
与tmpdir
为挂载目录:
1 2
| datadir = /mnt/sda/data/mysql/ tmpdir = /mnt/sda/data/tmp/
|
并创建对应目录文件夹:
1 2
| mkdir -p /mnt/sda/data/mysql mkdir -p /mnt/sda/data/tmp
|
给到权限:
1 2
| chown -R mariadb:mariadb /mnt/sda/data/mysql chmod -R 777 /mnt/sda/data/tmp
|
执行以下内容进行初始化
1
| mysql_install_db --force --basedir=/usr
|
启动服务
1 2
| /etc/init.d/mysqld enable /etc/init.d/mysqld start
|
VI.安装PHP7
安装必要的服务与模块
1 2
| opkg install php7 php7-cgi php7-fastcgi php7-mod-json php7-mod-session php7-mod-zip zoneinfo-core php7-mod-pdo php7-mod-ctype php7-mod-mbstring php7-mod-gd php7-mod-curl curl php7-mod-xml php7-mod-simplexml php7-mod-hash php7-mod-dom php7-mod-iconv php7-mod-xmlreader php7-mod-xmlwriter php7-mod-openssl php7-mod-fileinfo php7-mod-exif opkg install php7-mod-pdo-sqlite php7-mod-sqlite3 libsqlite3 sqlite3-cli
|
配置
创建目录:
编辑/etc/php.ini
,修改doc_root
到挂载目录:
1 2
| doc_root = "/mnt/sda/www" cgi.fix_pathinfo=1
|
修改openssl
执行顺序解决mysqli
模块无法使用的问题:
1 2
| mv /etc/php7/20_openssl.ini /etc/php7/10_openssl.ini mv /etc/php7/20_mysqli.ini /etc/php7/30_mysqli.ini
|
生效服务
1 2
| /etc/init.d/php7-fastcgi enable /etc/init.d/php7-fastcgi start
|
VII. 从uhttpd改为lighttpd
关闭uhttpd
关闭uhttpd
自动启动:
1
| /etc/init.d/uhttpd disable
|
如果你希望节约一点空间,可以直接将uhttpd
卸载了:
1
| opkg --force-depends remove uhttpd
|
安装lighttpd
1 2
| opkg install lighttpd lighttpd-mod-cgi lighttpd-mod-fastcgi lighttpd-mod-access /etc/init.d/lighttpd enable
|
编辑/etc/lighttpd/conf.d/30-cgi.conf
通过确保存在以下来确保mod_cgi
模块有被加载:
1
| server.modules += ( "mod_cgi" )
|
让lighttpd
使用Lua
来加载网站接口,在cgi.assign
中新增"cgi-bin/luci" => ""
,如:
1 2 3 4 5 6
| cgi.assign = ( ".pl" => "/usr/bin/perl", ".cgi" => "/usr/bin/perl", ".rb" => "/usr/bin/ruby", ".erb" => "/usr/bin/eruby", ".py" => "/usr/bin/python", "cgi-bin/luci" => "")
|
编辑/etc/lighttpd/lighttpd.conf
由于LuCI需要root
权限来访问配置,因此需要让lighttpd
运行在root
下,注解掉以下两行:
1 2
| #server.username = "http" #server.groupname = "www-data"
|
生效配置
1
| /etc/init.d/lighttpd restart
|
端口变更除81
端口访问LuCI外其他访问挂载上的网站
设置/etc/lighttpd/lighttpd.conf
将server.document-root
修改为我们想要的目录:
1
| server.document-root = "/mnt/sda/www"
|
设置/etc/lighttpd/conf.d/30-cgi.conf
可以先将前面配置的cgi.assign
中新增的"cgi-bin/luci" => ""
去掉了,由于用不到,我们单独为luci进行配置:
1 2 3 4
| $SERVER["socket"] == ":81" { server.document-root = "/www" cgi.assign = ("cgi-bin/luci" => "") }
|
新增.php
的配置,新增好cgi.assign
如下:
1 2 3 4 5 6
| cgi.assign = ( ".pl" => "/usr/bin/perl", ".cgi" => "/usr/bin/perl", ".rb" => "/usr/bin/ruby", ".erb" => "/usr/bin/eruby", ".py" => "/usr/bin/python", ".php" => "/usr/bin/php-cgi")
|
设置/etc/lighttpd/conf.d/30-access.conf
1 2 3 4 5 6 7 8
| server.modules += ( "mod_access" )
$HTTP["url"] =~ "^/data/" { url.access-deny = ("") } $HTTP["url"] =~ "^($|/)" { dir-listing.activate = "disable" }
|
设置/etc/lighttpd/conf.d/30-fastcgi.conf
1 2 3 4 5 6 7 8
| server.modules += ( "mod_fastcgi" )
fastcgi.server += ( ".php" => (( "bin-path" => "/usr/bin/php-fcgi", "socket" => "/tmp/php.socket" )) )
|
VIII. 安装OwnCloud
这边由于NextCloud配置下来一直存在一些,问题来回调试了好久,直接跳过使用了最新版本的OwnCloud(需要10.0.10或更高版本才能支持php7.2)
从官网下载下载最新版本并解压到/mnt/sda/www/owncloud
下。
设置MariaDB Root密码
由于OwnCloud这边对于MariaDB的配置需要用到Root权限的数据库帐号(由于这边如果自己创建帐号给权限会涉及到各种问题(由于这边不仅仅是对某个数据库操作)),为了简单起见这边直接给到Root权限帐号,我们前面安装MariaDB的时候并没有设置Root密码,这边我们设置下:
先停止mysqld服务
然后进入安全模式:
1 2
| mysqld_safe --skip-grant-tables --skip-networking & mysql -u root
|
设置密码:
1 2 3
| update mysql.user set password=password('MyNewPass') where user='root'; FLUSH PRIVILEGES; quit
|
重启服务:
1 2
| killall mysqld /etc/init.d/mysqld start
|
最后通过http://192.168.99.1/owncloud
便可进入安装了,安装好后便可以直接实现类似DropBox或者是百度云盘之类的文件同步了,可以在这里下载各类左面客户端,而服务端配置,直接输入地址http://192.168.99.1/owncloud
以及安装owncloud服务时设置的用户名密码即可。
IX. Apple TimeMachine
主要用于我的MacBook通过TimeMachine进行常年自动备份,不过实际测试下来基于afpd
的速度并不快,并且还吃路由器CPU到接近30%,我还会持续观察的,废话不多说搞起:
包安装
1
| opkg install avahi-utils netatalk
|
为了便于添加用户与权限管理安装以下工具:
1
| opkg install shadow-groupadd shadow-groupmod shadow-useradd shadow-usermod
|
配置
默认情况下,可以通过afpd -V
来检查整体的情况。
netatalk
在3.1.10-1
上存在一个小的权限BUG修复:
1 2
| chmod 644 /etc/afp.conf chmod 644 /etc/extmap.conf
|
在/etc/afp.conf
中添加以下配置:
1 2 3 4 5
| [Backups] path = /mnt/sdb/mbp/Backups time machine = yes vol size limit = 1000000 valid users = @users
|
上面的配置,我指定了备份的路径在/mnt/sda/mbp/Backups
目录下,并且限制其大小为1TB
,以及可访问的用户组为users
,我们接下来的配置会与这个对应。
确认下avahi
的配置(/etc/avahi/avahi-daemon.conf
)是否与下面一致(通常来说是一致的):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| [server] #host-name=LEDE #domain-name=local use-ipv4=yes use-ipv6=yes check-response-ttl=no use-iff-running=no
[publish] publish-addresses=yes publish-hinfo=yes publish-workstation=no publish-domain=yes #publish-dns-servers=192.168.1.1 #publish-resolv-conf-dns-servers=yes
[reflector] enable-reflector=no reflect-ipv=no
[rlimits] #rlimit-as= rlimit-core=0 rlimit-data=4194304 rlimit-fsize=0 rlimit-nofile=30 rlimit-stack=4194304 rlimit-nproc=3
|
为avahi
添加一个afp
的服务,新增文件/etc/avahi/services/afp.service
并且修改内容为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <?xml version="1.0" standalone='no'?> <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <service-group> <name replace-wildcards="yes">%h</name> <service> <type>_afpovertcp._tcp</type> <port>548</port> </service> <service> <type>_device-info._tcp</type> <port>0</port> <txt-record>model=TimeCapsule</txt-record> </service> <service> <type>_adisk._tcp</type> <port>9</port> <txt-record>sys=waMa=0,adVF=0x100,adVU=00000000-AAAA-BBBB-CCCC-111111111111</txt-record> <txt-record>dk0=adVN=Backups,adVF=0x81</txt-record> </service> </service-group>
|
需要特别注意的是:
00000000-AAAA-BBBB-CCCC-111111111111
这个是UUID,你可以通过cat /proc/sys/kernel/random/uuid
生成一个,然后替换了adVN=Backups
这里的Backups
就是上面我们在/etc/afp.conf
中定义的名称
创建目录与权限
创建用户用户组为users
的mbp
用户用于TimeMachine:
1
| useradd --create-home --groups users --user-group mbp
|
为其设置密码:
检查群组关系:
此时应该正常输出:
创建目录并给到权限:
1 2 3
| mkdir -p /mnt/sda/mbp/Backups chmod 775 /mnt/sda/mbp/Backups chgrp users /mnt/sda/mbp/Backups
|
生效并启动服务
1 2 3 4
| /etc/init.d/fpd enable /etc/init.d/fpd restart /etc/init.d/avahi-daemon enable /etc/init.d/avahi-daemon restart
|
Mac OS上启用
可以先在Finder中使用快捷键Command + K
,然后输入afp://192.168.99.1
然后在随后的用户名密码处输入mbp
与密码,然后再打开TimeMachine,此时就可以正确的看到有一个192.168.99.1
可选备份空间了:
X. 速度测试
通过测试(ESATA口):
这边硬盘的读写速度应该在120MB/s
左右,但是实际测试下来的情况如下:
- NFS <-> Mac: 20MB/s
- SMB 3.6.25 <-> Mac: 45MB/s
- AFP <-> Mac: 40MB/s
- Rsync <-> NAS: 600KB/s (受限于小蚁摄像机的无线设备,下文会提到)
测试USB3.0口速度:
NFS安装配置相关
1
| opkg install nfs-kernel-server
|
配置/etc/exports
:
1
| /mnt/sda 192.168.99.0/255.255.255.0(rw,sync,no_subtree_check)
|
启动服务:
1 2 3 4
| /etc/init.d/portmap start /etc/init.d/portmap enable /etc/init.d/nfsd start /etc/init.d/nfsd enable
|
Mac 上进行挂载:
1 2
| mkdir -p /Users/Jacksgong/nfs-sda sudo mount -t nfs -o resvport 192.168.99.1:/mnt/sda /Users/Jacksgong/nfs-sda
|
P.S. 其他SMB与AFP查看文章前面的描述
XI. 安装Rsync
为了方面将rsyncd
的所有内容都放在同一个目录里,我们创建/etc/rsyncd
文件夹:
将rsyncd
包自带的默认配置放到我们的目录下:
1
| mv /etc/rsyncd.conf /etc/rsyncd/rsyncd.conf
|
编辑/etc/rsyncd/rsyncd.conf
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| # Minimal configuration for rsync daemon
# Next line required for init script #守护程序PID的文件路径 pid file = /var/run/rsyncd.pid #日志文件路径 log file = /var/log/rsyncd.log #端口号,默认873 port = 873 #使用chroot,需要以root运行,会排除符号链接的目标文件只同步链接本身 use chroot = yes #用以运行的用户 uid = jacks #用以运行的用户组 gid = root
#只读模式 read only = no #只写模式 write only = no #最大连接数 max connections = 5 #允许连接主机的IP,多个IP的话用逗号隔开 hosts allow = 192.168.99.0/255.255.255.0 hosts deny = * #日志输出格式 log format =%t %a %m %f %b #超时时限 timeout = 300
#模块,适用于一个单独任务的局部配置 [camera] #要同步的本地路径 path = /mnt/sda/mi/camera #注释,关于当前任务的描述,内容任意 comment = sync file #忽略IO错误 ignore errors #是否输出已同步目录列表 list = no #用户名,非Linux账户,此帐户与其密码保存在secrets文件内 auth users = mi #secrets文件位置 secrets file=/etc/rsyncd/rsyncd.secrets #排除目录,以空格分隔 #exclude = /mnt/sda/mi/camera/temp
|
编辑配置/etc//rsyncd/rsyncd.secrets
,配置<用户名>:<密码>
:
编辑/etc/init.d/rsyncd
修改启动脚本为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #!/bin/sh /etc/rc.common # Copyright (C) 2011-2014 OpenWrt.org
START=90 STOP=10
USE_PROCD=1 PROG=/usr/bin/rsync CONF=/etc/rsyncd/rsyncd.conf
start_service() { procd_open_instance procd_set_param command "$PROG" --daemon --config="$CONF" procd_close_instance }
|
创建对应的备份目录:
1 2
| mkdir -p /mnt/sda/mi/camera chown -R jacks /mnt/sda/mi
|
启动rsync并设置为自启:
1 2
| /etc/init.d/rsyncd start /etc/init.d/rsyncd enable
|
XII. 小米摄像头自动备份到NAS
1. 开启Telnet
首先需要开启小蚁摄像头的telnet
,默认情况下是没有开启的,你可以通过以下方式去检测(假设你小蚁摄像头的内网IP是192.168.99.111
):
如果此时显示(none) login:
说明说你的小蚁摄像头已经开启了telnet
,那么你可以跳过这步,否则继续:
将小蚁摄像头的存储卡取出来,在存储卡根目录创建一个test
的文件夹,注意如果是你的存储卡被分区为两个,在较大的那个里面进行创建,并在该test
文件夹下面创建文件equip_test.sh
粘贴以下内容:
1 2 3 4 5 6 7 8 9 10 11
| #!/bin/sh # Telnet if [ ! -f "/etc/init.d/S88telnet" ]; then echo "#!/bin/sh" > /etc/init.d/S88telnet echo "telnetd &" >> /etc/init.d/S88telnet chmod 755 /etc/init.d/S88telnet fi dr=`dirname $0` # fix bootcycle mv $dr/equip_test.sh $dr/equip_test.sh.moved reboot
|
P.S. 这个脚本就是在开机的时候会自动运行,其自动执行后的效果就是在/etc/init.d
下创建一个S88telenet
的文件夹,并开启一个telnetd
后台服务,脚本后面的mv
操作是为了避免每次启动都做一次。
现在将存储卡插回小蚁摄像头,然后将摄像头开机,此时不出意外,你应该就可以直接通过telnet 192.168.99.111
(假设你的小蚁摄像头内网IP是192.168.99.111
)访问,输入用户名root
,以及密码123qwer
就可以访问了
进入小蚁摄像头后,我们可以一览小蚁摄像头的各类配置情况:
磁盘挂载的情况如下,可以看到/tmp/hd1
与/tmp/hd2
是我们插入的存储卡的两个分区的挂载,后续我们的各类操作都会在/tmp/hd1
上:
2. 交叉编译rsync
我有编译了一个,如果懒得交叉编译打开后点右上角下载即可
由于这边我们需要备份,因此我们需要编译一个小蚁摄像头可以用的rsync客户端,前面我们看到了小蚁摄像头的各类配置情况,这边我们采用了buildroot去编译一个。
好了,现在找一台Linux设备,然后进入终端执行以下指令:
先安装几个必要的组件:
1 2
| sudo apt-get update sudo apt-get install libncurses-dev build-essential g++
|
紧接着下载解包buildroot:
1 2 3
| wget https://buildroot.org/downloads/buildroot-2018.02.8.tar.gz tar xvf buildroot-2018.02.8.tar.gz cd buildroot-2018.02.8.tar
|
然后进行编译配置:
输入后,会进入一个菜单页面:
采用以下配置即可:
- 进入
Target options
再进入 Target Architecture
菜单,选择 ARM (little endian)
- 进入
Target Architecture Variant
选择 arm926t
其他选项不用动,按两下 esc
退出来 - 进入
Toolchain
菜单,C library
选择 uClibc-ng
- 进入
Kernel Headers
,貌似没有 3.0.8
选个最低的 Linux 3.2.x kernel headers
吧 - 退出来进入
Target packages
,在 Networking applications
里找到 rsync
按空格键打上勾 - 退出来进入
Shell and utilities
把 inotify-tools
打上勾,这个我们也要用到 - 按
tab
键,使光标移动到 Save
,回车存盘后切换到Exit
退出即可
配置完成后,默认配置文件会生成在./.config
中,这个可以不用管,接着直接输入:
等待漫长的编译完成…
编译完成后,会在buildroot-2018.02.8/output/target
下包含所有我们需要的内容
进入output
目录执行指令进行打包:
1
| tar czf target.tgz ./target
|
然后我们将小蚁摄像头的存储卡拿出来,将刚刚打包好的target.tgz
拷贝到小蚁摄像头存储卡的较大的那个分区的根目录,然后插回小蚁摄像头,然后启动小蚁摄像头。
通过telnet
进入小蚁摄像头,进入到/tmp/hd1
目录,然后对target.tgz
进行解包:
由于存储卡是fat32
的格式,不支持软连接,因此这边需要对关键的几个so
进行手动的处理:
1 2 3 4
| cd /tmp/hd1/target/usr/lib cp libz.so.1.2.11 libz.so.1 cp libpopt.so.0.0.0 libpopt.so.0 cp libinotifytools.so.0.4.1 libinotifytools.so.0
|
然后我们创建一个/tmp/hd1/nasync.sh
文件输入以下内容方面通过使用inotify-tool通知rsync进行自动备份:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #!/bin/sh export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tmp/hd1/target/lib:/tmp/hd1/target/usr/lib export PATH=$PATH:/tmp/hd1/target/bin:/tmp/hd1/target/usr/bin export RSYNC_PASSWORD="xxxxx" SRC=/tmp/hd1/record/ DST=rsync://mi@192.168.99.1/camera/ nowtime=$(date +%s) inotifywait -mrq --timefmt '%s' --format '%T' -e modify,delete,create,attrib,move $SRC | while read timestamp do diffnow=$(($nowtime - $timestamp)) echo $nowtime $timestamp $diffnow if [ $diffnow -lt 5 ] then echo 'start rsync' rsync -vzrtog --exclude=*.tmp --delete-excluded $SRC $DST nowtime=$(date +%s) fi done
|
需要特别注意的是,RSYNC_PASSWORD
是前面你在路由器中定义的rsync的密码,而DST=rsync://mi@192.168.99.1/camera/
实际的组成结构是:DST=rsync://<用户名>@<NAS的IP>/<rsync的模块名>/
。
然后我们给到这个文件执行权限:
1
| chmod +x /tmp/hd1/nasync.sh
|
紧接着我们配置成一个开机启动的服务,让小蚁摄像头开机时自动开始运行,创建文件/etc/init.d/S90nasync
,并填充以下内容:
1 2
| #!/bin/sh /tmp/hd1/nasync.sh >> /tmp/hd1/nasync.log &
|
然后再给到权限:
1
| chmod +x /etc/init.d/S90nasync
|
此时重启摄像头,你就会发现,视频已经开始同步过来了。
4. 其他
这边我们可以看到上面我们配置的/tmp/hd1/nasync.sh
中使用的同步是rsync -vzrtog $SRC $DST
,实际上主要原因有两个:
- 原本的权限是只有root可读写,其他都无法访问,因此这边没有使用
-p
保留权限 - 这边没有使用
--delete
来让NAS这边同步删除文件,主要原因是小蚁摄像机上由于存储卡大小有限会将旧的自动删除,这边我们NAS大小较大因此我们不想内容被删除
具体的rsync
的相关参数可用如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| -v, --verbose 详细模式输出 -q, --quiet 精简输出模式 -c, --checksum 打开校验开关,强制对文件传输进行校验 -a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于 -rlptgoD -r, --recursive 对子目录以递归模式处理 -R, --relative 使用相对路径信息 -b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用 --suffix 选项来指定不同的备份文件前缀。 --backup-dir 将备份文件(如~filename) 存放在在目录下。 -suffix=SUFFIX 定义备份文件前缀 -u, --update 仅仅进行更新,也就是跳过所有已经存在于 DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件) -l, --links 保留软链结 -L, --copy-links 想对待常规文件一样处理软链结 --copy-unsafe-links 仅仅拷贝指向 SRC 路径目录树以外的链结 --safe-links 忽略指向 SRC 路径目录树以外的链结 -H, --hard-links 保留硬链结 -p, --perms 保持文件权限 -o, --owner 保持文件属主信息 -g, --group 保持文件属组信息 -D, --devices 保持设备文件信息 -t, --times 保持文件时间信息 -S, --sparse 对稀疏文件进行特殊处理以节省 DST 的空间 -n, --dry-run 现实哪些文件将被传输 -W, --whole-file 拷贝文件,不进行增量检测 -x, --one-file-system 不要跨越文件系统边界 -B, --block-size=SIZE 检验算法使用的块尺寸,默认是 700 字节 -e, --rsh=COMMAND 指定使用 rsh、ssh 方式进行数据同步 --rsync-path=PATH 指定远程服务器上的 rsync 命令所在路径信息 -C, --cvs-exclude 使用和 CVS 一样的方法自动忽略文件,用来排除那些不希望传输的文件 --existing 仅仅更新那些已经存在于 DST 的文件,而不备份那些新创建的文件 --delete 删除那些 DST 中 SRC 没有的文件 --delete-excluded 同样删除接收端那些被该选项指定排除的文件 --delete-after 传输结束以后再删除 --ignore-errors 及时出现 IO 错误也进行删除 --max-delete=NUM 最多删除 NUM 个文件 --partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输 --force 强制删除目录,即使不为空 --numeric-ids 不将数字的用户和组 ID 匹配为用户名和组名 --timeout=TIME IP 超时时间,单位为秒 -I, --ignore-times 不跳过那些有同样的时间和长度的文件 --size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间 --modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为 0 -T --temp-dir=DIR 在 DIR 中创建临时文件 --compare-dest=DIR 同样比较 DIR 中的文件来决定是否需要备份 -P 等同于 --partial --progress 显示备份过程 -z, --compress 对备份的文件在传输时进行压缩处理 --exclude=PATTERN 指定排除不需要传输的文件模式 --include=PATTERN 指定不排除而需要传输的文件模式 --exclude-from=FILE 排除 FILE 中指定模式的文件 --include-from=FILE 不排除 FILE 指定模式匹配的文件 --version 打印版本信息
|
最后这边测试下来小蚁摄像机同步到NAS的速度是在600KB/s左右,不过已经足够了
XIII. 外网访问
防火墙中进行转发
TODO