rsync
rsync是可以实现增量备份的工具。配合任务计划,rsync能实现定时或间隔同步,配合inotify或sersync,可以实现触发式的实时同步。
rsync可以实现scp的远程拷贝(rsync不支持远程到远程的拷贝,但scp支持)、cp的本地拷贝、rm删除和"ls -l"显示文件列表等功能。但需要注意的是,rsync的最终目的或者说其原始目的是实现两端主机的文件同步,因此实现的scp/cp/rm等功能仅仅只是同步的辅助手段,且rsync实现这些功能的方式和这些命令是不一样的。事实上,rsync有一套自己的算法,其算法原理以及rsync对算法实现的机制可能比想象中要复杂一些。
1. rsync [OPTION]... SRC DEST 拷贝本地文件
[root@localhost awk]# rsync -av /etc/passwd /tmp/22.txt #备份passwd到/tmp/下的22.txt
sending incremental file list
passwd
sent 1252 bytes received 31 bytes 2566.00 bytes/sec
total size is 1178 speedup is 0.92
2. rsync [OPTION]... SRC [USER@]HOST:DEST 本地机器的内容拷贝到远程机器
[root@localhost awk]# rsync -av /etc/passwd root@192.168.177.8:/tmp/22.txt 将本地机器上的/etc/passwd文件拷贝到远程192.168.177.8的/tmp/22.txt
sending incremental file list
passwd
sent 1252 bytes received 31 bytes 855.33 bytes/sec
total size is 1178 speedup is 0.92
3.rsync [OPTION]... [USER@]HOST:SRC DEST 将远程机器的内容拷贝到本地机器。
[root@localhost ~]# rsync -av root@192.168.177.8:/etc/cron.d/ /tmp/ss
receiving incremental file list
created directory /tmp/ss
./
0hourly
sent 33 bytes received 225 bytes 172.00 bytes/sec
total size is 128 speedup is 0.50
4. -e 指定端口进行传输
[root@localhost ~]# rsync -avP -e "ssh -p 22"root@192.168.177.8:/etc/cron.d/ /tmp/ss
sending incremental file list
drwxr-xr-x 21 2017/11/09 14:13:19 ss
-rw-r--r-- 128 2017/08/03 23:33:54 ss/0hourly
sent 57 bytes received 13 bytes 140.00 bytes/sec
total size is 128 speedup is 1.83
rsync -a -a包含的选项 -rtplgoD
-r 同步目录的时候要加上,类似cp的-r
-v 可视化,同步时显示一些信息,可以看到同步的过程
-l 保留软链接
-L 将软链接指向的原文件拷贝过去
-p 保留文件的权限shux
-o 保持文件的属主
-g 保持文件的属组
-D 保持文件设备信息
-t 保持文件的时间属性
-P --progress 显示备份过程,比-v更加详细,比如显示速率
--delete 删除目标目录中没有的文件或目录
--exclude 过滤指定文件
-u --update 仅仅进行更新,也就是跳过所有已经存在于DEST,并且文件时间晚于要备份的文件,不覆盖更新的文件。
-z 传输时压缩
rsync通过服务同步
两台机器:
A机器:192.168.177.8
B机器:192.168.177.7
需要将B机器的文件同步到A机器上
1. 编辑A机器配置文件,
[root@qw01 ~]# vi /etc/rsyncd.conf #编辑配置文件,将以下内容添加到文件里
port=873
log file=/var/log/rsync.log
pid file=/var/run/rsyncd.pid
address=192.168.177.8
[test]
path=/tmp/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.177.7 1.1.1.1 2.2.2.2 192.168.177.0/24
2.A机器启动服务
[root@qw01 ~]# rsync --daemon
[root@qw01 ~]# ps aux |grep rsync
root 1319 0.0 0.0 114652 520 ? Ss 22:20 0:00 rsync --daemon
root 1322 0.0 0.0 112676 984 pts/0 S+ 22:21 0:00 grep --color=auto rsy
3.A机器创建目录
[root@qw01 ~]# mkdir /tmp/rsync
[root@qw01 ~]# chmod 777 /tmp/rsync
4.前期的准备工作已经做完,可以开始同步文件
从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式
rsync [OPTION]... SRC [USER@]HOST::DEST
B机器执行以下命令
[root@localhost ~]# rsync -avP /root/zx 192.168.177.8::test/zx.bak #将B机器上的/root/zx文件备份到远程A机器,并改名为zx.bak
从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式
rsync [OPTION]... [USER@]HOST::SRC DEST
A机器执行以下命令
[root@localhost ~]# rsync -avP 192.168.177.8::test/zx.bak /tmp/bb.txt
5. 配置文件详解
port :指定在哪个端口启动rsyncd服务,默认是873端口。
log file :指定日志文件。
pid file :指定pid文件,这个文件的作用涉及服务的启动、停止等进程管理操作。
address :指定启动rsyncd服务的IP。假如你的机器有多个IP,就可以指定由其中一个启动rsyncd服务,如果不指定该参数,默认是在全部IP上启动。
[] :指定模块名,里面内容自定义。
path :指定数据存放的路径。
max connections :指定最大的连接数,默认是0,即没有限制。
read only ture|false:如果为true,则不能上传到该模块指定的路径下。
list :表示当用户查询该服务器上的可用模块时,该模块是否被列出,设定为true则列出,false则隐藏。
uid/gid :指定传输文件时以哪个用户/组的身份传输。
auth users :指定传输时要使用的用户名。
secrets file :指定密码文件,该参数连同上面的参数如果不指定,则不使用密码验证。注意该密码文件的权限一定要是600。格式:用户名:密码
use chroot true|false:表示在传输文件前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但缺点是需要以root权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true,如果你的数据当中有软连接文件,建议设置成false。
hosts allow :表示被允许连接该模块的主机,可以是IP或者网段,如果是多个,中间用空格隔开。
当设置了auth users和secrets file后,客户端连服务端也需要用用户名密码了,若想在命令行中带上密码,可以设定一个密码文件 rsync -avL test@192.168.133.130::test/test1/ /tmp/test8/ --password-file=/etc/pass 其中/etc/pass内容就是一个密码,权限要改为600