共计 5846 个字符,预计需要花费 15 分钟才能阅读完成。
本文由 LinuxProbe.Com 团队成员 烨子 整理发布,原文来自:Linux 就该这么学。
导读 | Rsync(remote sync) 是用于同步某一位置文件和目录到另一位置的有效方法。备份的位置可以在本地服务器或远程服务器。本站之前亦有介绍 rsync 的安装配置和教程,详看《rsync 的安装和配置》一文。 |
速度:第一次的 rsync 同步源的整个内容目录到目标位置。之后,rsync 只传递改变的块或字节到目标位置,使传输非常快。
安全:rsync 在传输中允许使用 ssh 协议加密数据。
更少的带宽:rsync 分别在发送和接收端对数据进行压缩和解压缩。所以在使用 rsync 传输数据时使用的带宽总是比使用其他文件传输协议来的少。
特权:不需要特殊权限来安装和执行 rsync
$ rsync options source destination
source 和 destination 可以是本地或远程。在远程的情况下,需要指定登录名、远程服务器的名称和位置。
1. 在本地服务器上同步两个目录
用 rsync – zvr 在本地服务器上同步两个目录
$ rsync -zvr /var/opt/installation/inventory/ /root/temp
building file list ... done
sva.xml
svB.xml
.
sent 26385 bytes received 1098 bytes 54966.00 bytes/sec
total size is 44867 speedup is 1.63
在上面 rsync 例子中:
• –z:允许压缩
• –v:冗长
• –r:递归
注:Rsync 不会同步源文件或目录的时间戳
$ ls -l /var/opt/installation/inventory/sva.xml /root/temp/sva.xml
-r--r--r-- 1 bin bin 949 Jun 18 2009 /var/opt/installation/inventory/sva.xml
-r--r--r-- 1 root bin 949 Sep 2 2009 /root/temp/sva.xml
2. 用 rsync –a 同步时间戳
rsync 的 - a 选项是 archive 的意思,加了之后有以下作用:
• 递归模式
• 同步软链接
• 同步权限
• 同步时间戳
• 同步属主和属组
现在,我们执行与例 1 一样的命令,不同的是使用 - a 选项。
$ rsync -azv /var/opt/installation/inventory/ /root/temp/
building file list ... done
./
sva.xml
svB.xml
.
sent 26499 bytes received 1104 bytes 55206.00 bytes/sec
total size is 44867 speedup is 1.63
我们可以看到,rsync 将源目录下文件的时间戳也同步过来了。
$ ls -l /var/opt/installation/inventory/sva.xml /root/temp/sva.xml
-r--r--r-- 1 root bin 949 Jun 18 2009 /var/opt/installation/inventory/sva.xml
-r--r--r-- 1 root bin 949 Jun 18 2009 /root/temp/sva.xml
3. 只同步一个文件
指定文件名称,只同步一个文件
$ rsync -v /var/lib/rpm/Pubkeys /root/temp/
Pubkeys
sent 42 bytes received 12380 bytes 3549.14 bytes/sec
total size is 12288 speedup is 0.99
4. 将本地文件同步到远程服务器
当同步到远程服务器时,我们需要指定用户名、远程服务器的 IP 地址和目标路径。格式为:username@remote_server_ip:path
$ rsync -avz /root/temp/ linuxprobe@192.168.200.10:/home/linuxprobe/temp/
Password:
building file list ... done
./
rpm/
rpm/Basenames
rpm/Conflictname
sent 15810261 bytes received 412 bytes 2432411.23 bytes/sec
total size is 45305958 speedup is 2.87
5. 将远程文件同步到本地服务器
$ rsync -avz linuxprobe@192.168.200.10:/var/lib/rpm /root/temp
Password:
receiving file list ... done
rpm/
rpm/Basenames
.
sent 406 bytes received 15810230 bytes 2432405.54 bytes/sec
total size is 45305958 speedup is 2.87
6. 指定使用某一 shell 同步
远程同步时,Rsync 可以指定使用某一 shell 进行安全传输。如:使用 rsync –e ssh 选择 ssh 进行安全连接。
$ rsync -avz -e ssh linuxprobe@192.168.200.10:/var/lib/rpm /root/temp
Password:
receiving file list ... done
rpm/
rpm/Basenames
sent 406 bytes received 15810230 bytes 2432405.54 bytes/sec
total size is 45305958 speedup is 2.87
7. 不覆盖目标位置已改变的文件
如果目标位置的文件已被修改,而我们不希望旧文件覆盖它时,可以使用 - u 选项。下面例子中,目标位置的文件 Basenames 已经被修改,使用 -u 选项是它不被旧文件覆盖。
$ ls -l /root/temp/Basenames
total 39088
-rwxr-xr-x 1 root root 4096 Sep 2 11:35 Basenames
$ rsync -avzu linuxprobe@192.168.200.10:/var/lib/rpm /root/temp
Password:
receiving file list ... done
rpm/
sent 122 bytes received 505 bytes 114.00 bytes/sec
total size is 45305958 speedup is 72258.31
$ ls -lrt
total 39088
-rwxr-xr-x 1 root root 4096 Sep 2 11:35 Basenames
8. 只同步目录树结构(不包括文件)
使用 rsync – d 选项只将目录树从源位置同步至目标位置。下面的示例中,以递归方式只同步目录树而不同步目录中的文件。
$ rsync -v -d linuxprobe@192.168.200.10:/var/lib/ .
Password:
receiving file list ... done
logrotate.status
CAM/
YaST2/
acpi/
sent 240 bytes received 1830 bytes 318.46 bytes/sec
total size is 956 speedup is 0.46
9. 查看 rsync 进度
使用 rsync –progress 选项可以查看 rsync 进度,如多少文件已经被拷贝,完成率是多少等
$ rsync -avz --progress linuxprobe@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ...
19 files to consider
./
Basenames
5357568 100% 14.98MB/s 0:00:00 (xfer#1, to-check=17/19)
Conflictname
12288 100% 35.09kB/s 0:00:00 (xfer#2, to-check=16/19)
.
.
.
sent 406 bytes received 15810211 bytes 2108082.27 bytes/sec
total size is 45305958 speedup is 2.87
10. 删除目标位置创建的文件
若我们希望 rsync 时删除在源位置不存在而在目标位置存在的文件,可以使用 -delete 选项。
此例中,我们在目标位置创建了一个新文件名为 new-file.txt.,在同步过程中,-delete 选项删除了 new-file.txt 文件
# Source and target are in sync. Now creating new file at the target.
$ > new-file.txt
$ rsync -avz --delete linuxprobe@192.168.200.10:/var/lib/rpm/ .
Password:
receiving file list ... done
deleting new-file.txt
./
sent 26 bytes received 390 bytes 48.94 bytes/sec
total size is 45305958 speedup is 108908.55
11. 在目标位置不创建新文件
使用 -existing 选项使得在同步时只同步目标位置存在的文件,而不创建新文件。
# 在源位置创建新文件 new-file.txt
[/var/lib/rpm]$ > new-file.txt
#同步目录
$ rsync -avz --existing root@192.168.1.2:/var/lib/rpm/ .
root@192.168.1.2's password:
receiving file list ... done
./
sent 26 bytes received 419 bytes 46.84 bytes/sec
total size is 88551424 speedup is 198991.96
12.查看源和目标的不同文件或目录
源位置:
$ ls -l /var/lib/rpm
-rw-r--r-- 1 root root 5357568 2010-06-24 08:57 Basenames
-rw-r--r-- 1 root root 12288 2008-05-28 22:03 Conflictname
-rw-r--r-- 1 root root 1179648 2010-06-24 08:57 Dirnames
目标位置:
$ ls -l /root/temp
-rw-r--r-- 1 root root 12288 May 28 2008 Conflictname
-rw-r--r-- 1 bin bin 1179648 Jun 24 05:27 Dirnames
-rw-r--r-- 1 root root 0 Sep 3 06:39 Basenames
源和目标之间有两个不同之处:1. 文件 Dirnames 属主和属组不同 2. 文件 Basenames 的大小不同
使用 - i 选项来显示不同之处,如下所示
$ rsync -avzi linuxprobe@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ... done
>f.st.... Basenames
.f....og. Dirnames
sent 48 bytes received 2182544 bytes 291012.27 bytes/sec
total size is 45305958 speedup is 20.76
In the output it displays some 9 letters in front of the file name or directory name indicating the changes.
可以看到,在文件名或目录名前有 9 个字符来代表不同之处。此例中,Basenames 和 Dirnames 前的字符代表含义如下:
> 代表文件已被传输到本地主机。f:代表这是个文件
s:代表文件大小发生变化
t:代表时间戳发生变化
o:属主发生变化
g:属组发生变化
13. 在传输时指定包括或排除某些文件
只传输’P’开头的文件或目录(使用 rsync include),不传输其他任何文件(使用 rsync exclude)
$ rsync -avz --include 'P*' --exclude '*' linuxprobe@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ... done
./
Packages
Providename
Provideversion
Pubkeys
sent 129 bytes received 10286798 bytes 2285983.78 bytes/sec
total size is 32768000 speedup is 3.19
14. 不传输大文件
使用 rsync –max-size 选项后,rsync 将不传输大于指定大小的文件
$ rsync -avz --max-size='100K' linuxprobe@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ... done
./
Conflictname
Group
Installtid
Name
Sha1header
Sigmd5
Triggername
sent 252 bytes received 123081 bytes 18974.31 bytes/sec
total size is 45305958 speedup is 367.35
15. 传输整个文件
rsync 的主要特征之一是它只传输改变的块到目标位置,而不是传输整个文件。如果网络带宽对你不是问题(CPU 有),您可以使用 - w 选项来传输整个文件。它会加速 rsync 过程,因为它不用在源和目标位置执行校验和。
# rsync -avzW linuxprobe@192.168.200.10:/var/lib/rpm/ /root/temp
Password:
receiving file list ... done
./
Basenames
Conflictname
Dirnames
Filemd5s
Group
Installtid
Name
sent 406 bytes received 15810211 bytes 2874657.64 bytes/sec
total size is 45305958 speedup is 2.87