0

所以我一直在寻找这个上下,但一定是在做一些根本错误的事情。我想做的事:

我已将 NAS 配置为对我的主文件夹进行快照,文件系统是 btrfs。这可以正常工作,并且正在使用硬链接。

我想复制整个快照目录以备份到 ext4 USB 磁盘上,使用 rsync -aH 保留硬链接。但是在 rsync 完成后不会保留硬链接 - 我只是一个最小的例子,我在 btrfs 卷上 rsync 一个包含 2 个不同快照(已验证具有相同 Inode)的文件 - 只是到另一个目录 - 这也创建了 2 个不同的文件。我在这里错过了一个 rsync 选项来完成这项工作吗?还是 rsync 根本无法做到这一点?错误的工作工具?

4

1 回答 1

1

这些文件具有相同的 inode 编号,但 btrfs 将它们呈现在不同的(虚拟)文件系统中。检查“stat”输出,您应该看到设备不同。rsync 正确确定这些不是真正的硬链接。

如果你仔细想想,这是有道理的,因为如果你编辑一个文件,它的 inode 号不会改变(通常),但快照前后会显示不同的内容。

实现您想要的正确方法是从第一个快照内部执行正常的 rsync。然后从第二个快照执行另一个 rsync 到新的目标目录,但提供--link-dest=<first-dest-dir>选项。这将创建一个带有硬链接到旧快照的新快照,只要文件相同。

例如

rsync -aH /.snapshot1/ dest1/
rsync -aH --link-dest=dest1/ /.snapshot2/ dest2/
rsync -aH --link-dest=dest2/ /.snapshot3/ dest3/
rsync -aH --link-dest=dest3/ /.snapshot4/ dest4/
rsync -aH --link-dest=dest4/ /.snapshot5/ dest5/
rsync -aH --link-dest=dest5/ /.snapshot6/ dest6/

您可以将其视为执行cp --link dest1 dest2rsync 之前(只要您不使用,就会--inplace产生类似的效果)。

于 2018-09-19T15:21:08.663 回答