1. Ubuntu 24.04 LTS与btrfs子卷配置指南
刚给笔记本装上Ubuntu 24.04 LTS,这次尝试了btrfs文件系统配合子卷的方案。相比传统ext4,这种组合在系统快照、空间管理方面确实有不少优势,不过配置过程也踩了几个坑。下面就把我的完整配置流程和注意事项整理出来,特别适合需要频繁回滚系统的开发者和折腾党。
btrfs作为新一代写时复制文件系统,最实用的功能就是可以创建轻量级的子卷(subvolume)。每个子卷都能独立进行快照管理,而Ubuntu 24.04的安装器现在原生支持在btrfs上创建合理的子卷结构。不过默认配置可能不完全符合我们的需求,比如Timeshift这类备份工具对子卷路径有特定要求。
2. 准备工作与安装配置
2.1 安装介质准备
首先从官网下载Ubuntu 24.04 LTS镜像,建议用Ventoy制作启动U盘。安装时选择"自定义分区"进入高级分区界面。删除所有现有分区后,新建一个btrfs格式的根分区(建议至少50GB),挂载点为/。注意不要单独创建/home分区,后续我们会用子卷实现更灵活的配置。
重要提示:安装器默认会在btrfs分区下创建@和@home两个子卷。建议先保持这个结构,安装完成后再调整。
2.2 基础系统安装
安装过程中有几个关键点需要注意:
- 在分区界面点击"修改"按钮,确保文件系统类型选择btrfs
- 勾选"格式化分区"选项
- 不要勾选"加密主目录"(会与子卷冲突)
- 完成安装后先不要重启,保持Live环境
安装完成后,我们需要检查子卷结构。在终端执行:
sudo mount /dev/nvme0n1p2 /mnt # 假设根分区在nvme0n1p2 sudo btrfs subvolume list /mnt应该能看到类似这样的输出:
ID 256 gen 30 top level 5 path @ ID 257 gen 28 top level 5 path @home3. 子卷结构调整与优化
3.1 创建标准子卷结构
Ubuntu默认的子卷结构比较基础,我们可以扩展出更合理的布局。重启进入新系统后,打开终端执行:
sudo su cd / mv home home.old # 备份原home目录 btrfs subvolume create @var btrfs subvolume create @opt btrfs subvolume create @srv btrfs subvolume create @tmp btrfs subvolume create @snapshots chmod 1777 @tmp然后修改/etc/fstab文件,找到btrfs分区的挂载行,修改为:
UUID=your-uuid / btrfs defaults,subvol=@ 0 13.2 配置子卷挂载
创建/etc/fstab.d/btrfs文件,添加以下内容:
UUID=your-uuid /home btrfs defaults,subvol=@home 0 2 UUID=your-uuid /var btrfs defaults,subvol=@var 0 2 UUID=your-uuid /opt btrfs defaults,subvol=@opt 0 2 UUID=your-uuid /srv btrfs defaults,subvol=@srv 0 2 UUID=your-uuid /tmp btrfs defaults,subvol=@tmp 0 2 UUID=your-uuid /.snapshots btrfs defaults,subvol=@snapshots 0 2执行sudo systemctl daemon-reload && sudo mount -a应用更改。现在df -h应该显示所有目录都挂载到了对应的子卷。
4. 快照管理与系统恢复
4.1 配置Timeshift
安装Timeshift并首次运行时,选择btrfs模式。关键配置项:
- 快照位置:选择btrfs分区(通常是根分区)
- 子卷排除:建议排除@tmp和@snapshots
- 计划任务:建议保留每日和每周快照
常见问题:如果Timeshift报错"subvolume not present",通常是因为默认配置的子卷路径与系统实际结构不符。需要手动指定正确的子卷路径。
4.2 手动快照管理
除了Timeshift,我们也可以手动创建快照:
sudo btrfs subvolume snapshot -r / /.snapshots/$(date +%Y%m%d)要恢复系统到某个快照:
sudo mv /var /var.old sudo btrfs subvolume delete /var sudo btrfs subvolume snapshot /.snapshots/20240501/@var /var5. 高级配置与优化
5.1 压缩与去重
btrfs支持透明压缩,在/etc/fstab的挂载选项中添加compress=zstd:
UUID=your-uuid / btrfs defaults,subvol=@,compress=zstd 0 1对于SSD可以额外添加ssd,discard=async选项提升性能。
5.2 配额与空间管理
启用配额支持:
sudo btrfs quota enable / sudo btrfs qgroup create 1/0 /查看子卷使用情况:
sudo btrfs qgroup show -re /6. 常见问题排查
启动失败:如果系统无法启动,通常是因为子卷挂载问题。使用LiveCD挂载分区后检查/etc/fstab配置。
空间不足:btrfs的空间报告可能不直观,使用
sudo btrfs filesystem usage /查看真实使用情况。性能问题:对于旧机械硬盘,建议禁用copy-on-write特性:
sudo chattr +C /var/lib/docker # 对Docker目录特别有效Timeshift无法识别子卷:检查/etc/fstab.d/下的配置文件,确保子卷路径与Timeshift设置一致。
经过一周的实际使用,这个配置方案在系统稳定性和维护便利性上表现很好。特别是配合Timeshift的自动快照,再也不用担心系统更新出问题了。对于开发者来说,可以大胆尝试各种环境配置,随时都能回滚到稳定状态。