529 words
3 minutes
Btrfs-snap自动快照

为了防止我的赛博arch灵车开炸了,使用 btrfs+snap-pac+snapper+grub-btrfs 安装包前后、定期创建快照,并且在grub引导使用快照启动

# 我的文件系统
Btrfs 文件系统 (top level 5)
├── @ (ID 256) # 根目录 /
│ ├── var/lib/portables # 系统服务目录(与本文无关)
│ └─── var/lib/machines # 容器目录(与本文无关)
└── @home (ID 257) # /home 目录 子卷

snap组件#

组件服务类型功能
snap-pacpacman hooks在pacman操作前后创建快照
snappersystemd timer定期清理/创建时间线快照
grub-btrfssystemd service更新GRUB中的快照启动项

sudo pacman -S snapper snap-pac grub-btrfs

根分区、home分区创建配置:

sudo snapper -c root create-config /
sudo snapper -c home create-config /home

编辑配置文件:

sudo vim /etc/snapper/configs/root
sudo vim /etc/snapper/configs/home

主要编辑以下内容

TIMELINE_CREATE="yes" #启用时间线快照创建
TIMELINE_CLEANUP="yes" #启用时间线快照清理
TIMELINE_MIN_AGE="1800" #快照的最小保留时长,1800秒即不足30分钟的新快照不会被自动删除
TIMELINE_LIMIT_HOURLY="5" #每小时最多保留的时间线快照数量
TIMELINE_LIMIT_DAILY="7" #限制每天最多保留的时间线快照数
TIMELINE_LIMIT_WEEKLY="0" #同上
TIMELINE_LIMIT_MONTHLY="0" #同上
TIMELINE_LIMIT_YEARLY="0" #同上

启动服务#

# 启用snapper的自动清理服务(不是snap-pac.cleanup)
sudo systemctl enable snapper-cleanup.timer
sudo systemctl start snapper-cleanup.timer
# 启用时间线快照服务
sudo systemctl enable snapper-timeline.timer
sudo systemctl start snapper-timeline.timer
# 启用启动时快照服务
sudo systemctl enable snapper-boot.timer
sudo systemctl start snapper-boot.timer

测试#

#测试快照创建
sudo snapper -c root list # 查看快照
sudo pacman -S --needed --noconfirm fastfetch
sudo snapper -c root list # 查看快照

查看快照前后差异sudo snapper -c root status 0..1

grub检查

# 更新 GRUB 菜单
sudo grub-mkconfig -o /boot/grub/grub.cfg
# 验证快照项
sudo grep -A 5 "submenu" /boot/grub/grub.cfg

注:snapper 默认创建只读快照不能直接引导启动,通过配置 grub-btrfs 钩子可以将其挂载为可读写可以正常启动。

sudo vim /etc/mkinitcpio.conf
# 在HOOKS中添加grub-btrfs-overlayfs
HOOKS=(plymouth base udev autodetect microcode modconf kms keyboard keymap consolefont block filesystems fsck grub-btrfs-overlayfs)

注:systemd 钩子与 grub-btrfs-overlayfs 钩子不兼容 详见 [SOLVED] btrfs snapshots are read-only despite using grub-btrfs grub-btrfs-overlayfs hook fails if the systemd hooks are used (instead of udev) · Issue #199 · Antynea/grub-btrfs

Btrfs-snap自动快照
https://kmk.moe/posts/linux/btrfs-snap/
Author
DakoWang
Published at
2025-06-18
License
CC BY 4.0