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

推荐订阅源

S
Schneier on Security
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
T
Threat Research - Cisco Blogs
C
Cyber Attacks, Cyber Crime and Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
A
Arctic Wolf
Security Latest
Security Latest
Simon Willison's Weblog
Simon Willison's Weblog
I
Intezer
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Troy Hunt's Blog
Latest news
Latest news
Help Net Security
Help Net Security
S
Security Affairs
Webroot Blog
Webroot Blog
The Hacker News
The Hacker News
AI
AI
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Tor Project blog
Forbes - Security
Forbes - Security
Google DeepMind News
Google DeepMind News
AWS News Blog
AWS News Blog
Attack and Defense Labs
Attack and Defense Labs
P
Proofpoint News Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
H
Help Net Security
L
Lohrmann on Cybersecurity
S
SegmentFault 最新的问题
Google Online Security Blog
Google Online Security Blog
MongoDB | Blog
MongoDB | Blog
Cyberwarzone
Cyberwarzone
The Last Watchdog
The Last Watchdog
S
Securelist
N
News and Events Feed by Topic
S
Secure Thoughts
F
Fortinet All Blogs
博客园_首页
C
Cybersecurity and Infrastructure Security Agency CISA
量子位
M
MIT News - Artificial intelligence
F
Full Disclosure
T
The Blog of Author Tim Ferriss
T
Tailwind CSS Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Microsoft Security Blog
Microsoft Security Blog
I
InfoQ
P
Privacy International News Feed
L
LangChain Blog
Know Your Adversary
Know Your Adversary
C
CERT Recently Published Vulnerability Notes

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 解析鸢尾花数据集的完整数据科学流程 条件概率、全概率与贝叶斯公式 —— 一篇文章带你死磕概率公式 高中化学物质反应规则表 —— 方程式之间也有规律可循 集合元素性质、关系、子集公式、基本运算 —— 一篇文章带你全方面死磕集合 如何为你的项目选择合适的许可证 -- 全方位指南 解释 3:1 和 9:3:3:1 的详细来源 —— 建立减数分裂与孟德尔遗传学定律之间的联系 重新设置磁盘分区以及 Btrfs 子卷(subvolume)布局的无损方案 零基础实战:用 Docker 启动 dockermailserver 绕过 25 端口封锁搭建个人邮箱服务器 基于 GitHub Actions + OSS 的自托管 APT 仓库全面指南 一个合格的个人网站站长应该知道哪些事? CSS 基础入门教程 —— 选择器、样式声明 HTML 基础入门 —— 基本结构和语法 给博客添加一个文章数据统计的页面 Git 学习笔记(命令备忘表) Anki 牌组选项详细解释与设置 手动编译带有 KernelSU 的 OnePlus 6 内核 安卓类原生系统补全计划 —— PixelExperience(一加 OnePlus) 如何使用 use-sound 为 React 应用添加声音效果 标准化项目的 GitHub Flow 工作流 如何搭建设计自己的博客网站? 使用安知鱼主题同款的 Twikoo 评论组件 配置 GitHub Actions 实现自动化提交百度收录 第00期 | 环境搭建 & 递归 (一) | 基本数列递归 逐字符讲解 C 语言 HelloWorld 程序 2023 年回顾 🤟 Anki:记忆神器,助你高效学习 Gentoo 学习笔记 美化你的 PixelExperience OS Markdown 语法指南 搭建 OneDrive 目录索引 为什么用 65 表示大写字母 A
如何在安装 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 也就不能恢复了。

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