网件R7800 NAS搭建

本文主要记录了如何通过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
1
opkg install fdisk

2. 列出所有可用的硬盘

1
fdisk --list

3. 格式化

1
2
opkg install e2fsprogs
mkfs.ext4 /dev/sda

4. 挂载

1
mount /dev/sda /mnt/sda

5. 查看情况

1
df -h

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):

1
mkdir -p /mnt/sda

设置开启自动挂载

1
/etc/init.d/msda enable

7. 磁盘闲置自动休眠

1
opkg install hdparm

设置闲置5分钟自动休眠:

1
hdparm -S 60 /dev/sda

立即休眠:

1
hdparm -y /dev/sda

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的密码

1
smbpasswd -a jacks

好了以后,我们到/mnt/sda创建jacks目录,并修改该目录的用户组,确保我们通过jacks登录后,该目录可操作:

1
2
3
cd /mnt/sda
mkdir jacks
chown jacks jacks

3. 配置

上面都设置好后,我们直接通过luci进行配置,我们通过服务->网路共享->基本设置中添加共享目录,如下设置:

配置完保存并应用后,便可以在其他设备上通过smb访问了,如在Mac下通过FinderConnect 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 配置 -> 文件和目录,将默认下载目录修改为:

1
/mnt/sda/aria2

基本设置中选中启用。

界面打开:

http://192.168.99.1/webui-aria2/

IV. 打开路由器上的电影

DLNA Media Server

1
2
3
opkg install minidlna
opkg install luci-app-minidlna
opkg install luci-i18n-minidlna-zh-cn

然后我们根据上面的挂载与aria2下载目录情况,将其媒体目录配置到/mnt/sda,访问服务->miniDLNA->基本设置,配置媒体目录为:

1
/mnt/sda

然后勾选启用后选择保存并应用,此时可以通过端口(默认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修改datadirtmpdir为挂载目录:

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

配置

创建目录:

1
mkdir /mnt/sda/www

编辑/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

1
/etc/init.d/uhttpd stop

关闭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
/etc/init.d/mysqld stop

然后进入安全模式:

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来检查整体的情况。

netatalk3.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'?><!--*-nxml-*-->
<!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中定义的名称

创建目录与权限

创建用户用户组为usersmbp用户用于TimeMachine:

1
useradd --create-home --groups users --user-group mbp

为其设置密码:

1
passwd mbp

检查群组关系:

1
grep users /etc/group

此时应该正常输出:

1
users:x:100: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口):

1
hdparm -Tt /dev/sda

这边硬盘的读写速度应该在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

1
opkg install rsyncd

为了方面将rsyncd的所有内容都放在同一个目录里,我们创建/etc/rsyncd文件夹:

1
mkdir /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,配置<用户名>:<密码>:

1
mi:mima123

编辑/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):

1
telnet 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

然后进行编译配置:

1
make menuconfig

输入后,会进入一个菜单页面:

采用以下配置即可:

  • 进入 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 utilitiesinotify-tools 打上勾,这个我们也要用到
  • tab 键,使光标移动到 Save,回车存盘后切换到Exit退出即可

配置完成后,默认配置文件会生成在./.config中,这个可以不用管,接着直接输入:

1
make

等待漫长的编译完成…

编译完成后,会在buildroot-2018.02.8/output/target下包含所有我们需要的内容

进入output目录执行指令进行打包:

1
tar czf target.tgz ./target

然后我们将小蚁摄像头的存储卡拿出来,将刚刚打包好的target.tgz拷贝到小蚁摄像头存储卡的较大的那个分区的根目录,然后插回小蚁摄像头,然后启动小蚁摄像头。

3. 结合inotify-tool开启rsync自动同步

通过telnet进入小蚁摄像头,进入到/tmp/hd1目录,然后对target.tgz进行解包:

1
tar xvf 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


Jacksgong wechat
欢迎关注Jacks Blog公众号,第一时间接收原创技术沉淀干货。