我有一个用作 NAS 的小型服务器,它运行着一些服务并存储了一些文件。
它配置为 RAID1,具有两个 SSD,使用 btrfs 格式化。
我使用apt-btrfs-snapshot
,每次执行 apt 操作时都会创建快照。这对于从错误的配置更改中恢复非常有用 - 但我还想将这些快照复制到某个外部备份目标,以便在服务器完全崩溃时使用它们进行恢复。
我的问题是:假设我有此机器根目录的最新 btrfs 快照。要恢复它,我可以全新安装 Ubuntu(使用相同的硬件),复制快照,然后告诉apt-btrfs-snapshot
“回滚”到该快照吗?实际上,我正在从不同但相似的系统逐字复制整个根文件系统。我原以为这应该没问题,只要我保持权限相同,那么所有已安装的应用程序和配置文件都应该将备份系统恢复到快照时的状态。我想我可能会在虚拟机中尝试一下,只是为了检查一下,但复制根文件系统来恢复整个机器是否存在问题?
答案1
好的,我在虚拟机中尝试了一下。以下是我所做的大致内容:
在 VirtualBox 中创建一个 Ubuntu 18.04 VM,具有 20 GB 磁盘。使用桌面 ISO 映像进行安装,并且(当然)使用 btrfs 进行配置,而不是接受默认设置。
启动新系统,安装
apt-btrfs-snapshot
。还安装了一些其他东西,我安装了 Docker,因为这是我想确保备份的东西之一。这个想法是备份系统需要与全新安装的系统明显不同,这样我们才能知道这是否真的有效。使用 制作参考快照
sudo apt-btrfs-snapshot snapshot
。从虚拟机中移除磁盘,然后按照与之前相同的过程创建新磁盘并在其上安装 Ubuntu 18.04。
在新的 VM 中,也安装
apt-btrfs-snapshot
,但不安装其他任何内容(因为我们无论如何都要恢复备份)。关闭虚拟机,然后将第一台虚拟机的磁盘连接到 SATA 插槽 1。重新启动虚拟机并确保新实例已启动,而不是备份磁盘(您可以检查您安装的东西是否在那里 - 它们不应该在新实例中)。
手动挂载新的和备份 btrfs 磁盘的根目录 - 我是通过输入来完成的,
/etc/fstab
但也可以只通过命令来完成mount
。在备份中找到要恢复的快照的名称,类似于
@apt-snapshot-2018-08-01_08:48:31
- 在 btrfs 文件系统的根目录中会有多个这样的快照。在新磁盘中创建同名的 btrfs 子卷,命令如下
sudo btrfs subvolume create /path/to/new/btrfs/@apt-snapshot-2018-08-01_08:48:31
将所有内容从备份复制到新的空子卷,例如
sudo cp -ar /path/to/old/@apt-snapshot-2018-08-01_08:48:31 /path/to/new/btrfs/
最后,检查是否可以看到新的子卷
sudo apt-btrfs-snapshot list
,然后(假设已列出)使用以下命令设置要在启动时使用的恢复映像:sudo apt-btrfs-snapshot set-default @apt-snapshot-2018-08-01_08:48:31
关闭虚拟机并移除备份磁盘。重新启动,然后检查恢复是否成功。就我而言,确实如此 - 特别是在备份在恢复的机器上工作之前我测试过的 Docker 映像。
因此,只要硬件相似,从根子卷快照恢复到全新安装似乎确实有效。