我想递归地将一个目录复制到另一个目录上,但我只想复制差异。原因是我在 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 快照,并且您的目录(足够接近)与其所在的文件系统匹配。