子卷布局:平铺与独立状态#
平铺布局方便分别挂载和恢复;嵌套子卷也合法。关键是理解:Btrfs 快照不会递归包含其他子卷,目录路径上的嵌套不等于快照里的嵌套。
| 子卷 | 挂载点 | 用途 |
|---|---|---|
@ |
/ |
系统文件与 pacman 数据库,保持一起回滚 |
@home |
/home |
用户数据,通常独立于系统回滚,也可另建快照配置 |
@snapshots |
/.snapshots |
保存 Snapper 快照及元数据 |
@var_log |
/var/log |
回滚后保留排障日志 |
@pacman_pkg |
/var/cache/pacman/pkg |
把包缓存排除在系统快照之外 |
快照共享未变化的数据块,缓存不会因为每次快照必然复制一份。独立子卷的主要价值是控制保留与回滚范围。/var/lib/pacman 应与系统包文件保持一致,不能随意排除。
挂载参数与性能权衡#
可从简洁配置开始:
rw,noatime,compress=zstd:3compress=zstd:3:压缩率与 CPU 开销的折中;负压缩等级支持需要核对内核及工具版本。ssd、space_cache=v2等可能已由现代内核自动采用,不必为了“优化”重复添加。discard=async:异步 TRIM;核对内核默认值、设备支持以及与定期fstrim的策略。commit=120:延长事务提交间隔,会增加突然断电时尚未持久化状态的窗口。它不是无代价的通用推荐,通常保留默认值更简单。
Snapper 配置#
安装及初次初始化
sudo pacman -S snapper snap-pac
sudo snapper -c root create-config /create-config 要求目标子卷存在,并会创建 .snapshots。下面的替换步骤仅适用于初次配置、没有快照数据、已规划独立 @snapshots 的情况;已有配置不得照抄删除。
# 先检查挂载、子卷与内容,确认这里是刚生成且空的 .snapshots
findmnt /.snapshots
sudo btrfs subvolume show /.snapshots
sudo btrfs subvolume list /
# 确认未挂载其他快照卷且没有需要保留的快照后,删除刚生成的子卷
sudo btrfs subvolume delete /.snapshots
sudo mkdir /.snapshots
# /dev/EXAMPLE_BTRFS_PARTITION 为含 @snapshots 的文件系统
sudo mount -o subvol=@snapshots /dev/EXAMPLE_BTRFS_PARTITION /.snapshots
sudo chmod 750 /.snapshots随后添加或验证 /etc/fstab 的相应挂载。若 /.snapshots 已存在且正在使用,先按实际布局迁移,不能用 rm -rf /.snapshots 处理。
保留策略
在 /etc/snapper/configs/root 中例如:
TIMELINE_LIMIT_HOURLY="5"
TIMELINE_LIMIT_DAILY="7"
TIMELINE_LIMIT_WEEKLY="0"
NUMBER_LIMIT="10"时间线快照、编号快照与清理规则是不同机制。检查对应 timer 是否启用,并定期检查空间;这些数值不等于对所有快照的硬性数量保证。
月度检查#
Scrub:检测校验错误
sudo btrfs scrub start -B /
sudo btrfs scrub status /Scrub 能验证带校验和的数据和元数据;只有存在有效冗余副本时才可能自动修复。单副本数据损坏通常仍需备份恢复。自动定时运行时,应核对发行版提供的 timer 模板与挂载点转义名称。
配额:qgroups 与 simple quotas
sudo btrfs quota enable --simple /这个示例需要内核与 btrfs-progs 支持 squotas,且现有 qgroups 状态必须先检查。squotas 按首次分配数据块的子卷计费,不等同于共享/独占空间统计,启用前已有数据的归属也有局限。不要把它视为 Snapper 空间感知功能的直接替代,更不能保证删除快照毫无性能影响。
故障恢复与快照启动#
systemd-boot 默认发现 UKI,并不会自动显示 Btrfs 快照。grub-btrfs 可生成 GRUB 快照菜单,但从快照启动、可写恢复和持久回滚是不同操作。
平铺 @ 布局通常需要从安装介质进入恢复环境,将选定只读快照恢复为新的可写 @,然后检查 fstab、引导配置并重建 initramfs。snapper rollback 改变默认子卷,而显式 subvol=@ 的挂载不一定跟随默认子卷,不能保证一条命令完成恢复。
恢复前确认目标快照和备份,保留旧 @ 以便退回。ESP 若独立挂载,不包含在根快照中,内核/UKI 与恢复系统版本也需要对齐。
存储结构#
graph LR
Disk[物理磁盘] --> Btrfs[Btrfs 文件系统]
Btrfs --> Root[@ 根子卷]
Btrfs --> Home[@home 用户数据]
Btrfs --> Snap[@snapshots 快照目录]
Root -- 创建快照 --> Snap参考与延伸
根据技术笔记重新整理,示例使用通用名称。
沿专题继续阅读
Arch Linux
- 01Arch Linux 的哲学与安装规划
- 02内核管理、systemd-boot 与 UKI
- 03Pacman Hook、AUR 与构建安全
- 04Btrfs 子卷布局与 Snapper 快照
- 05LUKS2、Secure Boot 与 TPM2 加固
- 06性能选择与日常维护清单
- 07Pacman 常用命令与参数记忆
- 08Pacman 下载慢的诊断与镜像选择
- 09informant:Arch 新闻与 Pacman Hook
- 10Arch Linux 与 Btrfs:手动安装和 archinstall
- 11GNOME 桌面、输入法与快照配置
- 12GNOME 笔记本管理与桌面美化
- 13Arch Linux 的 KVM、GPU 直通与游戏
- 14Arch 桌面的交换空间、内核与排障