1. 核心概念:什么是子卷 (Subvolume)?
在传统的 EXT4 文件系统中,分区是物理硬盘上固定的“块”。而在 Btrfs 文件系统中,引入了 子卷 (Subvolume) 的概念。
- 理解:子卷看起来像是一个普通的目录,但它可以像独立的分区一样被挂载。
- 优势:
- 动态空间:所有子卷共享底层分区的总空间,不需要像传统分区那样预先分配固定大小(比如给
/home50G,给/100G,结果/满了/home还空着)。 - 快照 (Snapshot):可以对单个子卷进行秒级快照。这是 Arch 用户“滚挂了”能迅速回滚的关键(配合 Timeshift 工具)。
- 动态空间:所有子卷共享底层分区的总空间,不需要像传统分区那样预先分配固定大小(比如给
2. 常见的 Arch Linux 子卷规划
参考 Arch Linux 简明指南 等教程,通常采用以下命名规范(方便 Timeshift 识别):
| 子卷名称 | 挂载点 | 说明 |
|---|---|---|
@ | / | 根目录,存放系统核心文件。 |
@home | /home | 用户目录。分开的意义:重装系统或回滚系统快照时,不会影响个人数据。 |
@log | /var/log | 日志文件。回滚系统时,保留日志以便排查问题。 |
@cache | /var/cache | 软件包缓存 (pacman)。回滚时不希望重新下载软件包。 |
3. 挂载操作流程 (Mounting Workflow)
-
挂载根分区(临时): 先将格式化为 Btrfs 的分区挂载到
/mnt,用于创建子卷。mount /dev/sdXn /mnt -
创建子卷:
btrfs subvolume create /mnt/@ btrfs subvolume create /mnt/@home -
卸载并重新挂载(正式) 创建完后,需卸载
/mnt,然后带参数挂载子卷到目标位置。- 核心参数:
subvol=@(指定挂载哪个子卷),compress=zstd(开启透明压缩,提升读写速度和寿命)。
- 核心参数:
-
挂载顺序 (重要): 必须严格遵守“先父后子”的顺序
- 先挂载根目录:
mount -o subvol=@ ... /dev/sdXn /mnt - 创建挂载点:
mkdir /mnt/home - 再挂载子目录:
mount -o subvol=@home ... /dev/sdXn /mnt/home
(注:EFI 分区通常最后挂载到
/mnt/boot或/mnt/efi) - 先挂载根目录:
4. 解决“EFI 分区已满”的策略
安装中遇到的 Win EFI 满的问题,通常有两种解法:
- 多 EFI 分区:Linux 实际上支持读取多个 EFI 分区。可以新建一个 512MB 的 FAT32 分区作为
/boot,专门存放 Arch 的内核和引导文件,而不去挤占 Windows 的 EFI 分区。 - XBOOTLDR:将 Windows 的 EFI 挂载为
/efi(仅放引导加载器),新建大分区挂载为/boot(放内核)。
经验总结
- fstab 的作用:
genfstab -U /mnt >> /mnt/etc/fstab命令,就是把你刚才手动的“挂载顺序”和“挂载参数”写入配置文件,让系统开机时自动按这个配置挂载。- 检查命令:
cat /mnt/etc/fstab。如果发现系统进不去,通常就是这里的subvol=指向错了,或者 UUID 对不上。