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

推荐订阅源

CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
L
Lohrmann on Cybersecurity
aimingoo的专栏
aimingoo的专栏
V
V2EX
S
Security Affairs
T
Threatpost
C
CXSECURITY Database RSS Feed - CXSecurity.com
IT之家
IT之家
J
Java Code Geeks
The Register - Security
The Register - Security
U
Unit 42
C
CERT Recently Published Vulnerability Notes
月光博客
月光博客
A
About on SuperTechFans
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
The Blog of Author Tim Ferriss
Cisco Talos Blog
Cisco Talos Blog
Project Zero
Project Zero
S
Schneier on Security
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
D
DataBreaches.Net
博客园 - 司徒正美
V
Vulnerabilities – Threatpost
T
Tor Project blog
Security Latest
Security Latest
T
The Exploit Database - CXSecurity.com
T
Threat Research - Cisco Blogs
Scott Helme
Scott Helme
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
M
MIT News - Artificial intelligence
云风的 BLOG
云风的 BLOG
小众软件
小众软件
L
LangChain Blog
Attack and Defense Labs
Attack and Defense Labs
Recent Commits to openclaw:main
Recent Commits to openclaw:main
P
Palo Alto Networks Blog
A
Arctic Wolf
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
C
Cyber Attacks, Cyber Crime and Cyber Security
博客园 - 叶小钗
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
LINUX DO - 最新话题
MongoDB | Blog
MongoDB | Blog
Webroot Blog
Webroot Blog
H
Hacker News: Front Page
Know Your Adversary
Know Your Adversary
Spread Privacy
Spread Privacy
AWS News Blog
AWS News Blog
Engineering at Meta
Engineering at Meta

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 的详细来源 —— 建立减数分裂与孟德尔遗传学定律之间的联系 零基础实战:用 Docker 启动 dockermailserver 绕过 25 端口封锁搭建个人邮箱服务器 基于 GitHub Actions + OSS 的自托管 APT 仓库全面指南 如何在安装 Debian 时配置 Btrfs 子卷 | 详细分步指南 一个合格的个人网站站长应该知道哪些事? 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
重新设置磁盘分区以及 Btrfs 子卷(subvolume)布局的无损方案
qlAD · 2025-05-01 · via qlAD 的技术笔记

cover

效果预览

之前的方案

通过之前写的文章:如何在安装 Debian 时配置 Btrfs 子卷 | 详细分步指南如何在安装 Debian 时配置 Btrfs 子卷 | 详细分步指南

对安装好的 Debian sid 做了如下分区方案

├─nvme0n1p1 259:1    487M  part /boot/efi
├─nvme0n1p2 259:1     16G  part SWAP
└─nvme0n1p3 259:2  226.4G  part /
                                /home

其中 nvme0n1p3 里有两个子卷,分别是 @ 和 @home 采用扁平式布局,而且介绍了 Timeshift 快照工具

但是使用后发现 Timeshift 不支持自定义快照存放的位置,而且 Swap 用分区的形式不方便管理,于是便有了这篇文章,记录我更改的过程

优化后的方案

保留 @ 和 @home 子卷,新增 @var @tmp @snapshots 子卷,使用 Zram 作为 SWAP。并且重新对分区进行编号,不能格式化磁盘

├─nvme0n1p1 259:1    0   487M  0 part /boot/efi
└─nvme0n1p2 259:2    0 232.4G  0 part /
                                      /home
                                      /var
                                      /tmp
                                      /.snapshots

之所以要将 /var 以子卷的形式存放,是为了后续使用 snapper 的方便

准备工具

只需要一个 Fedora KDE 版本的 liveCD 即可

其实哪个版本并不重要只要有 btrfs 工具就行,关键是 KDE 里面的分区工具很好用,避免可以敲错命令

方法步骤

1. 重启进入 LiveCD

之所以进 LiveCD 是为了方便对 / 进行操作,而且在 LiveCD 里面方便对子卷重新布局

2. 重新设计分区

在 KDE 的分区管理工具中,找到你的 SWAP 分区(nvme0n1p2)删掉就行,删掉之后会变成 Free Space

删除 Swap 分区

这是我随便截的一张图,必须按照你自己的分区表来删除

现在的分区表变成了一个 nvme0n1p1、一个 FreeSPace 和一个 nvme0n1p3,并且保证这三个是紧挨着的

然后选择之前的 nvme0n1p3 重新调整分区大小

重新调整分区大小

你可以拖动 1 和 2 的位置让 nvme0n1p3 占满所有空余空间,也可以直接填写 0MB 到前方空置和后方空置

这是我随便截的一张图,必须按照你自己的分区表来删除

这里的调整分区大小需要将分区 nvme0n1p3 里面所有的文件往前移动,所以需要一点时间

调整完成之后保存并写入,现在你的磁盘就只剩下了 nvme0n1p1 和 nvme0n1p3 这两个分区

然后通过 sfdisk 对分区重新排序,在 LiveCD 的终端执行如下命令(需要用 root 账户)

这里是选择的你的磁盘而不是分区,按照自己电脑进行调整

现在,你的分区已经变成了 nvme0n1p1 和 nvme0n1p2 ,分区重新设置的部分到此结束了

3. 重新设计 Btrfs 子卷布局

继续在刚才 LiveCD 的终端里面操作

将 Btrfs 分区挂载到任意目录下,比如说 /mnt

mount /dev/nvme0n1p2 /mnt

然后可以查看下 /mnt 下的现有子卷

btrfs subvolume list /mnt

如果你是按照我之前的文件进行设计的话,你应该会有一个 @ 和 @home

然后新增你需要的子卷

cd /mnt # 进入 /mnt 后再操作

btrfs su cr @var
btrfs su cr @tmp
btrfs su cr @snapshot

su 是 subvolume 的缩写、cr 是 create 的缩写

接下来要看好 @/ 和 @ 的位置关系,不要敲错了命令

将 @ 子卷中的 /var 和 /tmp 中的文件移动到 @var 和 @tmp 中

mv @/var @var
mv @/tmp @tmp

因为 @snapshot 子卷我们会挂载到 /.snapshot 上,所以需要创建这个目录

现在的子卷布局已经重新设计并且迁移了数据,不出意外的话,查看 /mnt 下的子卷应该出现如下内容

btrfs subvolume list /mnt

top level 5 path @
top level 5 path @home
top level 5 path @var
top level 5 path @tmp
top level 5 path @snapshots

子卷的重新布局到此结束

4. 修改 fstab

这里对 btrfs 子卷添加一些特性参数挂载

UUID=$(blkid -s UUID -o value /dev/nvme0n1p2)  # 获取 Btrfs 分区的 UUID

tee /mnt/@/etc/fstab <<EOF
UUID=${UUID}  /           btrfs  noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@snapshots  0  0
UUID=${UUID}  /home       btrfs  noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@snapshots  0  0
UUID=${UUID}  /var        btrfs  noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@snapshots  0  0
UUID=${UUID}  /tmp        btrfs  noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@snapshots  0  0
UUID=${UUID}  /.snapshots btrfs  noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@snapshots  0  0
EOF

最后查看你的 /mnt/@/etc/fstab 应该如下图所示

/etc/fstab

5. 重启进入正常的系统

修改完毕后卸载 /mnt 并且重新到 Debian 系统

重启之后你可以验证当前的分区表和子卷

6. 设置 Zram

安装 Zram 组件

sudo apt update && sudo apt upgrade
sudo apt install zram-tools

修改 Zram 配置文件

sudo vim /etc/default/zramswap

Zram 配置文件

主要就是改一下大小,我这里修改成内容的 60% 其他不变

然后重新加载服务

sudo service zramswap reload

可以通过 zramctl 验证你的修改

Zram 交换

接下来...

接下来就可以使用 snapper 这个更强大的快照工具了

具体可以去看 Arch Wiki https://wiki.archlinux.org/title/Snapper