所以我一直在寻找这个问题,但一定是我做了一些根本性的错误。我想做的是:
我已将 NAS 配置为对我的主文件夹进行快照,文件系统为 btrfs。它运行正常,并且正在使用硬链接。
我想复制整个快照目录以备份到 ext4 usb 磁盘上,并使用 rsync -aH 保留硬链接。但 rsync 完成后不会保留硬链接 - 我只能举一个最小示例,即我在 btrfs 卷上 rsync 一个包含 2 个不同快照(已验证具有相同的 Inode)的文件 - 仅复制到另一个目录 - 这也会创建 2 个不同的文件。我是否缺少一个 rsync 选项来使其工作?还是 rsync 根本无法做到这一点?工具不适合这项工作?
答案1
我不太清楚rsync
,但如果您所说的“快照”是指 Btrfs 快照(用 拍摄btrfs subvolume snapshot …
),那么两个快照中的相同文件就不会硬链接。
由于 Btrfs 的写时复制行为,它们可能在(物理)设备上共享空间;它们的 inode 编号相同,但逻辑上存在于不同的设备上。在这种情况下,每个 Btrfs 子卷都应被视为单独的文件系统。
如果可以,请使用 检查属于不同快照的文件stat
。您将看到它们报告不同的设备标识符。不同设备上相同的 inode 编号毫无意义。
因此,rsync
没有简单的线索可以知道这些文件“应该”被硬链接。它们是不是首先在你的“整个快照目录”中进行硬链接。
我相信btrfs send
和btrfs receive
是在另一台计算机上复制快照层次结构的工具(使用 Btrfs 文件系统)。但我从未使用过它们,因此无法指导您。学习man btrfs-send
和man btrfs-receive
。