OFFSET偏移
← 文章目录OFFSET / FIELD NOTESNO. 058

Btrfs 子卷布局与 Snapper 快照

为系统、用户数据和日志分别规划状态边界,再配置可恢复的快照流程。

所在专题Arch Linux ↗
约 6 分钟阅读开始阅读

子卷布局:平铺与独立状态#

平铺布局方便分别挂载和恢复;嵌套子卷也合法。关键是理解:Btrfs 快照不会递归包含其他子卷,目录路径上的嵌套不等于快照里的嵌套。

子卷 挂载点 用途
@ / 系统文件与 pacman 数据库,保持一起回滚
@home /home 用户数据,通常独立于系统回滚,也可另建快照配置
@snapshots /.snapshots 保存 Snapper 快照及元数据
@var_log /var/log 回滚后保留排障日志
@pacman_pkg /var/cache/pacman/pkg 把包缓存排除在系统快照之外

快照共享未变化的数据块,缓存不会因为每次快照必然复制一份。独立子卷的主要价值是控制保留与回滚范围。/var/lib/pacman 应与系统包文件保持一致,不能随意排除。

挂载参数与性能权衡#

可从简洁配置开始:

rw,noatime,compress=zstd:3
  • compress=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

参考与延伸

  1. ArchWiki:Btrfs ↗
  2. ArchWiki:Snapper ↗
  3. btrfs-scrub(8) ↗

根据技术笔记重新整理,示例使用通用名称。

沿专题继续阅读

Arch Linux

  1. 01Arch Linux 的哲学与安装规划
  2. 02内核管理、systemd-boot 与 UKI
  3. 03Pacman Hook、AUR 与构建安全
  4. 04Btrfs 子卷布局与 Snapper 快照
  5. 05LUKS2、Secure Boot 与 TPM2 加固
  6. 06性能选择与日常维护清单
  7. 07Pacman 常用命令与参数记忆
  8. 08Pacman 下载慢的诊断与镜像选择
  9. 09informant:Arch 新闻与 Pacman Hook
  10. 10Arch Linux 与 Btrfs:手动安装和 archinstall
  11. 11GNOME 桌面、输入法与快照配置
  12. 12GNOME 笔记本管理与桌面美化
  13. 13Arch Linux 的 KVM、GPU 直通与游戏
  14. 14Arch 桌面的交换空间、内核与排障
CONTINUE READING / 下一篇LUKS2、Secure Boot 与 TPM2 加固

把磁盘加密、引导验证与运行期访问控制组合起来,并为每层保留恢复入口。