rsync工具介绍
从A机器到B机器,备份数据到远程,也可以实现从本机到本机类似cp。
把A目录拷贝到B目录,且A目录一直在更新。使用rsync可以实现增量的拷贝。更新有变更的文件。也可以实现远程同步更新。
第一个为本机到本机。第二个为本机到远程。
[root@chyuanliuNJ system]# rsync -av /etc/passwd /tmp/2.txt sending incremental file list passwd sent 1315 bytes received 31 bytes 2692.00 bytes/sec total size is 1241 speedup is 0.92 [root@chyuanliuNJ system]# rsync -av /etc/passwd root@172.16.252.69:/tmp/12.txt The authenticity of host '172.16.252.69 (172.16.252.69)' can't be established. ECDSA key fingerprint is 20:5e:a4:de:c6:7e:df:f7:b8:a3:2c:da:11:a2:18:8a. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.16.252.69' (ECDSA) to the list of known hosts. root@172.16.252.69's password: sending incremental file list passwd sent 1315 bytes received 31 bytes 69.03 bytes/sec total size is 1241 speedup is 0.92
注意:双冒号和单冒号不同
rsync [OPTION]... SRC DEST rsync [OPTION]... SRC [USER@]host:DEST rsync [OPTION]... [USER@]HOST:SRC DEST rsync [OPTION]... [USER@]HOST::SRC DEST rsync [OPTION]... SRC [USER@]HOST::DEST rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
对应于以上六种命令格式,rsync有六种不同的工作模式:
拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。如:rsync -a /data /backup
使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。如:rsync -avz *.c foo:src
使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。如:rsync -avz foo:src/bar /data
从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:rsync -av root@192.168.78.192::www /databack
从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:rsync -av /databack root@192.168.78.192::www
列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://192.168.78.192/www
rsync常用选项
-a 包含 -rtplgoD -r 同步目录时要加上,类似cp时的-r选项 -v 同步时显示一些信息,让我们知道同步的过程 -l 保留软链接 -L 加上该选项后,同步软链接时会把源文件给同步 -p 保持文件的权限数学 -o 保持文件的属性 -g 保持文件的属组 -D 保持设备文件信息 -t 保存文件的时间属性 --delte 删除DEST中SRC没有的文件 --exclude 过滤指定文件,如 --exclude “logs” 会把文件名包含logs的文件或者目录过滤掉,不同步 -P 显示同步过程,比如速率,比-v更加详细 -u 加上该选项后,如果DEST中的文件比SRC新,则不同步 -z 传输时压缩
同步目录
[root@chyuanliuNJ ll]# rsync -av /sy/ /ll/ sending incremental file list ./ 1.txt sent 82 bytes received 34 bytes 232.00 bytes/sec total size is 0 speedup is 0.00
过滤某些文件,不支持连写,但是可以写多个
rsync -avL --exclude "*.txt" --exclude "chy*" /root/111/ /tmp/111/
-l选项,仅仅拷贝软链接,不拷贝软连接源文件
[root@chy002 111]# rsync -avl /root/111/ /tmp/111_d sending incremental file list ./ 1.txt shadow_ln.txt -> /root/shadow.txt sent 170 bytes received 37 bytes 414.00 bytes/sec total size is 50 speedup is 0.24 [root@chy002 111]# ls -ls /tmp/111_d/ 总用量 4 4 -rw-r--r-- 1 root root 34 1月 30 05:49 1.txt 0 lrwxrwxrwx 1 root root 16 1月 30 05:51 shadow_ln.txt -> /root/shadow.txt
-L拷贝了源文件,可以看文件大小不同
[root@chy002 111]# rsync -avL /root/111/ /tmp/111_d sending incremental file list shadow_ln.txt sent 1223 bytes received 31 bytes 2508.00 bytes/sec total size is 1144 speedup is 0.91 [root@chy002 111]# ls -ls /tmp/111_d/ 总用量 8 4 -rw-r--r-- 1 root root 34 1月 30 05:49 1.txt 4 ---------- 1 root root 1110 1月 30 05:50 shadow_ln.txt
--delete删除目标文件夹里多的东西
[root@chy002 111]# touch /tmp/111_d/2205.txt [root@chy002 111]# rsync -av --delete /root/111/ /tmp/111_d/ sending incremental file list ./ deleting 2205.txt sent 90 bytes received 15 bytes 210.00 bytes/sec total size is 78 speedup is 0.74
rsync通过ssh同步
rsync通过ssh方式同步, -e 接命令, ssh -p 指定端口
rsync -av test1/ 192.168.133.132:/tmp/test2/
rsync -av test1/ -e "ssh -p 22" test1/192.168.133.132:/tmp/test2/
rsync通过服务的方式同步
要编辑配置文件 /etc/rsyncd.conf
启动服务 rsync --daemon
格式: rsync -av test1/ 192.168.133.130::module/dir/
rsync通过服务同步
需要编辑配置文件 /etc/rsyncd.conf
[root@chy002 ~]# cat /etc/rsyncd.conf # /etc/rsyncd: configuration file for rsync daemon mode # See rsyncd.conf man page for more options. # configuration example: # uid = nobody # gid = nobody # use chroot = yes # max connections = 4 # pid file = /var/run/rsyncd.pid # exclude = lost+found/ # transfer logging = yes # timeout = 900 # ignore nonreadable = yes # dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # [ftp] # path = /home/ftp # comment = ftp export area # 下面重新加的 port=873 #指定在哪个端口启动rsyncd服务,默认873。如果更改端口,命令中需要加--port 端口 选项 log file=/var/log/rsync.log #指定日志文件 pid file=/var/run/rsyncd.pid #指定pid文件,作用设计服务的启动、停止等进程管理操作 address=192.168.212.130 #指定启动rsyncd服务的IP,如果你机器有多个IP,可以指定一个,不指定则默认全部IP上启动 [test] #指定模块名字,在命令中会用到 path=/tmp/rsync #指定数据存放的路径,命令中 模块的意思就是该路径 use chroot=true #表示在传输文件前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但缺点是需要以roots权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true,如果你的数据当中有软连接文件,建议设置成false。 max connections=4 #指定最大的连接数,默认是0,即没有限制。 read only=false #如果为true,则不能上传到该模块指定的路径下。 list=true #表示当用户查询该服务器上的可用模块时,该模块是否被列出,设定为true则列出,false则隐藏。 uid=root #指定传输文件时以哪个用户/组的身份传输。 gid=root auth users=test #指定传输时要使用的用户名。 secrets file=/etc/rsyncd.passwd #指定密码文件,该参数连同上面的参数如果不指定,则不使用密码验证。注意该密码文件的权限一定要是600。格式:用户名:密码 hosts allow=192.168.212.22 1.1.1.1 2.2.2.2 192.168.133.0/24 #示被允许连接该模块的主机,可以是IP或者网段,如果是多个,中间用空格隔开。 #当设置了auth users和secrets file后,客户端连服务端也需要用用户名密码了,若想在命令行中带上密码,可以设定一个密码文件。service端密码文件格式 名字:密码 #这样在客户端同步数据,需要输入service密码文件里面的用户密码 rsync -avL test@192.168.133.130::test/test1/ /tmp/test8/ 如果嫌麻烦,可以在客户端也写一个密码文件,不用手动输入密码 rsync -avL test@192.168.133.130::test/test1/ /tmp/test8/ --password-file=/etc/pass #其中/etc/pass内容就是一个密码,内容为 密码 ,权限要改为600。此为客户端文件
然后启动服务 rsync --daemon ,如果更改配置文件路径的话,启动服务时需要加 --configfile=路径
命令格式,如下。在使用过程中可能会因为iptables规则而限制不能使用telnet链接端口,记得关掉firewalld和Iptables服务。
rsync服务日志如下,存在与service端
[root@chy002 dst]# cat /var/log/rsync.log 2018/02/02 05:15:03 [1889] rsyncd version 3.0.9 starting, listening on port 873 2018/02/02 05:59:08 [2038] name lookup failed for 192.168.212.22: Name or service not known 2018/02/02 05:59:08 [2038] connect from UNKNOWN (192.168.212.22) 2018/02/02 05:59:16 [2039] name lookup failed for 192.168.212.22: Name or service not known 2018/02/02 05:59:16 [2039] connect from UNKNOWN (192.168.212.22) 2018/02/02 05:59:19 [2039] auth failed on module test from unknown (192.168.212.22): unauthorized user 2018/02/02 05:59:23 [2040] name lookup failed for 192.168.212.22: Name or service not known 2018/02/02 05:59:23 [2040] connect from UNKNOWN (192.168.212.22) 2018/02/02 05:59:24 [2040] auth failed on module test from unknown (192.168.212.22): unauthorized user 2018/02/02 06:00:41 [2056] name lookup failed for 192.168.212.22: Name or service not known 2018/02/02 06:00:41 [2056] connect from UNKNOWN (192.168.212.22) 2018/02/01 22:00:41 [2056] rsync to test/dst/ from unknown (192.168.212.22) 2018/02/01 22:00:41 [2056] receiving file list 2018/02/01 22:00:41 [2056] created directory /dst 2018/02/01 22:00:41 [2056] ./ 2018/02/01 22:00:42 [2056] sent 84 bytes received 202 bytes total size 84