许多 Linux 发行版已经默认采用 BTRFS 作为安装文件系统,Fedora Linux 也不例外。2022/23 前后,有不少文章盛赞 BTRFS 回滚方便、稳定可靠,只是几乎都带着整段整段的命令行。如今 BTRFS 工具链已经成熟,GUI 方案也终于成熟可用:btrfs-assistant 会自动带上 snapper。本文面向刚接触 Fedora Linux 的用户,以及从 ext4 + Timeshift 迁移过来的用户,全程用 GUI 完成快照配置和 Live USB 恢复。涉及系统分区的操作需要管理员权限。
准备工作
确认文件系统是 BTRFS
先用 GNOME“磁盘”(disks)或 gparted 查看系统分区的文件系统。Fedora 新装机默认使用 BTRFS,如果系统已经安装了好几年、或者由别人安装,动手前务必先确认。
Fedora 指导委员会把 KDE 提升为与 GNOME Workstation 同等地位的官方版本,很多用户对此表示欢迎:2025。本文对这两个官方桌面版本都适用。
安装 btrfs-assistant
通过 GNOME Software、KDE Discover 或命令行 dnf 安装 btrfs-assistant 即可。软件包很小,连同 snapper 一共约 4MB。装好后启动,btrfs-assistant 会自动注册现有的子卷。
子卷
Fedora 默认安装会建立两个子卷区域,但平时在文件管理器里看不到它们,只能看到子卷内的内容;从 Live USB 启动后才会直接看到子卷本身。gparted 这类分区工具可能把分区显示为“完整”,但如果分区里没有建立对应的逻辑子卷覆盖层,文件系统并不能正常使用。GNOME Workstation 往往还会多出一个 /root/var/lib/machines 子卷,通常为空,作用只是在快照时排除临时文件,忽略即可。
想添加额外子卷,最好的时机是在安装阶段:Anaconda 安装器提供“存储编辑器”(Storage Editor)选项;早于 Fedora Linux 45 的版本还可以在界面右上角找到它。与其把现成分区交给安装器,不如先用 gparted 预留一段未分配空间。安装完成后再创建子卷只能使用命令行,只建议高级用户操作;blivet-gui 声称支持,而 btrfs-assistant 刻意不碰这块,本文也不展开。
先备份
子卷本身没有太多可设置的,CoW 机制从一开始就在工作,但它不能替代备份。BTRFS 的 send/receive 命令行备份概念较复杂;日常做标准分区备份,用 dd 或 GNOME“磁盘”即可,和 ext4 时代一样直接,效果足够。
用 dd 时务必反复确认 if= 和 of=,一旦写反,磁盘复制工具立刻变成磁盘销毁工具。 启动分区也要单独备份,BTRFS 不会复制它们。备份介质请选择可靠的类型:USB 硬盘比 SSD 更耐长期存放;SSD 长期不通电会丢失数据。
配置 Snapper 快照
论坛上常见的“Fedora BTRFS + Ubuntu 风格 @ 子卷 + Timeshift”组合现在已经失效(Linux Mint 之类除外)。要使用 GUI 恢复,必须在出问题之前配置好 Snapper;如果系统已经无法启动、之前又没有配置过快照,那就只能回到命令行。命令行教程见 https://fedoramagazine.org/?s=btrfs。
新建 root 和 home 配置
在 btrfs-assistant 的“Snapper 设置”标签页点“新建”,分别创建两个配置:一个给 root(/),一个给 home(/home)。
备份与目标路径必须在同一分区内。按 文档 的说法,子卷可以放在任何位置;BTRFS 使用隐藏子卷,所以 root 放 /、home 放 /home 是最自然的安排。配置文件之后可以在 /etc/snapper 找到。
勾选 timeline、cleanup 和 boot,保存。
设置保留数量
第一次保存只是生成配置文件,随后还要设置数字。Snapper 的默认值似乎只保留整整 10 年的快照、不保留每周快照——不知是否与 openSUSE 及其长期服务器支持策略有关。
日常使用必须改这些数字,root 与 home 要区别对待。我目前正在评估的组合是:root 采用上层界面示例中的数值,home 使用 15、10、5、3、1、50。说实话,我也在怀疑这些数字是否偏高。
数字表示时间线清理算法从最新快照开始往回保留多少个快照。设置完成后,再次保存,然后应用 systemd 更改。
快照不要囤积成瘾:一两个旧内核或固件更新前的快照就足以救急,没必要让数 GB 的快照占据数月空间;反过来,几个月前误删又未及时发现的小文件,也许正需要某份旧快照才能找回。系统被快照撑爆,很可能就是 Fedora 没有预装 snapper 的原因之一。
创建快照
快照创建通常全自动完成,耗时在微秒级;ext4 + Timeshift 动辄要几分钟,两者不在一个量级。做有风险的操作前手动拍一张也很值得。启用 boot 选项后,每次开机都会自动生成一份瞬时快照,系统更新引发的问题同样容易回退。
想了解底层原理,可以把它理解为在持续运行的元数据日志上打时间标签;回滚就是回到标签位置,另起新分支继续记录。
浏览、删除与维护
打开“Snapper”标签页下的“浏览/恢复”子页,找到目标快照后点“浏览”即可查看内容。浏览功能既可以恢复整个快照,也可以单独恢复个别文件;切换标签时留意目标下拉框会变化。
删除快照只需要几秒钟,即使是很旧的快照也很快,远胜 qcow2/Timeshift。维护页里真正值得定期执行的是 scrub——文档建议至少每月一次,大量回滚之后也应手动执行一次。balance 用于 RAID 均衡;defrag 只对机械硬盘有意义,SSD 自己带有优化机制,愿意的话一两年手动跑一次即可。
从 Live USB 启动
系统运行中有些操作无法执行,需要 Live 环境。用 Fedora Media Writer 或 GNOME“磁盘”把 Live ISO 写入 U 盘(GNOME“磁盘”的做法:右键 ISO → 打开方式 → 磁盘映像写入器)。ISO 从 https://fedoraproject.org 下载;也可以使用 https://manjaro.org/products/download/x86 的 Manjaro KDE ISO,它通常已经自带大部分所需工具。
重启进入 U 盘前,需要先在 UEFI/BIOS 中设置启动触发键(常见为 Delete),或者从系统设置请求一次 UEFI 重启。Fedora Live ISO 允许在 Live 环境中安装少量软件,后面的恢复步骤正要用到这一点。
恢复
如果系统仍能启动,直接加载 btrfs-assistant 并回滚到此前的好快照即可,之后按提示重启。这类小问题也不一定非要动快照:Fedora 内置了非常快速的软件包回退机制,GUI 程序是 dnfdragora,但命令行往往更快更直观。软件包降级只是临时生效,不需要事后手工恢复;下一批更新包含修复时,软件包和相关文件会自动重新升级。
系统已经无法启动时:
- 如果手上没有最近的完整备份,先把要修复的分区做成镜像;启动分区也要备份(BTRFS 不会复制它们)。
- 先打开文件管理器,挂载需要修复的分区,再安装或运行 btrfs-assistant;顺序反了,btrfs-assistant 会因为找不到分区而无法工作。
- 在 btrfs-assistant 中选择合适的快照并恢复。恢复操作会把对应子卷回退到快照时点的状态,请确认选择正确;完成后按提示重启。
恢复时要注意 root 与 home 的对应关系:home 里仍然保存着 root 侧程序使用的隐藏配置文件和系统文件,不要把恢复对象弄混。整个过程比 Timeshift 快得多。
虚拟机和交换文件
BTRFS 分区上运行两个并发的 CoW 系统会互相放大开销。按 QEMU 文档 的建议,虚拟机镜像放在 BTRFS 分区时应使用 nocow 选项。GNOME Boxes(Workstation 预装)不需要额外设置:它把虚拟机放在 home 目录下的 .local/share/gnome-boxes/images 隐藏目录中,镜像文件已经禁用 CoW,保持默认即可。可以用 lsattr 检查镜像文件上的 +C 标志。高级用户也可以把虚拟机放到独立的 ext4 分区上。
传统交换文件如果存在于待快照的子卷中,BTRFS 快照将无法工作。Fedora 默认使用 zram,压缩内存数据而不是换页到磁盘;内存不足时先调整 zram 分配比例,确实需要交换文件时,应把它放进单独的子卷。



