【问题标题】:Btrfs and rsyncBtrfs 和 rsync
【发布时间】:2018-09-08 20:37:57
【问题描述】:

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

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

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

【问题讨论】:

    标签: rsync snapshot btrfs


    【解决方案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/
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多