在 Btrfs 子卷上安装 Linux¶
准备¶
决定分区的布局¶
提前想好子卷的布局是个好主意。
主流的布局里有以下几种:
-
@home作为 /home,@作为 / -
@home作为 /home,@var作为 /var,@tmp作为 /tmp,@作为 / -
@home作为 /home,@opt作为 /opt,@作为 / -
@var作为 /var,@srv作为 /srv,@tmp作为 /tmp,@作为 / -
以上,但是增加
@snapshots用来存放快照 -
... ...
Linux 是自由的,任何布局只要有 / 的挂载点都行得通。但是一些软件期望标准化的布局,比如 Timeshift。如果打算使用 Timeshift 进行备份,只能选择第一种(@home,@)。 除此之外,可能还需要单独的 swap 分区和 EFI 分区(如果使用 UEFI)。
如果打算安装双系统
划分出一块未使用的空间可以节约很多时间。
Debian¶
由于 Debian 安装器不支持 Btrfs 子卷,需要在安装途中做点小手脚。 在 高级设置 Advanced options 里选择 专家安装 Expert install 。
分区¶
使用安装器的自动分区¶
警告
备份所有重要资料再继续。此部分的误操作可能导致数据损失。
像往常一样安装 Debian, 直到 磁盘分区 Partition disks , 选择 向导 - 使用最大的未分配空间 Guided - use the largest continuous free space 或 向导 - 使用整个磁盘 Guided - use entire disk ,再选择 所有文件在同一分区 All files in one partition 。
选中格式为 ext4,挂载点为 / 的分区,将文件系统改为 btrfs。
手动分区¶
警告
备份所有重要资料再继续。此部分的误操作可能导致数据损失。
像往常一样安装 Debian,直到 磁盘分区 Partition disks ,选择 手动 Manual 。
如果使用 BIOS:¶
我们需要一个 Btrfs 分区挂载至 / 和可选的 swap 分区。
sda (硬盘,可能是hdX,sdX,nvmeXnY...)
├─ ...
├─ / (btrfs)
├─ swap *可选
└─ ...
如果使用 UEFI:¶
我们需要一个 FAT 格式的 /boot/efi 分区充当 EFI 分区,一个 Btrfs 分区挂载至 / 和可选的 swap 分区。
sda (硬盘,可能是hdX,sdX,nvmeXnY...)
├─ ...
├─ /boot/efi (fat16/fat32)
├─ / (btrfs)
├─ swap *可选
└─ ...
完成分区后...¶
在菜单里选择 Execute a shell 启动终端以供我们执行命令。
我们需要记下目前已挂载卷的路径。
警告
对于不同的主机,分区的路径可能不同。应该替换 /dev/sda6 和 /dev/sda1 为实际路径。
~ # mount
...
/dev/sda6 on /target type btrfs ( ... subvol=/@rootfs)
/dev/sda1 on /target/boot/efi type vfat ( ... )
我们看到 /dev/sda6 是 Btrfs 分区,默认的子卷是 @rootfs,/dev/sda1 是 EFI 分区。
参数的不同写法
subvol=/@abcxyz 与 subvol=@abcxyz 在大部分情况下是等价的。
为了创建子卷,我们要卸载这两个卷并挂载 Btrfs 母卷到一个位置。
~ # umount /target/boot/efi
~ # umount /target
~ # mkdir -p /mnt/btrfs
~ # mount /dev/sda6 /mnt/btrfs
~ # mount
...
/dev/sda6 on /mnt/btrfs type btrfs ( ... subvol=/)
现在开始创建子卷,以仅单独 @home 布局为例。为了保持兼容性以使用 Timeshift 等工具,我们将默认的 @rootfs 子卷移动到 @ 。
有关在根目录上挂载的子卷的名字
Debian 默认使用 subvol=/@rootfs 作为根目录使用的子卷,而大多数主流发行版倾向使用 subvol=/@。如果使用 Ubuntu 等发行版并正按照本指南操作,不需要移动子卷。
cd /mnt/btrfs
/mnt/btrfs # ls
@rootfs
/mnt/btrfs # mv @rootfs @
/mnt/btrfs # ls
@
/mnt/btrfs # btrfs subvolume create @home
Create subvolume './@home'
/mnt/btrfs # ls
@ @home
子卷创建好后,我们将母卷卸载并把文件系统挂载回 /target 下 。如果有 EFI 分区,别忘了挂载它( /boot/efi )。
有关压缩
如果想设置压缩,应该现在设置。
在挂载的参数里加上 compress=zstd,像这样
mount /dev/... ... -o compress=zstd,subvol=/...
/mnt/btrfs # cd
~ # umount /mnt/btrfs
~ # mount /dev/sda6 /target -o subvol=/@
~ # mkdir -p /target/home
~ # mount /dev/sda6 /target -o subvol=/@home
~ # mount /dev/sda1 /target/boot/efi
~ # mount
...
/dev/sda6 on /target type btrfs ( ... subvol=/@)
/dev/sda6 on /target/home type btrfs ( ... subvol=/@home)
/dev/sda1 on /target/boot/efi type vfat ( ... )
由于我们更改了文件系统结构,我们需要更新 fstab。
~ # nano /target/etc/fstab
有关压缩
同理地,在参数里加上 compress=zstd,像这样
UUID=... /... btrfs ...,compress=zstd,subvol=... 0 0
如果不会使用nano...
Ctrl + \ 调出替换菜单,输入 @rootfs ,回车,替换为 @ ,回车。 把光标留在那一行,Ctrl + K 剪切一整行,再按 Ctrl + U 原封不动粘贴回去,每按一次 Ctrl + U 都能得到一整行复制的条例。 Ctrl + O 保存,Ctrl + X 退出。
编辑 <mount point> 挂载点, <options> 挂载参数。
...
UUID=... / btrfs ...,subvol=@ 0 0
UUID=... /home btrfs ...,subvol=@home 0 0
...
一切都设置好后,Ctrl + D 退出 shell,继续像往常一样安装 Debian。
如果一切顺利,我们已经重启进入新的系统了。不需要任何额外的配置,所有东西都应该正常工作。Debian其实就是安装器拉了,Linus说得对...
Fedora¶
Fedora 的安装器原生支持并且默认使用 Btrfs 子卷。
Arch Linux¶
分区¶
用喜欢的磁盘分区软件打开硬盘。
cfdisk /dev/sda
警告
备份所有重要资料。误操作可能导致数据损失。
如果使用BIOS:¶
sda (硬盘,可能是hdX,sdX,nvmeXnY...)
├─ ...
├─ swap *可选
├─ / (btrfs)
└─ ...
如果使用UEFI:¶
sda (硬盘,可能是hdX,sdX,nvmeXnY...)
├─ ...
├─ /boot/efi (fat32)
├─ swap *可选
├─ / (btrfs)
└─ ...
创建好分区后¶
格式化新建的分区。
警告
对于不同的主机,分区的路径可能不同。应该替换 /dev/sdaX 为实际路径。
# UEFI
mkfs.vfat -F 32 /dev/sda1 -n ESP
mkfs.btrfs /dev/sda3 -L Arch
mkswap /dev/sda2 -L swap
挂载 Btrfs 分区以添加子卷。
mount --mkdir /dev/sda3 /mnt/btrfs
cd /mnt/btrfs
# Example 这是一个例子,应该选择你觉得合适的
btrfs subvolume create @
btrfs subvolume create @var
btrfs subvolume create @tmp
btrfs subvolume create @home
btrfs subvolume create @snapshots
cd /
umount /mnt/btrfs
挂载 Linux 文件系统。
有关压缩
如果想设置压缩,应该现在设置。
在挂载的参数里加上 compress=zstd,像这样
mount --mkdir /dev/... ... -o compress=zstd,subvol=...
mount --mkdir /dev/sda3 /mnt/arch -o subvol=@
mount --mkdir /dev/sda3 /mnt/arch/var -o subvol=@var
mount --mkdir /dev/sda3 /mnt/arch/tmp -o subvol=@tmp
mount --mkdir /dev/sda3 /mnt/arch/home -o subvol=@home
mount --mkdir /dev/sda3 /mnt/arch/.snapshots -o subvol=@snapshots
# UEFI
mount --mkdir /dev/sda1 /mnt/arch/boot/efi
swapon /dev/sda2
安装 Arch Linux 基础软件包。
pacstrap -K /mnt/arch base
生成 fstab。 如果想设置基于快照的备份,我们大概会想删除 fstab 中 subvolid 这一挂载选项。
genfstab -U /mnt/arch >> /mnt/arch/etc/fstab
Chroot 到新的系统以进行进一步设置...
arch-chroot /mnt/arch /bin/bash
pacman -Syu linux linux-firmware dhcpcd grub ...
参见¶
ArchWiki - Btrfs - https://wiki.archlinux.org/title/Btrfs
ArchWiki - Installation guide - https://wiki.archlinux.org/title/Installation_guide