惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
GbyAI
GbyAI
Google DeepMind News
Google DeepMind News
Jina AI
Jina AI
B
Blog
aimingoo的专栏
aimingoo的专栏
酷 壳 – CoolShell
酷 壳 – CoolShell
T
The Blog of Author Tim Ferriss
Last Week in AI
Last Week in AI
月光博客
月光博客
H
Help Net Security
V
Visual Studio Blog
量子位
A
About on SuperTechFans
博客园 - Franky
人人都是产品经理
人人都是产品经理
N
Netflix TechBlog - Medium
云风的 BLOG
云风的 BLOG
雷峰网
雷峰网
Martin Fowler
Martin Fowler
Microsoft Security Blog
Microsoft Security Blog
博客园 - 叶小钗
P
Proofpoint News Feed
MongoDB | Blog
MongoDB | Blog

qlAD 的技术笔记

2026 年 6 月 7 日 -- 我有社交恐惧症,恐惧外面到处雷电风雨声(大学生活记录) 手把手带你实现哈希表(C/C++ 数据结构) 手把手带你实现图结构(C/C++ 数据结构) 手把手带你实现二叉树(C/C++ 数据结构) 手把手带你实现栈和队列(C/C++ 数据结构) 手把手带你实现单/双链表(C/C++ 数据结构) 手把手带你实现动态数组(C/C++ 数据结构) 2026 年 1 月 2 日 -- 我不怕冷,因为我内心炽热 【2025 年度总结】(大学生活记录) 2025 年 12 月 2 日 -- 省电模式:大一 100 天耗电日志(大学生活记录) 蓝桥杯备赛第一期 —— 枚举与模拟 2025 年 11 月 3 日 -- 用爱发电、大爱无私(大学生活记录) 使用循环嵌套输出规则图形找规律讲解(嵌套循环-图形输出) 2025 年 10 月 1 日 -- 二字开头第一年的生日记录及感悟随笔(大学生活记录) Python 初级 04 -- 目前为止 Python 中你们做题可能会遇到的问题以及七七八八 2025 年 9 月 24 日 -- 开学后的第一课及军训汇演(大学生活记录) Python 初级 03 -- 程序设计的三种结构之选择结构和循环结构 Python 初级 02 -- 基础的数据类型和输入输出 2025 年 9 月 17 日 -- 大连 2025 国际大体联足球世界杯(大学生活记录) Python 初级 01 -- 初识编程、理解计算机语言及程序运行方式 适合大一新生学习编程的前一课 -- 编程先导(编程的本质) 2025 年 9 月 12 日 -- 三天军训感受以及一些七七八八(大学生活记录) 2025 年 9 月 9 日 -- 体检、军训前的准备(大学生活记录) 适合大一新生的计算机基础知识 -- 个人认为足够版 2025 年 9 月 7 日 -- 既来之、则安之(大学生活记录) C++ 程序的内存布局 —— 代码区、全局/静态区、栈区和堆区 联想小新 pro 16 2025 开箱记录:跳过联网、office 激活、更换 win 11 专业版 R 语言中的数学函数 计算机软件著作权申请过程记录 从聚类到回归:用 Python 解析鸢尾花数据集的完整数据科学流程 条件概率、全概率与贝叶斯公式 —— 一篇文章带你死磕概率公式
如何在安装 Debian 时配置 Btrfs 子卷 | 详细分步指南
qlAD · 2025-04-29 · via qlAD 的技术笔记

cover

Btrfs vs ext4:现代文件系统的优势

Btrfs(B-Tree File System)相比传统 ext4 具备以下核心特性:

  • ‌写时复制 (CoW)‌:修改文件时保留原数据,避免意外覆盖
  • 子卷 (Subvolume)‌:可独立挂载的逻辑分区(类似"文件夹中的文件系统")
  • ‌透明压缩‌:节省存储空间(支持 zstd/lzo 算法)
  • ‌实时快照‌:秒级创建系统还原点(需配合子卷使用)

为什么必须使用子卷?

直接使用 Btrfs 根卷会导致:

  • 快照工具(如Timeshift)无法区分系统文件和用户数据
  • 系统更新/回滚时可能破坏重要配置
  • 无法实现精细化空间配额管理

总而言之,你用滚动发行版比如 Arch、Debian sid 等就建议你用 btrfs 文件系统,创造布局合理的子卷才能充分提高 Btrfs 各方面的使用效率

安装步骤:手动创建子卷流程

前置准备

  1. 下载最新 Debian ISO
  2. 制作启动U盘(推荐使用 Ventoy)

关键操作节点

如果你使用图形界面安装的过程中是看不到子卷的操作的,解决方法也很简单,直接 Ctrl + Alt + F1~7 换一个 tty 就行

具体步骤如下:

  1. 启动 Live 后选择高级中的专家模式(建议、方便操作)
  2. 启动安装程序并完成基本设置如语言、时区、键盘
  3. 进入‌分区向导‌步骤时选择 btrfs 文件系统,并且分好 efi、根目录、交互空间等分区
  4. 在进行到安装基本系统时停止操作

你的鼠标应该停在 install base system 选项上:

Debian 分区步骤

TTY 切换 与 手动分区(核心步骤)

按下 Ctrl + Alt + F2 进入 tty2 命令行界面(tty2 不行,你就 F3、F4 一个个试,直到进入一个可执行命令的 tty)

默认应该是按回车就自动登录

接着查看当前挂载的分区

默认会有一个 /target 和 /target/boot/efi 已挂载,这两个目录是 Debian 安装时的默认目录,后面会用到。

如果装过 Arch 都知道一般会手动把系统安装在 /mnt 里面,只不过 Debian 规定在 /target 里面

然后取消这两个目录的挂载

# 顺序不能反,不然会繁忙
umount /target/boot/efi/
umount /target/

最后可以再次查看挂载状态

完整截图如下:

取消挂载 Debian 已有目录

然后将你的 btrfs 分区挂载到随便的一个目录,比如说 /mnt

mount /dev/nvme0n1p3 /mnt

进入 /mnt 后查看这个目录下的文件会发现有一个 @rootfs

这是你在分区操作中选择 btrfs 文件系统时自动创建的单子卷布局,而我这里选择的是扁平化布局即 @ @home @xxx

以下是两种布局的差异

特性单子卷布局(@rootfs)扁平化布局(@/@home/@snapshots)
‌结构特点‌仅包含单个根子卷@rootfs,所有系统文件、用户数据均存储在该子卷内将根目录、用户目录、快照存储等拆分为独立子卷,形成平行结构
‌快照管理‌需对整个根卷快照,无法单独回滚/home等目录可针对@(系统)或@home(用户数据)单独创建/恢复快照,实现精准回滚
‌ 空间配额‌无法对子目录设置独立配额可对每个子卷分配独立存储空间(btrfs qgroup)
‌ 系统更新影响‌用户数据与系统文件混合存储,系统升级失败可能导致数据丢失用户数据(@home)与系统(@)隔离,降低操作风险

那既然都是卷,为什么不直接在 @rootfs 上创建子卷呢?

可以直接在 @rootfs 上创建子卷,但是会形成层级化布局,也称嵌套子卷

层级化布局的目录结构如下

@rootfs
├── home(子卷)
├── snapshots(子卷)
└── 其他系统文件

层级化布局的局限性:

  • ‌快照依赖关系‌:快照 @rootfs 时会包含其下所有嵌套子卷,无法单独管理
  • 挂载复杂度‌:需通过 subvolid 或 subvol=@rootfs/home 路径挂载,易出错
  • 工具兼容性‌:部分工具(如Timeshift)可能无法正确识别嵌套子卷结构

所以我这里优先选择扁平化布局,目录结构如下所示

.
├── @
├── @home
├── @snapshots
└── @其他系统文件

首先将 @rootfs 重命名为 @

然后按自己的需求创建平行子卷

btrfs subvolume create /mnt/@home # 我这里就只创建一个用户数据的卷
btrfs subvolume create /mnt/@xxxxx

创建完成后通过 list 参数查看子卷

btrfs subvolume list -p /mnt

完整截图如下:

创建平行子卷

子卷创建完成之后就可以重新将分区挂载到 /target 等目录

# 先创建子卷对应文件夹
mkdir /target/home
mkdir /target/xxxxx

# 挂载子卷(可选择 zstd 压缩等特性)
mount -t btrfs -o subvol=/@,compress=zstd /dev/nvme0n1p3 /target
mount -t btrfs -o subvol=/@home,compress=zstd /dev/nvme0n1p3 /target/home

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

# 查看挂载状态
df -h

完整截图如下:

重新挂载分区

为了安装后的系统能正确启动和识别 btrfs 子卷,必须要修改 fstab 文件

注意点就是把 @rootfs 改成 @,新加你创建的子卷行,当然你也可以加 zstd 等特性

修改 fstab 文件

最后推出当前 tty

接着按 Ctrl + Alt + F1 进入 tty1 图形界面(tty1 不行,你就 F3、F4 一个个试)

返回图形界面继续安装完成安装

系统安装后的优化配置

配置 Timeshift 自动快照

安装必要组件:

sudo apt install timeshift
sudo apt install cronie
sudo systemctl enable --now cronie.service
  1. 快照类型选择 BTRFS,点击下一步:

配置快照类型

  1. 快照位置选择 BTRFS 分区,点击下一步:

配置快照位置

Timeshift 只支持扁平化布局,如果你是单子卷或嵌套子卷则不能使用

  1. 选择快照计划

Debian sid 建议每天、每周、每月

选择快照计划

  1. 选择是否包含用户数据

选择快照计划

然后现在手动创建一个快照,会发现瞬间完成,这就是写时复制(Copy-on-Write,CoW) 机制

可以通过以下命令查看快照存放的位置

快照的位置

Timeshift 默认备份的快照位置是在同一个 btrfs 分区,默认是在 @snapshots 子卷中(如果你之前创建过)

因为我没有创建 @snapshots 子卷,所以备份的位置在 /run/timeshift/329018/backup

通过查看这个目录发现占用 29G,没错 29G 就是这么快

快照的大小

虽然这样可以快速恢复快照,但是还是有一个潜在的问题,快照的位置和你的 btrfs 分区的位置是同一个,如果你的根分区出现损坏,快照也就没了,timeshift 也就不能恢复了。

为了解决这个问题,你可以考虑将快照备份到另一块磁盘上。