作者:张华 发表于:2015-12-28
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明
( http://blog.csdn.net/quqi99 )
急需使用rsync在家里的多台机器上同步相片。
sudo apt-get install rsync
sudo update-rc.d -f rsync remove
sudo update-rc.d rsync start 20 2 3 4 5 . stop 20 0 1 6 .
sudo update-rc.d rsync enable
hua@node1:~$ sudo sysv-rc-conf --list rsync
rsync 0:off 1:off 2:on 3:on 4:on 5:on 6:off
这时候就可以在一台机器上同步目录了(rsync server运行在qnap上,统一在qnap上修改,rsync client定时运行下列命令即可让客户端的文件夹与服务端同步,以服务端为准):
rsync -avzur --progress --delete /bak/tmp/qnap/ /qnap/
rsync -avzur --progress --delete --password-file=/etc/rsync.secret /bak/tmp/qnap/ /qnap/
在多台机器上同步目录:
rsync -rave "ssh -p 22 -l hua" -avzur --progress --delete 192.168.99.124:/qnap/ /qnap/
等价于:rsync -avzur --progress --delete hua@192.168.99.124:/qnap/ /qnap/
也可以配置使用::qnap使用下列配置文件/etc/rsyncd.conf中的[qnap]模块:
sudo rsync -avrzP hua@192.168.99.124::qnap qnap
hua@node1:~$ sudo rsync --list-only hua@192.168.99.124::
++++++++++++++++++++++++++++++++++++++++++++++
Welcome to use quqi rsync services!
++++++++++++++++++++++++++++++++++++++++++++++
qnap This is qnap backup data
配置[qnap]模块的步骤如下:
sudo touch /etc/rsyncd.conf
sudo touch /etc/rsyncd.motd
hua@node1:~$ sudo cat /etc/rsyncd.motd
++++++++++++++++++++++++++++++++++++++++++++++
Welcome to use quqi rsync services!
++++++++++++++++++++++++++++++++++++++++++++++
sudo touch /etc/rsyncd.secrets
hua@node1:~$ sudo cat /etc/rsyncd.secrets
hua:Passw0rd
sudo chmod 600 /etc/rsyncd.secrets
sudo chown root:root /etc/rsyncd.secrets
hua@node1:~$ sudo cat /etc/default/rsync |grep 'RSYNC_ENABLE'
RSYNC_ENABLE=true
sudo /etc/init.d/rsync restart
sudo iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
vi /etc/rsyncd.conf
pid file = /var/run/rsyncd.pid
port = 873
address = 192.168.99.124
#usermod -g root hua
uid = hua
gid = root
use chroot = yes
read only = yes
hosts allow=192.168.99.0/255.255.255.0 10.0.1.0/255.255.255.0
hosts deny=*
max connections = 5
motd file = /etc/rsyncd.motd
log file = /var/log/rsync.log
#transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
[qnap]
path = /qnap
list=yes # 可以使用rsync --list-only hua@192.168.99.124::命令列出目录
ignore errors
auth users = hua,root
secrets file = /etc/rsyncd.secrets
comment = This is qnap backup data
exclude = tmp/ test/
最后,我实际上是这样处理的,我有一个qnap,一个台式机,一个笔记本,对于一些相片啥的想多存储几份别一个机器哪天坏了丢了。
1, 由于iscsi上一个bug,一个client对qnap上的iscsi server写了之后,没法实时更新在另一个client上(必须先umount再mount一下才行), 并且qnap的iscsi采用一个大的虚拟文件存储的,这都不是我想要的。所以最后只使用了qnap上的nfs将相片存储了一份。
2, 台式机因为IP固定开机自动mount (sudo mount -t nfs -o vers=3 192.168.99.122:/Public /bak/qnap), 另外直接复制了一份到/bak/qnap_local目录防止rsync操作失误毁坏数据。
3, 笔记本因为经常外出IP不固定,外出时使用/bak/qnap_local目录的内容,在家需要同步时手工同步:
sudo mount -t nfs -o vers=3 192.168.99.122:/Public /bak/qnap
cd ~ && rsync -avzurP --exclude 'doc' --exclude 'photo' --exclude 'media' --progress --delete /bak/qnap/ /bak/qnap_local
4, 平时在家办公统一从台式机上写/bak/qnap目录将数据直接写到qnap上。手机等移动设备通过qnap ftp访问数据。
20171031更新:
最后的方案是:
1, 使用autos先将nas上的nfs共享目录共享到台式机(注: nfs共离目录无法使用inotify):
hua@node1:~$ grep -r 'auto.direct' /etc/auto.master
/- auto.direct --timeout 60
hua@node1:~$ cat /etc/auto.direct
/nas -fstype=nfs4,rsize=32768,wsize=32768 192.168.99.122:/Public
2, 然后直接手动运行下列两个命令:
rsync -avztur --progress --delete /nas/doc/ /bak/doc
rsync -avztur --progress --delete /nas/photo/ /bak/photo
20201104更新 - nas往openwrt同步数据
rsync can work in two different mode, rsync over rsync (873, rsyncd) and rsync over ssh, see https://serverfault.com/questions/827633/confused-about-rsync-port-873-and-nas
we use rsync over ssh mode here.
# openwrt (192.168.2.47, 192.168.99.1)
opkg install rsync
# nas (192.168.2.103) push data into openwrt(192.168.2.47)
# don't use rsync
cd /share/HDA_DATA/Public/test && touch test1 && touch test2 && touch test3
ssh root@192.168.2.47 "tee -a /etc/dropbear/authorized_keys" < ~/.ssh/id_rsa.pub
rsync -avztur --progress --delete --exclude 'test/test1' --exclude 'test/test2' /share/HDA_DATA/Public/test root@192.168.2.47:/mnt/sdb1/
rsync -avztur --progress --delete --exclude 'test1' --exclude 'test2' /share/HDA_DATA/Public/test/ root@192.168.2.47:/mnt/sdb1/
rsync -avztur --progress --delete --exclude 'windisk' --exclude 'media' /share/HDA_DATA/Public/ root@192.168.2.47:/mnt/sdb1/
contab -e
0 1 * * * /usr/bin/rsync -avztur --progress --delete --exclude 'windisk' --exclude 'media' /share/HDA_DATA/Public/ root@192.168.2.47:/mnt/sdb1/
或者在openwrt端做:
mkdir ~/.ssh
dropbearkey -t rsa -f ~/.ssh/id_rsa
dropbearkey -y -f ~/.ssh/id_rsa |sed -n 2p > ~/.ssh/id_rsa.pub
# https://community.onion.io/topic/2538/resolved-ssh-from-omega-to-linux-server-without-password/9
ln -s ~/.ssh/id_rsa ~/.ssh/id_dropbear
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys && chmod 644 ~/.ssh/authorized_keys
ssh admin@192.168.2.103 "tee -a /root/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub
/usr/bin/rsync -avztur --progress --delete --exclude 'windisk' --exclude 'media' admin@192.168.2.103:/share/HDA_DATA/Public/ /mnt/sdb1/
但这无论从nas还是从openwrt运行rsync都由于nas太慢大概只有4M左右,可能提升速度最好的办法是先将nas通过nfs映射到openwrt然后再拷.这样速度能达到30M
opkg install nfs-utils
showmount -e 192.168.2.103
/usr/bin/mount -t nfs 192.168.2.103:Public /mnt/nas -o proto=tcp -o nolock -o vers=4
/usr/bin/rsync -avztur --progress --delete --exclude 'windisk' --exclude 'media' /mnt/nas/ /mnt/sdc1/
但是我担心将mount放到fstab时当nas有问题时也影响openwrt的启动,所以我将上面命令放在rc.local中.
root@OpenWrt:~# cat /etc/init.d/done
#!/bin/sh /etc/rc.common
# Copyright (C) 2006 OpenWrt.org
START=95
boot() {
mount_root done
rm -f /sysupgrade.tgz && sync
# process user commands
[ -f /etc/rc.local ] && {
sh /etc/rc.local
}
# set leds to normal state
. /etc/diag.sh
set_state done
}
并且crontab也在openwrt这边做.这样速度达到了30M
root@OpenWrt:~# crontab -l |grep rsync
0 1 * * * /usr/bin/rsync -avztur --progress --delete --exclude 'windisk' --exclude 'media' /mnt/nas/ /mnt/sdc1/ >>/tmp/rsync.log 2>&1
这个调试 - tail -f /tmp/rsync.log