debian12安装的btrfs文件格式的系统的话其根子卷分区为@rootfs的,这不符合timeshift对根子卷为@的要求,所以我们可以手动修改子卷名称来达到我们的需求
其实timeshift是专门为Ubuntu设置的备份软件,因为Ubuntu的根子卷就是@。在debian上我们也有其他更好的btrfs的备份工具,使用snapper+btrfs-assistant可以更加自由和便捷地备份快照,不过如果在无法进入系统的话,timeshift支持在live直接回档,无需输入任何其他命令,比较便捷。
一、btrfs-assistant备份
先说一下比较简单的btrfs-assistant备份,btrfs-assistant其实是调用snapper来实现快照管理的,因此需要除了要安装btrfs-assistant还要安装snapper
1、安装btrfs-assistant
在源码下面有二进制安装包
也可以通过添加软件来安装
#通过添加软件源安装btrfs-assisant
echo 'deb http://download.opensuse.org/repositories/home:/iDesmI:/more/Debian_12/ /' | sudo tee /etc/apt/sources.list.d/home:iDesmI:more.list
curl -fsSL https://download.opensuse.org/repositories/home:iDesmI:more/Debian_12/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/home_iDesmI_more.gpg > /dev/null
sudo apt update
sudo apt install btrfs-assistant
#安装snapper
sudo apt install snapper
ShellScript2、设置快照
先在snapper Settings添加一个配置
把自动备份关闭,或者按需求开启,一般来说推荐手动备份,只留一份健康的备份,这就既能做到快照很小,并且又能回档,节省空间。如果要开启定期备份的话建议每周一次,留一次记录。
此时就可以打快照或者恢复快照了
恢复比较简单,这里不说叙述。
二、在live-CD恢复btrfs-assistant的备份
如果备份了快照,但是无法进入系统恢复快照显然是很糟糕的,这时候就可以通过使用live来恢复之前的快照
1、进入live-CD环境
选择你的live-CD镜像,不一定要debian的live-CD也是可以的,,这里我用mint的live-CD
2、挂载硬盘
先查看硬盘情况,确定哪一个分区是你安装debian12的分区
以下命令建议切换到root用户执行
#查看看分区
fdisk -l
ShellScript通过分区大小可以判断哪一个分区是debian系统
这里是/dev/vda3是我安装debian12的系统分区,并且/dev/vda1是我用来启动debian12的UEFI分区
挂载debian12的分区到/mnt下
mount /dev/vda3 /mnt
ShellScript进入/mnt,查看当前目录文件,发现有@rootfs文件夹
如果你已经用btrfs-assistant备份过,应该在debian12根目录会存在一个.snapshots文件夹,对应这里挂载后的/mnt/\@rootfs/.snapshots/配置名/snapshot/就是你打了快照的文件
注意,这里的路径@rootfs为什么要在@前面加个加个反斜杠\是因为@要转义才可以被使用
所以,知道了快照的目录,直接使用命令恢复快照就可以了
3、恢复快照
快照功能主要是这几条命令
#创建一个新的空子卷
sudo btrfs subvolume create 指向新子卷的路径
#删除一个子卷
sudo btrfs subvolume delete 指向子卷的路径
#创建现有子卷的读写快照
sudo btrfs subvolume snapshot 指向源子卷的路径 指向目标的路径
#显示有关子卷的详细信息
sudo btrfs subvolume show 指向子卷的路径
ShellScript现在我们先重命名原始的子卷,让后来的快照代替我们原来的位置
#重命名原来的系统
mv /mnt/\@rootfs /mnt/\@rootfs_bak
#将快照恢复到@rootfs的位置,注意是从@rootfs_bak找
btrfs subvolume snapshot /mnt/\@rootfs_bak/.snapshots/1/snapshot /mnt/\@rootfs
ShellScript这样就完成了快照的恢复,如果你的grub没有问题的话就可以直接进入系统了
4、无法进入系统/grub失效
如果你可以成功进入系统,第四节就可以跳过了,这是为那些修改分区或者无法启动grub的解决方案,如果不能正常进入系统就参考一下
接着上面最后一步将快照恢复到@rootfs的位置,现在还需要重新安装一下grub
#解挂载mnt
umount /mnt
#挂载子卷到/mnt
mount -o defaults,subvol=@rootfs /dev/vda3 /mnt
#挂载UEFI分区到/mnt/boot/efi
mount /dev/vda1 /mnt/boot/efi
#挂载必要文件系统
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
#进入chroot环境
chroot /mnt
#安装grub
grub-install /dev/vda1
#不行的话可以使用下面指定参数安装
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian --recheck
#更新grub配置
update-grub
ShellScript退出重启后就可以启动系统了
其实最稳妥的办法是打快照的时候单独复制一份grub,因为快照只会恢复根目录btrfs文件系统的文件,作为UEFI分区挂载在/boot/efi的文件是无法进行快照的恢复的
5、无法重新打快照
当你进入系统要进行新的备份的时候,你会发现之前的备份@rootfs_bak的子卷是可以删除的,但是提示无法添加新的备份,这是因为我们是通过子卷来替代原卷,并且子卷内是不存在.snapshotfs这个子卷的,只有原卷@rootfs_bak内存在,所以我们要手动创建一个新的.snapshots的子卷
#先删除/.snapshots
sudo rm -rf /.snapshots
#添加.snapshots子卷
sudo btrfs subvolume create /.snapshots
ShellScript这样就可以重新创建快照了
三、设置timeshift备份,改为根子卷@rootfs为@
此章节为非必须项,因为btrfs-assistant的功能已经可以几乎平替timeshift了
以下操作都是在live-CD中进行,建议先使用btrfs-assistant创建一个快照再进行
#切换到root用户
sudo su
#找到你安装debian12的分区
fdisk -l
#挂载debian12分区到/mnt
mount /dev/vda3 /mnt
#创建@home子卷
btrfs subvolume create /mnt/\@home
#将@rootf内的home文件全部复制到@home子卷内
cp -a /mnt/\@rootfs/home/* /mnt/\@home
#删除原来的home文件
rm -rf /mnt/\@rootfs/home/*
#修改根子卷名字
mv /mnt/\@rootfs /mnt/\@
#解挂载mnt
umount /mnt
#挂载根子卷到/mnt
mount -o defaults,subvol=@ /dev/vda3 /mnt
#挂载UEFI分区到/mnt/boot/efi
mount /dev/vda1 /mnt/boot/efi
#挂载必要文件系统
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
#进入chroot环境
chroot /mnt
#修改/etc/default/grub
vi /etc/default/grub
#对GRUB_CMDLINE_LINUX_DEFAULT追加rootflags=subvol=@
#变成GRUB_CMDLINE_LINUX_DEFAULT="quiet rootflags=subvol=@"
#保存退出
#修改/etc/fstab
vi /etc/fstab
#新添加一条挂载,推荐直接剪切dd输入两次p粘贴来修改
#第一条把子卷名@rootfs修改为@
#第二条把挂载点/修改为/home,子卷名改为@home
#完成后退出
#重新安装grub
grub-install /dev/vda1
#更新grub完成修改
update-grub
ShellScript重启即可正常进入系统
这时你会发现你的文件根目录有@和@home两个子卷,如果只想默认显示系统根目录,需要修改fstab,把最后一个序列号按照启动顺序修改就可以了