Btrfs和rsync

时间:2018-09-08 20:37:58

标签: rsync snapshot btrfs

因此,我一直在上下搜索,但是必须做一些根本上错误的事情。我想做什么:

我已将NAS配置为制作主文件夹的快照,文件系统为btrfs。 那样就可以了,并且正在利用硬链接。

我想复制整个快照目录以在ext4 usb磁盘上备份,并使用rsync -aH保留硬链接。 但是,在rsync完成后,硬链接不会保留-下面是一个最小的示例,其中我将btrfs卷上的2个不同快照(已验证为具有相同的Inode)的文件rsync-仅同步到另一个目录-它还创建2个不同的文件。 我是否在这里缺少rsync选项以使其正常工作?还是rsync根本无法做到这一点?工作工具错误?

1 个答案:

答案 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,它就会产生类似的效果)。