备份 btrfs 根文件系统的最佳策略?

备份 btrfs 根文件系统的最佳策略?

我有一个带有@根子卷和@home子卷的 btrfs 根分区,并且在更新和时移计划快照期间执行自动快照,这两者都保存在同一驱动器上。这很棒,但我希望在驱动器发生故障时有额外的冗余。

在 Debian 上的最后一次设置中,我使用了 ext4 文件系统并将时移 rsync 备份放在外部驱动器上。

我怎样才能做类似的事情,即备份到外部驱动器,同时仍在根设备上拍摄快照?

除了系统设备(格式化为 btrfs 的 1TB SSD)之外,我还有一个 2TB HDD,目前格式化为两个 NTFS 分区,因为我也使用双引导 Windows。现在我愿意完全迁移到该驱动器上的 Linux 文件系统,但我不知道如何处理备份根驱动器。我考虑过在 HDD 上制作磁盘映像,dd 但如果我这样做,我会 (a) 如果我正确理解了工作原理,就会失去额外的 TB 存储空间,dd并且 (b) 现在不会如何从映像恢复。理想情况下,我希望在第二个驱动器上有一个 btrfs 分区,仅用于根设备的备份,第二个(例如 ext4 或 ntfs)分区仅用于溢出数据存储。

本质上我的问题是:如何方便备份我已经“快照”的根分区(并且还知道如何从中恢复)?

编辑:我的解决方案

我想出的解决方案使用btrbk,这是一个单一的 perl 脚本,用于管理快照并自动将它们发送到另一个驱动器。我在我的 github 帐户上记录了设置这里

btrbk使用单个配置文件运行来指定快照和备份位置以及保留策略。我使用 crontab 安排备份过程。对于初学者来说,设置它是一项艰巨的工作,但在学习过程中比简单地使用 snapper 或 timeshift 更有价值。

答案1

这是我针对这种需求提出的解决方案:https://github.com/ceremcem/smith-sync

我准备了自己的脚本来备份到目标:https://github.com/ceremcem/smith-sync-new-target

这是我正在使用的整体备份系统:https://github.com/ceremcem/erik-sync

这个过程相当复杂,需要深厚的知识。简而言之,这个脚本执行以下操作:

  • 推迟任何自动挂起操作,以免中断备份过程。
  • 将所有快照发送到目标。
  • 使用最新快照在目标内创建新的 rootfs。
  • 相应修改$target/rootfs/etc/fstab、.../etc/crypttab等必要文件。
  • 挂载启动分区,将最新的启动文件复制到其中。
  • 更新chroot环境中的 GRUB 引导加载程序。

现在我们的目标磁盘(备份磁盘)是我们当前系统的精确副本,无需使用dd命令。您可以根据需要在目标磁盘中创建任何其他分区,这不会中断此备份过程。

相关内容