前言
将文件从一台计算机同步或备份到另一台计算机的快速简便的方法是使用rsync。我将介绍通常用于备份数据的命令行选项,并显示一些选项以极大地将传输速度从大约20-25 MB / s加快到90 MB / s以上!
rsync的简短描述
rsync协议能够有效地在计算机之间同步文件。它仅通过传输更改的文件来完成此操作,除此之外,它还尝试仅传输本地文件和远程文件之间的差异,以进一步最小化传输的数据大小。
底层数据传输使用Secure Shell或 SSH保护,这增加了另一层计算开销来安全地加密数据,然后传输到远程服务器并再次对其解密。因为我大部分时间都在使用计量互联网连接,所以我在SSH中使用了最大可能的压缩率,这在本地和快速网络中使用rsync时会成为瓶颈。
使用的命令行参数说明
我的默认命令行参数,带有完整rsync手册页中的描述:
- -a:存档模式(等于-rlptgoD):递归,将符号链接复制为符号链接,保留权限,保留修改时间,保留组,保留所有者,保留设备文件和特殊文件
- -v:在传输过程中增加详细信息
- -u:跳过接收方上较新的文件
- -r:递归到目录
- --progress:显示传输过程中的进度
- --delete:从远程服务器中删除多余的文件
优化的rsync的性能
SSH的最大压缩(在我的配置中默认使用)对带宽较小的计量连接很有帮助,在这种情况下,您可以从减少的数据量中节省时间。在本地快速网络中,这实际上是瓶颈,并且在SSH命令的100%CPU使用率中体现出来。在这种快速的本地网络中,无需进行任何压缩即可直接传输文件,因为压缩和解压缩会比仅传输普通文件花费更长的时间。
为此,可以使用以下选项来加速本地网络中的数据传输:
- -T:在目标上的可行伪tty分配
- -c aes128-ctr:选择一个较弱但较快的SSH加密。其他人指定arcfour,这将需要在目标主机上手动修改ssh_config。这并非总是可能的,并且这种加密对我来说效果很好。
- -x:禁用X11转发
- -o Compression = no:禁用上述SSH压缩瓶颈
- -z 选项也可能会降低性能,如果不通过慢速链接传输数据,则不应该使用它
- --inplace 原地替换,即不会生成临时文件, 不会有mv tmp target。
- --exclude-from或类似的排除您可能不需要的文件将减少时间,但不会增加传输速度。
-
-S
/--sparse
:将空序列变成稀疏块 -
--partial
或者-P
是--partial --progress
:保存任何部分传输的文件以供将来恢复。注意:文件不会有临时名称,因此请确保在整个副本完成之前,没有其他期望使用目标的文件。 -
--no-whole-file
这样需要重新发送的任何内容都会使用增量传输。读取部分传输的文件的一半通常比重新写入要快得多。 -
--inplace
避免文件复制(但前提是在整个传输完成之前没有任何内容读取目标) - 为传输的不同部分运行rsync的多个实例可能会很有帮助
- -u 只传输增量文件
完整的命令将foo文件夹备份到 目标主机desthost上的远程文件夹栏,然后:
export RSYNC_RSH ="ssh -T -c aes128-ctr -o Compression = no -x"
rsync -avur --progress --delete foo desthost::bar
使用此命令,可以将传输速率从大约20-25 MB / s增加到90 MB/s以上!
参考说明:
1. 稀疏文件是一种计算机文件,它能尝试在文件内容大多为空时更有效率地使用文件系统的空间。它的原理是以简短的信息表示空数据块,而不是在在磁盘上占用实际空间来存储空数据块。只有真实的数据块会按原样写入磁盘。 在读取稀疏文件时,文件系统会按元数据在运行时将这些透明转换为“真实”的数据块,即填充为零。应用程序不会察觉这个转换。
作者:sunsky303