[deepin exploration] Deepin 龙平台(3A6000)btrfs 文件系统尝试 (龙系列一)
Tofloor
poster avatar
lon
deepin
2026-03-17 01:44
Author
btrfs 是一个很先进又具有很大争议的文件系统,它的快照和压缩功能让人津津乐道,然而它的不稳定性又让人诟病

对于这个文件系统,我有8年的使用经验,因为个人级应用,不稳定性暂没有发现,快照功能是我用它的主要原因,这个功能太好用了,对于我这样的菜鸟,玩死系统很常见,有它就好办了,灵丹妙药呀
喜欢这个文件系统的人想必也有类似体会
玩龙吗,新硬件平台,玩死是常事,那咱就加一道防线,利用 btrfs 快照功能来做一个保障
本来没想写这个文的,但是我发现网上有很多教程有很大的错误,于是在此写下此文,表述下我对 btrfs 的理解

咱们以 Deepin 23.1 为例说一下怎样用这个文件系统,有人肯定说为什么不是 25 呢?因为用 btrfs, 23 有很多 25 没有的优点。此外,23 也可以升 25 吗,升过的都明白 ^_^

安装过程没什么特别的,/ 格式化成 btrfs 即可,像我一样习惯 home 单独分出的,home 也格式化 btrfs 就完事了。
系统装好后,想更新的更新一下,不想更新的,无所谓了,只需注意一点,操作这些前,电脑供电一定要稳 ^_^

一、建快照

lon@loongson:~$ sudo btrfs subvolume snapshot / /@
Create a snapshot of '/' in '//@'
lon@loongson:~$ sudo btrfs subvolume snapshot /home /home/@home
Create a snapshot of '/home' in '/home/@home'

home 没单独分区的这步可免

二、改两个文件

/etc/fstab
sudo nano /etc/fstab
subvolid=5,subvol=/ 处,subvolid=5 一定要去掉, subvol=/ *等号后面的* / 一定要换成 @
home 处也是同样

如图:

截图_选择区域_20260317005903.png

/etc/default/grub
sudo nano /etc/default/grub
在 GRUB_CMDLINE_LINUX="" 处加入 rootflags=subvol=@ 参数
变成为 GRUB_CMDLINE_LINUX="rootflags=subvol=@"

如图:

截图_选择区域_20260317010716.png

三、一个命令执行两次

以上两步都没有错的情况下,我们来执行一个命令
sudo update-grub
第一次执行完后,重启电脑,这步我称之为引子
重启过电脑后,我们再执行一次,这步我称之为固化
成功了吗?怎么验证?
方法一:打开文件管理器,或命令ls,看看根目录下,能否看到@(同样home下看看有没有@home),没有就说明成功了
方法二:sudo apt install timeshift ,安装上 timeshift ,看它使用 btrfs 有无报错,当然了,这步是必须的,用 btrfs 不就是为了快照吗

截图_timeshift-gtk_20260317011552.png

截图_timeshift-gtk_20260317011558.png

截图_timeshift-gtk_20260317011605.png

好,接下来就体验 btrfs 的玄妙吧

几个重点:

手动先建的快照名,必须是 @ (@home) 因为要配合 timeshift 使用

/etc/fstab 中的 subvolid=5 必须去掉

rootflags=subvol=@ 参数必须加在 GRUB_CMDLINE_LINUX=""

Reply Favorite View the author
All Replies
Tent
deepin
2026-03-17 11:01
#1

建议也改一下/boot/efi/EFI/deepin/grub.cfg,把里面的“/boot/grub.cfg”改成“/@/boot/grub.cfg“。

——这样操作后,根下面那些老的系统文件就都可以删除了。

另外分享一下我的fstab,以及一些说明:

1、/Tent下的home和root是两个子卷,可以用于做btrfs快照。

2、/Tent所在的分区的label设置为_dde_data,这样可以在文管中显示为“数据盘”。

3、/home使用bind挂载,是为了在文管双击打开“数据盘”时直达当前用户的家目录。

——如果也像/root那样写成子卷挂载,就实现不了这个效果。

——bind挂载的情况下,内核最终会自动处理为子卷挂载的方式。

4、子卷名称不使用@home而使用home,是为了文管能把“/home/xxxx”这个显示为“/home/主目录”。

5、/tmp默认可能已经是使用tmpfs了,我添加这个主要是想改成noatime。

6、单独挂载/Tent所在分区的根卷,是要把其他分区挂载到这里面的其他目录上。

UUID=5703-A7A0                            /boot/efi       vfat  rw,noatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 2
UUID=23524a0e-1a5c-415f-9f09-25bad7be8ef6 /               btrfs compress=zstd:3,rw,noatime,ssd,discard=async,space_cache=v2,subvol=/@ 0 0
UUID=a59492a1-cc3c-417e-9128-36b8fa2f4304 /Tent           btrfs compress=zstd:3,rw,noatime,ssd,discard=async,space_cache=v2,subvolid=5,subvol=/ 0 0
/Tent/home                                /home           none  defaults,noatime,bind 0 0
UUID=a59492a1-cc3c-417e-9128-36b8fa2f4304 /root           btrfs compress=zstd:3,rw,noatime,ssd,discard=async,space_cache=v2,subvol=/root 0 0
UUID=7c77d2ac-f32b-4c34-950f-46bd5edefc9f /VNote          btrfs compress=zstd:1,rw,noatime,ssd,discard=async,space_cache=v2,subvolid=5,subvol=/ 0 0
UUID=1AA857D1A857A9D1                     /Tent/SharePart ntfs3 rw,noatime,uid=1000,gid=1000,umask=022,iocharset=utf8,windows_names,nofail 0 0
UUID=2434e6dc-081b-47e1-8d41-80eb3797157e /Tent/ForCase   btrfs compress=zstd:8,rw,noatime,ssd,discard=async,space_cache=v2,subvolid=5,subvol=/ 0 0
tmpfs                                     /tmp            tmpfs defaults,noatime,nosuid,nodev,mode=1777 0 0
Reply View the author
蓝色的猫
deepin
2026-03-17 12:22
#2

建议在加上grub-btrfs,如果系统哪里出问题了,就可以直接在grub界面选择之前的快照了

Reply View the author
晚秋(lateautumn)
Moderator
2026-03-18 09:29
#3

学习了。

Reply View the author
lon
deepin
2026-03-18 10:00
#4
蓝色的猫

建议在加上grub-btrfs,如果系统哪里出问题了,就可以直接在grub界面选择之前的快照了

对,加上更好

Reply View the author