目录级别的原子rsync,具有最小的临时存储

Dex*_*gan 4 rsync atomicity

我在远程主机(在目录中)有一些文件,我想在目录级别以原子方式执行rsync以在本地主机上提取文件(在分布式设置中).我可以想到的一种方法是,当我可以在本地主机上备份文件然后用新文件替换旧文件时,这是一个非常简单的情况,但就磁盘空间而言,这种方法效率不高.例如,文件大小为10GB,差异只有100 MB.

有没有办法在临时位置的本地主机上存储rsync diff,然后更新本地主机上的文件?

lau*_*ent 5

你可以这样做:

  1. 在本地主机和远程主机中的临时文件夹之间运行rsync.要确保只获取diff,请使用--link-dest选项并链接到远程主机中的真实文件夹.

    你基本上有这样的命令:

    rsync --link-dest ="/ var/www"--archive"/ localhost/path/www /""remote@example.com:/ var/www_update_20131129"

    (/ var/www是要更新的文件,/ var/www_update_20131129 /是"temp"文件夹)

  2. rsync操作完成后,您可以在远程主机中交换www_update_20131129 /和真实www /文件夹(可能通过软链接www /到www_update_20131129 /).

  • @I_am_spiderman,在这种情况下,我描述的解决方案将起作用.如果只有100 MB已更改,则仅传输100 MB,并且远程主机上的可用空间仅减少100 MB.这是因为新文件夹"www_update_20131129"将与之前的"/ var/www"硬链接(由于link-dest选项).一旦转移了所有内容,您就可以删除旧文件,因为您将在新文件夹中包含硬链接副本.你可以很容易地测试这个.如果使用`--verbose`运行rsync,它将显示实际传输的内容. (2认同)