-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
yum install -y rsync 安装
-a 归档模式,以递归方式传输文件 并保持所有属性
-r 对子目录以递归模式处理
-v 打印一些信息出来,比如速率,文件数量等
-l 保留软连接
-L 像对待常规文件一样处理软连接,如果是SRC中有软连接文件,则加上该选项后将会把软连接指向的目标文件拷贝到DST
-p 保持文件权限
-o 保持文件属主信息
-g 保持文件属组信息
-D 保持文件设备信息
-t 保持文件时间信息
--delete 删除那些DST中SRC没有的文件
--exclude=PATTERN 指定排除不需要的传输文件,等号后面跟文件名
--progress 在同步过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等
-u 将会把DST中比SRC还新的文件排除掉,不会删除
rsync同步之ssh隧道
yum install -y openssh-clients 安装
resync -avL test1/ name@X.X.X.X:/tmp/test2/
密钥登录
name1和name2
从name1(192.168.1.101)拷贝到name2(192.168.1.102)上
首先确认name1上有没有/root/.ssh/id_rsa.pub:
[root@name-1 ~]# ssh-keygen
生成密钥
root@name-1 ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 3b:74:af:e8:08:ac:99:30:3f:ef:84:7a:a0:a6:3d:89
root@name-1
在这个过程中会有一些交互的过程,它首先提示要输入这个密钥的密码,出于安全考虑应该定义个密码,但是我们的目的就是为了自动化同步数据,所以这里不输入任何密码,直接按回车,即密码为空。最后则生成了私钥(/root/.ssh/id_rsa)和公钥文件(/root/.ssh/id_rsa.pub)
把公钥文件的内容拷贝到目标机器上:
# cat .ssh/id_rsa.pub
复制主机name-1的/root/.ssh/id_rsa.pub文件内容,并粘贴到主机name-2的/home/www/.ssh/authorized_keys中:
vim /home/www/.ssh/authorized_keys
在这一步也许你会遇到/home/www/.ssh目录不存在的问题,可以手动创建,并修改目录权限为700也可以执行ssh-keygen命令生成这个目录。保存/home/www/.ssh/authorized_keys文件后,再到主机Aming-1上执行:
后台服务方式
建立并设置rsync /etc/rsync.conf
[root@name-1 ~]# vim /etc/rsyncd.conf #port=873 log file=/var/log/rsync.log pid file=/var/run/rsyncd.pid #address=192.168.0.101 [test] path=/root/rsync use chroot=true max connections=4 read only=no list=true uid=root gid=root auth users=test secrets file=/etc/rsyncd.passwd hosts allow=192.168.0.102
port 指定在哪个端口启动rsyncd服务,默认是873
log file 指定日志文件
pid file 指定pid文件,这个文件的作用涉及到服务的启动以及停止等进程管理操作
address 指定启动rsyncd服务的IP,假如你的机器有多个IP,就可以指定其中一个启动rsyncd服务,默认是在全部IP上启动
[test] 指定模块名,自定义
path 指定数据存放的路径
use chroot true|false 默认是true,意思是在传输文件以前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要以roots权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true,如果你的数据当中有软连接文件的话建议设置成false。
max connections 指定最大的连接数,默认是0即没有限制
read only ture|false 如果为true则不能上传到该模块指定的路径下
list 指定当用户查询该服务器上的可用模块时,该模块是否被列出,设定为true则列出,false则隐藏
uid/gid 指定传输文件时,以哪个用户/组的身份传输
auth users 指定传输时要使用的用户名
secrets file 指定密码文件,该参数连同上面的参数如果不指定则不使用密码验证,注意该密码文件的权限一定要是600
hosts allow 指定被允许连接该模块的主机,可以是IP或者网段,如果是多个,之间用空格隔开
- 编辑secrets file,保存后要赋予600权限,如果权限不对,不能完成同步
[root@name-1 ~]# cat /etc/rsyncd.passwd test:test123 [root@name-1 ~]# chmod 600 /etc/rsyncd.passwd
2.启动rsyncd服务
[root@name-1 ~]# rsync --daemon --config=/etc/rsyncd.conf
启动后,可以查看一下日志,并查看端口是否启动:
[root@name-1 ~]# cat /var/log/rsync.log [root@name-1 ~]# netstat -lnp |grep 873 tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 12066/rsync tcp 0 0 :::873 :::* LISTEN 12066/rsync
如果想开机启动,请把 rsync --daemon --confg=/etc/rsyncd.conf 写入到/etc/rc.d/rc.local文件。
- 到另一台机器上测试
[root@name-2 ~]# rsync -avL test@192.168.0.10::test/test1/ /tmp/test5/ Password: receiving incremental file list created directory /tmp/test5 ./ 1 1.txt 2 2.txt 3 4 sent 143 bytes received 354 bytes 994.00 bytes/sec total size is 0 speedup is 0.00
阿铭刚刚提到有一个选项叫做 “use chroot” 默认为true,如果是true,同步的文件中如果有软连接,则会有问题,首先在主机name-1的/root/rsync/test1/ 目录下创建一个软连接文件:
[root@name-1 ~]# ln -s /root/test.txt rsync/test1/test.txt [root@name-1 ~]# ls -l rsync/test1/test.txt lrwxrwxrwx 1 root root 14 6月 12 13:24 rsync/test1/test.txt -> /root/test.txt
然后再到主机name-2上,同步:
[root@name-2 ~]# rsync -avL test@192.168.0.10::test/test1/ /tmp/test6/ Password: receiving incremental file list symlink has no referent: "/test1/test.txt" (in test) created directory /tmp/test6 ./ 1 1.txt 2 2.txt 3 4 sent 143 bytes received 419 bytes 1124.00 bytes/sec total size is 0 speedup is 0.00 rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1532) [generator=3.0.6]
可以看到,如果设置 “use chroot” 为true则同步软连接文件会有问题,下面阿铭把主机name-1的rsync配置文件修改一下,把true改为false:
[root@name-1 ~]# sed -i ‘s/use chroot=true/use chroot=false/‘ /etc/rsyncd.conf [root@name-1 ~]# grep ‘use chroot‘ /etc/rsyncd.conf use chroot=false
然后再到主机name-2上再次执行同步:
[root@name-2 ~]# rsync -avL test@192.168.0.10::test/test1/ /tmp/test7/ Password: receiving incremental file list created directory /tmp/test7 ./ 1 1.txt 2 2.txt 3 4 test.txt sent 162 bytes received 410 bytes 1144.00 bytes/sec total size is 0 speedup is 0.00
-------------------------------------------------------------------------------------