在鲸湾重建计划的前一篇文章中,我们在安装过程中成功为Debian娘配置了正确的@@home子卷。众所周知,Btrfs有着和虚拟机相似的快照能力,弄坏了就可以从快照回档,但由于手动创建和恢复比较麻烦,所以我们需要使用timeshift这类快照管理软件配合进行快照与回档。妈妈再也不用担心我玩Debian Sid把Debian娘滚挂了

fkwayland.webp

不过如果我们的情况十分严重,已经惨到了连系统都进不去该怎么办?就像Debian官方对sid的介绍一样

我应该在我的桌面机器上使用 sid 吗?

如果你觉得你可以处理损坏的 Debian 系统的话,当然可以。你知道在 libpam0g 破损、阻止所有用户登陆的情况下该怎么做吗?你知道在 grub 破损导致引导过程卡死的情况下该怎么做吗?这些事情都发生过。它们可能会再次发生。

不用担心,这篇文章会教你配置另一个项目grub-btrfs,这样你就能在每次启动时的grub菜单引导启动你的btrfs快照,快速恢复到系统崩溃前的状态,接下来,让我们开始吧!

配置timeshift

首先安装timeshift

sudo apt install timeshift

图形化配置timeshift

在安装完成后,你就在系统的应用程序菜单栏找到timeshift,点击并打开它

打开之后,你会看到这样的界面,选择Btrfs,点击下一步

opentimeshift.webp

之后,设置你的快照存储文章,一般来说这里不需要更改。如果这里timeshift提示你需要选择具有@根子卷的btrfs卷且无法下一步,请参阅我的鲸群重建计划的上一篇文章。

choosesnapshotstorage.webp

timeshift可能会问你是否在快照中包含@home子卷,我这里勾上了这个选项

之后设置你的定时快照任务,我这里选择了一天一次

setcrons.webp

所有完成后,你就来到了主界面,你可以点击菜单栏上的创建按钮来创建你的第一个快照

createfisrtsnapshot.webp

这样,timeshift的初始化就完成了o(≧v≦)o

使用命令行配置timeshift

大多数情况下,debian娘会被安排管理服务器,一般来说服务器没有图形化界面,那这样我们要怎么初始化timeshift呢?

不用担心,timeshift也提供了cli方法在终端中配置和使用它

你可以直接执行一次timeshift --create来创建一个快照,这样,timeshift会自动检测btrfs并创建配置文件

╭─[fridayssheep@allinone:/e/timeshift]—{^o^}—(14:58:01)—(14ms)
╰─$> sudo timeshift --create
First run mode (config file not found)
Selected default snapshot type: BTRFS
Using system disk as snapshot device for creating snapshots in BTRFS mode
Mounted '/dev/nvme0n1p2' (subvolid=0) at '/run/timeshift/236397/backup'
btrfs: Quotas are not enabled
Creating new backup...(BTRFS)
Saving to device: /dev/nvme0n1p2, mounted at path: /run/timeshift/236397/backup
Created directory: /run/timeshift/236397/backup/timeshift-btrfs/snapshots/2025-10-23_14-58-13
Created subvolume snapshot: /run/timeshift/236397/backup/timeshift-btrfs/snapshots/2025-10-23_14-58-13/@
Created control file: /run/timeshift/236397/backup/timeshift-btrfs/snapshots/2025-10-23_14-58-13/info.json
BTRFS Snapshot saved successfully (0s)
Tagged snapshot '2025-10-23_14-58-13': ondemand
------------------------------------------------------------------------------
Removed cron task: /etc/cron.d/timeshift-hourly

安装完成后,timeshift会在/etc/timeshift下生成一个叫做timeshift.json的文件

╭─[fridayssheep@allinone:/e/timeshift]—{^o^}—(14:47:08)—(51.308s)
╰─$> cd /etc/timeshift

之后,编辑这个文件

sudo vim timeshift.json
{
  "backup_device_uuid" : "df786aca-5ee2-4ca7-9107-a0d1cccc419c",
  "parent_device_uuid" : "",
  "do_first_run" : "false",
  "btrfs_mode" : "true",
  "include_btrfs_home_for_backup" : "true",
  "include_btrfs_home_for_restore" : "false",
  "stop_cron_emails" : "true",
  "schedule_monthly" : "false",
  "schedule_weekly" : "false",
  "schedule_daily" : "true",
  "schedule_hourly" : "false",
  "schedule_boot" : "false",
  "count_monthly" : "2",
  "count_weekly" : "4",
  "count_daily" : "1",
  "count_hourly" : "6",
  "count_boot" : "5",
  "date_format" : "%Y-%m-%d %H:%M:%S",
  "exclude" : [],
  "exclude-apps" : []
}

你可以修改配置文件中的内容来设置timeshift,比如修改include_btrfs_home_for_backup来配置快照是否包含@home子卷,设置schedule_xxx和修改count_xxx后对应的选项来实现定时快照,完成后保存并退出,你的配置将会在下一次创建快照时生效

你可以使用timeshift --check来检查是否到了定时创建快照的时间,如果到了这个时间timeshift会自动再创建一份快照

╭─[fridayssheep@allinone:~]—{^o^}—(15:30:32)—(5ms)
╰─$> sudo timeshift --check
[sudo] fridayssheep 的密码:
Using system disk as snapshot device for creating snapshots in BTRFS mode
Mounted '/dev/nvme0n1p2' (subvolid=0) at '/run/timeshift/243448/backup'
btrfs: Quotas are not enabled
Daily snapshots are enabled
Last daily snapshot is 17 hours old
------------------------------------------------------------------------------

配置grub-btrfs

首先安装gitmake

sudo apt install git make

由于Debian娘的源并没有包含grub-btrfs,所以我们需要从源码编译安装

git clone https://github.com/Antynea/grub-btrfs.git
cd grub-btrfs/
sudo make install

启用grub-btrfs服务

sudo systemctl start grub-btrfsd
sudo systemctl enable grub-btrfsd

完成后,执行sudo update-grub,每次更新grub的时候都会将存在的快照写入grub的菜单

sudo update-grub

重启后,就可以在grub里面看到snapshot选项

grubbtrfs.webp

从Btrfs快照恢复

启动timeshift,我们先拍摄一次快照,然后更换了桌面壁纸,在文档文件夹中添加了几只初音的图片o(*////▽////*)q。

timeshiftbefore.webp

接下来,选择之前创建的快照,点击上方的恢复

此时timeshift将自动拍摄恢复时的快照,系统将被挂起,所有文件不可被修改

createfisrtsnapshot-PDxX.webp

重启后,系统被恢复成了快照时的样子

afterrestore.webp

当然,你也可以使用timeshift命令来恢复快照

sudo timeshift --restore

timeshift会询问你要恢复哪个快照,按照屏幕中的提示选择即可

在grub中启动btrfs快照

需要注意的是,从btrfs启动的快照不会包含除了@以外的子卷,此时挂载的其他子卷并不是包含在快照中的子卷,而是实时的子卷