Linux btrfs 文件系统快照备份与恢复(恢复为挂载快照为根文件系统或进入 initramfs 环境)

在我前面的日记里,我介绍过如何使用逻辑卷管理(LVM)的快照功能进行系统的备份和恢复,这次分享一下使用 btrfs 文件系统的快照功能达到同样的效果。备份可以是默认的读写或只读模式,恢复这里分享了挂载可读写快照为 / 根目录的方式和进入(initramfs)环境进行恢复的方式。视频地址:https://www.bilibili.com/video/BV15P4y1V7Df?share_source=copy_web

1、在顶级子卷下创建二级子卷 @snapshots 并挂载在 /.snapshots 上用于容纳快照
sudo mount -o subvol=/ /dev/sda4 /mnt -v
sudo btrfs subvolume create /mnt/@snapshots
sudo mkdir /.snapshots
在 /etc/fstab 中增加类似挂载 @home 子卷的挂载项。
再 sudo mount -av 就挂载了@snapshots 子卷。

2、创建二级子卷@(挂载在/上)和二级子卷@home(挂载在 /home)的快照
sudo btrfs subvolume snapshot / /.snapshots/@_before_rm
sudo btrfs subvolume snapshot /home /.snapshots/@home_before_rm

3、删除系统重要文件
sudo rm /{bin,etc,lib*,root,sbin,usr,var} -frv
重启。

4、下面把 / 挂载到快照上或者直接进入(initramfs)环境进行恢复
1)、如果是挂载到快照上,则需要在grub 菜单中修改rootflags=subvol=@snapshots/@_before_rm
CTRL+x 启动。
进入系统,会发现任务栏快捷方式消失,应该是在系统运行过程中删除文件破坏了相关 /home 下的文件。
如果不修改 grub 菜单,则会直接进入(initramfs)环境进行恢复,后面的操作是相同的。在(initramfs)环境下操作不需要前面的 sudo 命令。
2)、重命名原二级子卷@和@home,并创建备份卷的快照的快照代替它们
sudo mount -t btrfs -o subvol=/ /dev/sda4 /mnt -v
cd /mnt
sudo mv @ .@ -v
sudo mv @home .@home -v
cd @snapshots
sudo btrfs subvolume snapshot @_before_rm ../@
sudo btrfs subvolume snapshot @home_before_rm ../@home
sudo btrfs subvolume set-default ../@
sudo reboot

5、重启进入系统删除废弃的子卷
sudo mount -o subvol=/ /dev/sda4 /mnt -v
cd /mnt
sudo btrfs subvolume delete .@ .@home
恢复完毕。

6、后记
btrfs 文件系统可以方便的进行快照备份与恢复。还有不少工具可以进行更精细、更方便的快照备份与恢复管理,如:btrbk、timeshift、snapper 等。

发表评论

电子邮件地址不会被公开。 必填项已用*标注