仅复制差异?

仅复制差异?

我想递归地将一个目录复制到另一个目录上,但我只想复制差异。原因是我在 Solaris 上的快照卷上执行此操作,即,如果我将 100gig 复制到已包含 100gig 的目录,但只有 5gig 不同,我不希望将整个 100gig 复制到其中因为这将用 200g 数据填充磁盘(快照保存的 100g 新数据和 100g 旧数据)。

我希望最终结果只占用 105G 的空间(即 5G 的新数据和 100G 的旧数据)。

删除快照不是一个选项,因为我们需要一个快速回滚选项。

只在块的基础上复制差异是很好的,但即使仅在不同的情况下复制整个文件也可以。

的将-u不起作用cp,因为目标处的文件可能具有较新的时间戳。

另外,我应该注意到源目录和目标目录位于不同的卷上。

我怎样才能做到这一点?

答案1

Rsync 是你的工具:

rsync --archive source/ dest/

存档只是一个复合选项,包括:

--recursive      # recurse into directories
--links          # copy symlinks as symlinks
--perms          # preserve permissions
--times          # preserve times
--group          # preserve group
--owner          # preserve owner
--devices        # preserve device files
--specials       # preserve special files

如果您的系统上没有 rsync,您应该安装它。您可能可以使用其他工具创建一些其他解决方案,但如果您正在寻找一个可以很好地完成这一任务的程序(除非我误解了您的问题),那么您正在寻找的是 rsync。

答案2

如果您想要块级副本,可以创建新快照并发送增量流。这假设您使用的是 ZFS 而不是 UFS 快照,并且您的目录(足够接近)与其所在的文件系统匹配。

相关内容