2026-05-20 Arch Btrfs 快照与启动配置修复记录.md

2026-05-20 Arch Btrfs 快照与启动配置修复记录

背景

维护前系统运行在 rollback 子卷上:/ -> @root-rollback-2026-05-14-204157/home -> @home-rollback-2026-05-14-204157。这会让当前正式系统状态、GRUB 快照菜单和后续回滚判断变得不清晰。

执行摘要

  • 创建执行前 root/home 重要快照。
  • 将当前 rollback 子卷正式化为标准 @ / @home
  • 更新 /etc/fstab、EFI stub、GRUB 配置,并重建 initramfs。
  • 启用 Btrfs qgroup,让 snapper 的空间感知清理生效。
  • 清理非重要快照,只保留 important 快照和必要回退入口。
  • 修复 Fcitx5/Rime 的 ascii_composer 配置,添加 nouveau blacklist。

当前关键状态


/     -> subvol=/@
/home -> subvol=/@home
内核参数 -> rootflags=subvol=@
EFI stub -> configfile /@/boot/grub/grub.cfg
systemctl --failed -> 0
systemctl --user --failed -> 0
Btrfs quota/qgroup -> enabled, consistent

子卷与回退点


当前正式子卷:
@      # root
@home  # home

旧标准子卷备份:
@-pre-formalize-2026-05-20-impl
@home-pre-formalize-2026-05-20-impl

额外保留的 rollback 回退点:
@root-rollback-2026-05-14-204157
@home-rollback-2026-05-14-204157

当前快照


root:
266  2026-05-14 20:41:57  manual checkpoint before experimenting after office setup  important=yes
391  2026-05-17 10:43:14  new checkpoint after pruning snapshots                    important=yes
465  2026-05-20 16:43:51  important checkpoint before snapshot cleanup 2026-05-20    important=yes
470  2026-05-20 16:54:40  pre-system-repair formalize rollback 2026-05-20           important=yes

home:
25   2026-05-14 20:41:57  manual checkpoint before experimenting after office setup  important=yes
60   2026-05-17 10:43:31  new checkpoint after pruning snapshots                    important=yes
104  2026-05-20 16:43:51  important checkpoint before snapshot cleanup 2026-05-20    important=yes
105  2026-05-20 16:54:40  pre-system-repair formalize rollback 2026-05-20           important=yes

Snapper 策略


root:
NUMBER_LIMIT=30
NUMBER_LIMIT_IMPORTANT=10
TIMELINE_LIMIT_HOURLY=8
TIMELINE_LIMIT_DAILY=7
TIMELINE_LIMIT_MONTHLY=3
TIMELINE_LIMIT_YEARLY=0
SPACE_LIMIT=0.5
FREE_LIMIT=0.2
QGROUP=1/2

home:
NUMBER_LIMIT=10
NUMBER_LIMIT_IMPORTANT=10
TIMELINE_LIMIT_HOURLY=4
TIMELINE_LIMIT_DAILY=3
TIMELINE_LIMIT_MONTHLY=1
TIMELINE_LIMIT_YEARLY=0
SPACE_LIMIT=0.5
FREE_LIMIT=0.2
QGROUP=1/3

引导配置


/etc/fstab:
/               -> subvol=/@
/home           -> subvol=/@home
/.snapshots     -> subvolid=260
/home/.snapshots -> subvolid=261

/efi/grub/grub.cfg:
search --no-floppy --fs-uuid --set=root c2e9f362-4044-41b8-ad66-1d7a3eddfa14
configfile /@/boot/grub/grub.cfg

已执行:
mkinitcpio -P
grub-mkconfig -o /boot/grub/grub.cfg

显卡与 initramfs


当前显卡:
Intel iGPU -> i915
NVIDIA RTX 4050 -> nvidia

/etc/modprobe.d/blacklist-nouveau.conf:
blacklist nouveau
options nouveau modeset=0

initramfs:
initramfs-linux-lts.img 约 216M
initramfs-linux-zen.img 约 218M

说明:mkinitcpio 的 kms hook 会收进 NVIDIA/nouveau 相关固件。当前实际使用 nvidia,nouveau 已 blacklist。未移除 kms hook,以避免影响早期图形初始化。

Fcitx5 / Rime 修复


# ~/.local/share/fcitx5/rime/default.custom.yaml
patch:
  ascii_composer:
    good_old_caps_lock: true
    switch_key:
      Caps_Lock: clear
      Shift_L: commit_code
      Shift_R: noop
      Control_L: noop
      Control_R: noop

随后重新部署 Rime 并重启 Fcitx5。重启后 fcitx5.service active,之前的 Missing ascii bindings 错误不再出现。

验证结果


findmnt /      -> /dev/nvme1n1p2[/@]
findmnt /home  -> /dev/nvme1n1p2[/@home]
systemctl --failed -> 0
systemctl --user --failed -> 0
btrfs quota status / -> enabled, full accounting, inconsistent=no

磁盘:
Device size:      476.85 GiB
Used:             102.90 GiB
Free estimated:   369.26 GiB

后续建议

暂时保留旧标准子卷备份和 rollback 子卷,确认使用几天无问题后再考虑删除。至少等数次正常重启、升级、快照恢复测试后再处理。