前言

不得不说,Debian对btrfs文件系统的支持相当的差。连隔壁Ubuntu都已经能做到在安装器手动分区创建Btrfs文件系统时时自动创建@@home子卷了,你敢信都到了5202年,Debian13的安装器里创建Btrfs还是只有一个默认的@rootfs吗???这也就导致了timeshift等快照工具无法区分系统文件和用户数据,最重要的快照功能无法得到充分发挥

  • 快照与克隆

    • Btrfs 能够对文件系统的子卷完成快照操作,并在需要时轻松将文件系统回滚到快照所在状态,或直接对快照进行读写操作。

    • 借助 CoW 技术,btrfs 的快照仅需要最长几秒时间即可完成,同时由于快照存储的是增量变化以及共享存储 block 的特性,因此快照所占的空间也近乎可以忽略不计。

    • 相比于不具有该特性的文件系统下只能全量备份的方案在空间和时间的代价上都大大减小。

    • 可读写快照甚至可以直接引导启动,当作一个系统某一状态的LiveCD使用。

btrfscannotuse.png

如果你不想在安装完系统后因为根子卷不是@用不了timeshift也不想折腾迁移子卷,我们就需要在安装系统时对系统配置正确的Btrfs子卷

安装步骤:手动创建子卷

进入专家安装模式

在正常的Graphic Install中,我们是看不到子卷的配置选项的,且分区完成后安装器会自动执行下一步安装系统的步骤,所以我们需要在初次进入安装器时选择Advance options,然后选择Graphic expert install,这样,安装器在执行完每一项操作后会等待我们进行下一步,我们也就能在分区完成后手动配置Btrfs子卷

chooseadvaceoption.avif

chooseexpertinstall.avif

操作步骤

接下来,像正常初始化一样完成这几个步骤

  • 启动安装程序并完成基本设置如语言、时区、键盘

  • 进入‌分区向导‌步骤时选择 btrfs 文件系统,并且分好 efi、根目录、交换空间(可选)等分区

btrfsparation.jpg

  • 在进行到安装基本系统时停止操作

installbasicsys.jpg

按下 Ctrl + Alt + F1~F9 进入其他tty界面,一般来说tty2是可用的,如果不行就一个一个试,直到出现下图这个界面

tty.jpg

根据提示按下回车激活这个可用的tty界面

先查看安装器已经挂载的分区

df -h

你可能会看到类似的输出

df.jpg

应该会有一个 /target/target/boot/efi 已挂载,这两个目录是 Debian 安装时的默认目录,记录下这两个目录对应的/dev设备路径

接下来,取消这两个分区的挂载(注意顺序,否则会报错error unmounting filesystem: target is busy

umount /target/boot/efi/
umount /target/

完成后,将原来的/target目录对应的设备挂载到/mnt

mount /dev/sdb7 /mnt

进入/mnt后会发现有一个默认创建的子卷@rootfs

~ # cd /mnt 
/mnt # ls
@rootfs

这是选择 btrfs 文件系统时自动创建的单子卷布局,而我们需要扁平化布局,即所有子卷(subvolume)均是 ID5 的顶级子卷的子卷(children),再分别挂载在相应的目录下,当然,你也可以为/log和/root等单独创建子卷

子卷

挂载点

挂载选项

@

/

compress=zstd:1

@home

/home

compress=zstd:1

@xxx

/xxx

……

首先重命名@rootfs

mv @rootfs @

然后创建其他子卷

btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@xxx

创建后检查子卷

btrfs subvol list -p /mnt

创建完成之后就需要重新将分区挂载到 /target 目录

# 挂载/target子卷,zstd压缩选项可选
mount -t btrfs -o subvol=/@,compress=zstd:1 /dev/sdb7 /target 

#创建/target/home并挂载
mkdir /target/home
mount -t btrfs -o subvol=/@home,compress=zstd:1 /dev/sdb7 /target/home

# 挂载 efi 分区
mount /dev/sdb6 /target/boot/efi

# 查看挂载状态
df -h

完成后,我们还需要编辑/etc/fstab文件以确保系统可以正确识别btrfs子卷

nano /target/etc/fstab

你应该能找到下面这行

UUID=1ccae01f-b72c-4a2f-a445-9d37a17ba090 / btrfs defaults,subuol=@rootfs 0 0

将它修改为你实际的子卷,并挂载你新创建的其他子卷,像图中这样

fstab.jpg

保存退出后,退出当前tty

exit

接下来,尝试按下Ctrl+Alt+F1~F9尝试返回图形安装界面,继续之后的安装。

安装完成后,你就可以愉快的sudo apt install timeshift然后正常使用timeshift快照啦!