自在工坊

走在代码边缘

Rsync替代CP实现高效文件复制

Linux系统下常用数据文件/目录内容同步命令rsync,常用方式如下

$ rsync -avz --progress /sourcefolder /targetfolder
$ rsync -avz --progress /sourcefolder/ /targetfolder

参数选项

  • 关闭 -z 选项,不使用压缩;-z参数仅对传输过程中压缩网络流量有用,会消耗CPU资源。
  • 使用 -W 选项,整个复制文件,禁用增量/差异比较;当文件时间/大小不同时,rsync将比较差异并且仅更新更改文件。
$ rsync -avW --progress /sourcefolder /targetfolder

以上rsync执行速度与常用cp速度基本一致。

其它参数设置

  • --no-compress 有可能会加快传输速度
  • --dry-run 模拟运行结果,验证命令是否正确
  • --remove-source-files 在rsync命令的发送方删除作为传输一部分并已在接收方成功复制的文件
  • -A,X,E涵盖了-a未涵盖的扩展属性和权限
  • -l 代表软链接
  • -H 代表硬链接
  • -h 代表人类可读
  • -S 处理稀疏文件 -如果您没有稀疏文件,则不会受到伤害
  • --exclude-from 排除可能不需要的文件,减少传输时间,但此参数并不会增加传输速度
  • -S/ --sparse,将空序列变为稀疏块
  • --partial/-P 是--partial --progress:保存任何部分传输的文件以供将来恢复
  • --no-whole-file 需要重新发送的文件内容,都会使用增量传输,读取部分内容通常比全部快
  • --inplace 避免文件复制(但前提是在整个传输完成之前没有任何内容读取目标)
  • --delete 在rsync命令的接收方,即从目标目录中删除无关的文件;注意与--remove-source-files区别

输出发送到文件中,命令格式如下:

$ rsync -a /sourcefolder /targetfolder 1>/rsync.out 2>/rsync.err 
  • 1>将内容输出rsync.out文件
  • 2>将错误消息输出rsync.err文件

结合以上参数,优化后的rsync命令如下:

rsync -avAXEWSlHh /sourcefolder /targetfolder --no-compress --info=progress2 --dry-run

远程同步 除本地两个目录间数据同步外,rsync使用更多的场景为远程目录间进行同步,可将本地内容同步到指定IP的远程目录下,反之亦然;ssh协议下命令格式如下:

$ rsync -avW --progress /sourcefolder user@remote_host_ip:/targetfolder

Pelican Image

Tech rsync

Comments