将 BTRFS 分区复制到外部硬盘 BTRFS 分区(包括快照)

将 BTRFS 分区复制到外部硬盘 BTRFS 分区(包括快照)

我有一个关于备份 BTRFS 分区的问题。

假设我在 /dev/sda1 上有一个 BTRFS 分区,在 /dev/sdb1 上有一个带有 BTRFS 的外部硬盘。

我已经发现我可以通过发出以下命令进行初始备份:

btrfs replace start /dev/sda1 /dev/sdb1

之后我改变了两件事:

  • 我在 SDA1 上创建一个新的常规文件
  • 我在 SDA1 上创建一个新的 BTRFS 快照

现在我想让我的外部硬盘驱动器 SDB1(“备份”)与 SDA1 对齐。所以这两个文件都是 BTRFS 特定的东西(快照)。

我该怎么做呢?

所以我正在寻找 rsync 等效项,它也同步 BTFS 功能(快照):

rsync -avr --delete <mount point sda1> <mount point sdb1>

谢谢

答案1

替换命令不会备份 sda1,它会在文件系统中将 sda1 替换为 sdb1,但由于它是单设备文件系统,并且 btrfs 在替换时不会费心擦除 sda1 中的数据,因此它们最终会成为 sda1 的相同副本文件系统。但是,您不想这样做,因为两者都具有相同的 UUID,并且目前使用相同的 UUID 挂载两个 btrfs 文件系统并不安全,因为这可能会导致大量数据损坏(参见 btrfswiki 的陷阱页面)。如果您想使用 btrfs 的增量备份功能,您应该将备份驱动器 /dev/sdb1 格式化为新的 btrfs 文件系统。然后,您应该使用以下命令在文件系统上创建要备份的水子卷的只读快照

btrfs su sn -r @subvolume-name @subvolume-name-RO

在每个子卷上。然后你应该挂载空白的 btrfs 文件系统并运行

btrfs send /path/to/@subvolume-name-RO | btrfs rec /path/to/backup-directory/

这将是第一次发送,btrfs 这次必须传输所有数据。下次您想要将备份发送到该驱动器时,可以使用增量发送来仅发送自上次发送备份以来已更改的数据。它还将使用写入时复制,因此您也将节省大量空间。只要确保在两个文件系统上都保留最新的快照即可。完成后,您可以将发送的快照重命名为您想要的任何名称。

现在,如果您想发送另一张快照,只需重命名原始快照并使用类似的内容拍摄新快照

mv @subvolume-name-RO @subvolume-name-RO-old
btrfs su sn -r @subvolume-name @subvolume-name-RO

然后您可以使用 send 来发送最新的快照

btrfs send -p @subvolume-name-RO-old @subvolume-name-RO | btrfs rec /path/to/backup-directory/

如果上一个快照仍然存在于您的备份驱动器上,它将发送您的新快照,只需复制自上一个快照以来所做的任何更改即可。

相关内容