Rsync命令详解
-
可以镜像保存整个目录树和文件系统。
-
可以很容易做到保持原来文件的权限、时间、软硬链接等等。
-
无须特殊权限即可安装。
-
快速:第一次同步时
rsync
会复制全部内容,但在下一次只传输修改过的文件。rsync
在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。 -
安全:可以使用
scp、ssh
等方式来传输文件,当然也可以通过直接的socket
连接。 -
支持匿名传输,以方便进行网站镜象。
IP | 角色 | 用户 |
---|---|---|
192.168.1.4 | aaa-服务端 | root |
192.168.1.5 | bbb-客户端 | root |
192.168.1.6 | ccc-客户端 | root |
前期准备
- 解析
hosts
文件,为了可以直接用主机名方式(可以不弄) - aaa服务器可以直接秘钥登陆
bbb/ccc
(也可以不弄)
Rsync常用选项
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。
-v 详细输出模式,打印速率、文件数量等
-z 传输时进行压缩以提高效率
-e 使用信道协议,制定替代rs的shell程序,走的是ssh协议,需要输入密码或秘钥认证
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件。
--delete 删除那些DST中SRC没有的文件,保证服务端与客户端文件一致。
--bwlimit=KBPS 限制I/O带宽
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
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传输模式:本地传输、远程通道传输、守护进程传输
- 本地传输:单个主机本地之间的数据传输,此时类似
cp
//同步一个文件/etc/hosts到本地/tmp目录下
[root@aaa-server /]# rsync -avz /etc/hosts /tmp
// 利用rsync实现删除文件目录功能,相当于rm
[root@aaa-server /]# rsync -avz --delete /null/ /tmp/
- 远程通道传输:通过
ssh
通道传输数据,类似scp
命令
//推送本地数据至远端服务器/tmp目录
[root@aaa-server /]# rsync -avz -e 'ssh -p22' /etc/passwd root@192.168.1.5:/tmp/
//拉取远端数据至本地/tmp目录
[root@aaa-server /]# rsync -avz -e 'ssh -p22' root@192.168.1.5:/tmp/passwd.bak /tmp
- 守护进程传输:
rsync
非常重要的功能
rsync_bakup
指虚拟用户,::bakup
指模块它定义了备份的路径,--password-file=/etc/rsync.passwd
指密码文件不写它的话就要输入密码
1.编辑rsync的主配置文件,添加[bakup]模块
[root@aaa-server tmp]# vim /etc/rsyncd.conf
[bakup]
comment= bakup web
path=/data/share
auth user=root
2. 创建密码文,其格式为“username:password”,并把创建的密码文件权限设置为600
[root@aaa-server tmp]# echo "work:abc123" > /etc/rsyncd.passwd
[root@aaa-server tmp]# chmod 600 /etc/rsyncd.passwd
3. 现在就可以对数据进行备份了,注意873端口要打开,
[root@aaa-server share]# rsync -avz root@192.168.1.6::bakup --password-file=/etc/rsync.passwd /data/