因此,我一直在上下搜索,但是必须做一些根本上错误的事情。我想做什么:
我已将NAS配置为制作主文件夹的快照,文件系统为btrfs。 那样就可以了,并且正在利用硬链接。
我想复制整个快照目录以在ext4 usb磁盘上备份,并使用rsync -aH保留硬链接。 但是,在rsync完成后,硬链接不会保留-下面是一个最小的示例,其中我将btrfs卷上的2个不同快照(已验证为具有相同的Inode)的文件rsync-仅同步到另一个目录-它还创建2个不同的文件。 我是否在这里缺少rsync选项以使其正常工作?还是rsync根本无法做到这一点?工作工具错误?
答案 0 :(得分:0)
文件具有相同的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/
您可以将其视为在rsync之前执行cp --link dest1 dest2
(只要您不使用--inplace
,它就会产生类似的效果)。