Rsync的远程同步
Rsync的一些优点和功能
它有效地将文件复制到远程系统或从远程系统同步。
支持复制链接,设备,所有者,组和权限。
这是比快SCP( 安全复制 ),因为rsync使用远程更新协议,允许转让只是两套文件之间的差异。 第一次,它从源到目标复制文件或目录的整个内容,但从下一次,它只将已更改的块和字节复制到目标。
rsync的消耗更少的带宽 ,因为它使用压缩和解压缩方法在发送和接收数据两端。
rsync的常见选项
-v:详细
-r:将数据递归,但不保存时间戳和权限,同时传输数据
-a:归档模式下,归档模式允许递归地拷贝文件,同时也保留了符号链接,文件权限,用户组所有权和时间戳
-z:压缩文件中的数据
-h:在人类可读的格式人类可读,输出数字
-e:使用SSH加密协议传输,SSH非标准端口[如1234]示例:-e 'ssh -p 1234'。
-P:(大写的P)显示传输速度与进度,--progress。
Linux机器上安装rsync
# apt-get install rsync ##适用于debian,ubuntu系统
# yum install -y rsync ##适用于centos系统
# pacman -Sy rsync ##适用于archlinux系统
本地计算机上复制/同步文件
同步本地计算机上的单个文件从一个位置到另一个位置。
把backup.tar.gz
复制或同步到/tmp/backups/
文件夹。
# rsync -zvh backup.tar.gz /tmp/backups/
created directory /tmp/backups
backup.tar.gz
sent 14.71M bytes received 31 bytes 3.27M bytes/sec
total size is 16.18M speedup is 1.10
同步过程中,如果目标不存在,rsync将自动为目标创建一个目录。
本地计算机上复制/同步目录
将同一目录中的所有文件传输或同步到同一计算机中的不同目录。
在这里,在这个例子中/root/rpmpkgs
包含一些rpm软件包的文件和你想要的目录里面被复制/tmp/backups/
文件夹。
# rsync -avzh /root/rpmpkgs /tmp/backups/
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm
rpmpkgs/mod_ssl-2.2.3-82.el5.centos.i386.rpm
rpmpkgs/nagios-3.5.0.tar.gz
rpmpkgs/nagios-plugins-1.4.16.tar.gz
sent 4.99M bytes received 92 bytes 3.33M bytes/sec
total size is 4.99M speedup is 1.00
将目录从本地服务器复制到远程服务器
将本地计算机的目录同步到远程机服务器,例如:将本地计算机rpmpkgs
文件夹里面的文件发送到远程服务器,您可以使用以下命令。
$ rsync -avz rpmpkgs/ root@192.168.0.101:/home/
root@192.168.0.101's password:
sending incremental file list
./
httpd-2.2.3-82.el5.centos.i386.rpm
mod_ssl-2.2.3-82.el5.centos.i386.rpm
nagios-3.5.0.tar.gz
nagios-plugins-1.4.16.tar.gz
sent 4993369 bytes received 91 bytes 399476.80 bytes/sec
total size is 4991313 speedup is 1.00
将远程目录同步到本地目录。
远程服务器目录/home/tarunika/rpmpkgs复制到本地计算机的/tmp/myrpms目录。
# rsync -avzh root@192.168.0.100:/home/tarunika/rpmpkgs /tmp/myrpms
root@192.168.0.100's password:
receiving incremental file list
created directory /tmp/myrpms
rpmpkgs/
rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm
rpmpkgs/mod_ssl-2.2.3-82.el5.centos.i386.rpm
rpmpkgs/nagios-3.5.0.tar.gz
rpmpkgs/nagios-plugins-1.4.16.tar.gz
sent 91 bytes received 4.99M bytes 322.16K bytes/sec
total size is 4.99M speedup is 1.00
Rsync通过SSH加密传输
通过SSH将文件从远程服务器复制到本地服务器
Rsync使用SSH协议,需要加上-e参数 。
# rsync -avzhe ssh root@192.168.0.100:/root/install.log /tmp/
root@192.168.0.100's password:
receiving incremental file list
install.log
sent 30 bytes received 8.12K bytes 1.48K bytes/sec
total size is 30.74K speedup is 3.77
使用SSH将文件从本地服务器复制到远程服务器
# rsync -avzhe ssh backup.tar root@192.168.0.100:/backups/
root@192.168.0.100's password:
sending incremental file list
backup.tar
sent 14.71M bytes received 31 bytes 1.28M bytes/sec
total size is 16.18M speedup is 1.10
Rsync与非标准SSH端口
从远程服务器同步到本地,非SSH标准端口示例,<port-number>为你的端口号。
# rsync -arvzP -e 'ssh -p <port-number>' user@remote-server:/path/to/remote/folder /path/to/local/folder
使用--include和--exclude选项
这两个选项可以让我们包括通过与这些选项可以帮助我们来指定要在同步纳入和排除文件和文件夹,你不想被转移这些文件或目录指定参数排除文件。
在这个例子中,rsync命令将包括那些只有那些带“R”开始的文件和目录,并排除所有其它文件和目录。
# rsync -avze ssh --include 'R*' --exclude '*' root@192.168.0.101:/var/lib/rpm/ /root/rpm
root@192.168.0.101's password:
receiving incremental file list
created directory /root/rpm
./
Requirename
Requireversion
sent 67 bytes received 167289 bytes 7438.04 bytes/sec
total size is 434176 speedup is 2.59
使用--delete选项
如果文件或目录在源处不存在,但在目标位置已存在,那么在同步时可能需要删除目标处的现有文件/目录。
我们可以用'--delete'选项删除不存在源目录中的文件。
源和目标已同步。
现在,在创建新的目标文件test.txt。
# touch test.txt
# rsync -avz --delete root@192.168.0.100:/var/lib/rpm/ .
Password:
receiving file list ... done
deleting test.txt
./
sent 26 bytes received 390 bytes 48.94 bytes/sec
total size is 45305958 speedup is 108908.55
目标有叫test.txt的 ,当用'--delete'选项的源同步新的文件,它去掉了文件test.txt。
设置要传输的文件的最大大小
指定要传输的最大文件大小或同步,可以用“-MAX大小 ”选项做到这一点。
在这个例子中,最大文件的大小是200K,因此该命令将只传送那些等于或大于200k的较小的文件。
# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ root@192.168.0.100:/root/tmprpm
root@192.168.0.100's password:
sending incremental file list
created directory /root/tmprpm
./
Conflictname
Group
Installtid
Name
Provideversion
Pubkeys
Requireversion
Sha1header
Sigmd5
Triggername
__db.001
sent 189.79K bytes received 224 bytes 13.10K bytes/sec
total size is 38.08M speedup is 200.43
成功传输后自动删除源文件
现在,假设您有一个主Web服务器和数据备份服务器,您创建了每日备份并与备份服务器同步,现在您不想在Web服务器中保留备份的本地副本。
所以,你会等待传输完成,然后手动删除这些本地备份文件?
当然不。
这种自动删除可以用'--remove-source “选项来完成。
# rsync --remove-source-files -zvh backup.tar /tmp/backups/
backup.tar
sent 14.71M bytes received 31 bytes 4.20M bytes/sec
total size is 16.18M speedup is 1.10
# ls backup.tar
ls: backup.tar: No such file or directory
使用rsync进行演习
如果你是一个新手,并使用rsync,不知道你的命令去做什么。
Rsync可能真的搞砸了你的目标文件夹中的东西,然后做一个撤消可以是一个乏味的工作。
此选项将不会做任何改变,只做命令的预演和显示命令的输出,如果输出显示完全相同你想做的事,那么你可以从你的命令删除“--dry-run ”选项,在终端上运行。
# rsync --dry-run --remove-source-files -zvh backup.tar /tmp/backups/
backup.tar
sent 35 bytes received 15 bytes 100.00 bytes/sec
total size is 16.18M speedup is 323584.00 (DRY RUN)
设置带宽限制和传输文件
您可以同时从一台机器与'-bwlimit'选项的帮助下将数据传输到另一台机器上设置的带宽限制。
此选项可以帮助我们限制I / O带宽。
# rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ root@192.168.0.100:/root/tmprpm/
root@192.168.0.100's password:
sending incremental file list
sent 324 bytes received 12 bytes 61.09 bytes/sec
total size is 38.08M speedup is 113347.05
此外,默认情况rsync的同步不仅改变块和字节,如果你想明确地要同步整个文件,然后使用-W选项。
# rsync -zvhW backup.tar /tmp/backups/backup.tar
backup.tar
sent 14.71M bytes received 31 bytes 3.27M bytes/sec
total size is 16.18M speedup is 1.10
Rsync更多信息,可以在终端中使用man rsync查看。