1. 核心概念:什么是子卷 (Subvolume)?

在传统的 EXT4 文件系统中,分区是物理硬盘上固定的“块”。而在 Btrfs 文件系统中,引入了 子卷 (Subvolume) 的概念。

  • 理解:子卷看起来像是一个普通的目录,但它可以像独立的分区一样被挂载。
  • 优势
    1. 动态空间:所有子卷共享底层分区的总空间,不需要像传统分区那样预先分配固定大小(比如给 /home 50G,给 / 100G,结果 / 满了 /home 还空着)。
    2. 快照 (Snapshot):可以对单个子卷进行秒级快照。这是 Arch 用户“滚挂了”能迅速回滚的关键(配合 Timeshift 工具)。

2. 常见的 Arch Linux 子卷规划

参考 Arch Linux 简明指南 等教程,通常采用以下命名规范(方便 Timeshift 识别):

子卷名称挂载点说明
@/根目录,存放系统核心文件。
@home/home用户目录。分开的意义:重装系统或回滚系统快照时,不会影响个人数据。
@log/var/log日志文件。回滚系统时,保留日志以便排查问题。
@cache/var/cache软件包缓存 (pacman)。回滚时不希望重新下载软件包。

3. 挂载操作流程 (Mounting Workflow)

  1. 挂载根分区(临时): 先将格式化为 Btrfs 的分区挂载到 /mnt,用于创建子卷。 mount /dev/sdXn /mnt

  2. 创建子卷

    btrfs subvolume create /mnt/@
    btrfs subvolume create /mnt/@home
  3. 卸载并重新挂载(正式) 创建完后,需卸载 /mnt,然后带参数挂载子卷到目标位置。

    • 核心参数subvol=@ (指定挂载哪个子卷), compress=zstd (开启透明压缩,提升读写速度和寿命)。
  4. 挂载顺序 (重要): 必须严格遵守“先父后子”的顺序

    1. 先挂载根目录:mount -o subvol=@ ... /dev/sdXn /mnt
    2. 创建挂载点:mkdir /mnt/home
    3. 再挂载子目录:mount -o subvol=@home ... /dev/sdXn /mnt/home

    (注:EFI 分区通常最后挂载到 /mnt/boot/mnt/efi)

4. 解决“EFI 分区已满”的策略

安装中遇到的 Win EFI 满的问题,通常有两种解法:

  1. 多 EFI 分区:Linux 实际上支持读取多个 EFI 分区。可以新建一个 512MB 的 FAT32 分区作为 /boot,专门存放 Arch 的内核和引导文件,而不去挤占 Windows 的 EFI 分区。
  2. XBOOTLDR:将 Windows 的 EFI 挂载为 /efi (仅放引导加载器),新建大分区挂载为 /boot (放内核)。

经验总结

  • fstab 的作用genfstab -U /mnt >> /mnt/etc/fstab 命令,就是把你刚才手动的“挂载顺序”和“挂载参数”写入配置文件,让系统开机时自动按这个配置挂载。
  • 检查命令cat /mnt/etc/fstab。如果发现系统进不去,通常就是这里的 subvol= 指向错了,或者 UUID 对不上。