就我浅薄的使用经验来看,Btrfs 可以大大减轻 Linux 安装时分区的痛苦,此外切换 Linux 发行版更加容易!
什么是 Btrfs?
Btrfs 是一个新型的文件系统,由 Linux 社区主导开发,一般被认为是由 Oracle 实际控制的 ZFS 的替代品。
在我眼中, Btrfs 的特点是:
- 不稳定性(!):Btrfs 终究是一个新的文件系统,尚未得到广泛测试,在生产环境中使用需要格外小心。
- 易用性:一个小小的
btrfs
命令,可以管理 Btrfs 的方方面面。 - 先进性:Btrfs 对 SSD 硬盘有优化。
那么 Btrfs 如何使 Linux 生活更轻松呢?其他功能可能都不重要,重要的是 Btrfs 的子卷功能!Btrfs 的子卷是可以动态伸缩的,这意味着,如果你给 Btrfs 分配足够大的空间,那么在里面分多少个子卷,这些子卷原则上都可以任意享用这些空间,只要占用总空间不超过 Btrfs 的所有空间就行了。
Btrfs 的使用
创建 Btrfs
创建 Btrfs 和创建其他文件系统是一样的
mkfs.btrfs <block device>
基础的子卷管理
首先我们假设你已经创建好了一个 Btrfs 文件系统,其在 /dev/sdaX 块设备中。
mkdir /mnt/top
mkdir /mnt/myfs
mount /dev/sdaX /mnt/top # 把分区挂载到 /mnt/top 中
cd /mnt
btrfs subvol create myfs # 创建一个 myfs 子卷
touch myfs/success # 表现为一个目录,你可以对其进行任何操作
btrfs subvol list . # 列出所有子卷
mount -o subvol=myfs /dev/sdaX /mnt/myfs
# 把 myfs 子卷单独挂载到 /mnt/myfs
# 这时其他子卷被隐藏
umount /mnt/myfs
cd /mnt/top
btrfs subvol del myfs # 删除 myfs 子卷
umount /mnt/top
rmdir /mnt/myfs
rmdir /mnt/top
挂载选项中 subvol
和 subvolid
是非常重要的。
删除子卷时会删除掉子卷里面所有内容。有时候会遇到「目录非空」错误,可能因为子卷里面还有一个子卷,而删除子卷并不会递归地删掉嵌套子卷,可以使用btrfs subvol list
进行检查。
我个人非常不建议你使用 「默认子卷」设置,因为这会使得子卷管理变得麻烦。
安装 Linux 发行版
Btrfs 的一大优点就是安装 Linux 发行版变得非常简单。
安装 AOSC OS
AOSC OS 是安同开源社区(Anthon Open Source Community)推出的 Linux 发行版,自称「暴力简化的 Linux 发行版」。目前其官方的安装方法 也的确很「暴力」,就是把 tar
解包到文件系统里面!= =b
对,现在你知道怎么做了吗?创建一个子卷,然后把归档文件解包到里面去,接着就可以顺利 chroot
进去。
安装 Arch Linux
最好的文档是 Arch Wiki!
首先建立一个子卷,任意选用一个 bootstrap 脚本,比如 arch-bootstrap,把里面填满,就相当于得到了一个 Arch。
Home 分区
过去我一直很头疼 Home 分区问题。因为我一直不知道到底 / 和 /home 哪个我可能用得更多,也许以前我经常看电影,所以 /home 占用多,也许不久后我迷上了大型软件,于是 /opt 里面就塞满了各种奇奇怪怪的商业大型软件。
现在有了子卷,一切都不是问题!只要把 / 和 /home 分别放到两个子卷里面就行了。
引导与挂载
Btrfs 虽然号称挺新的,实际上也是开发了好几年,各种配套工具也挺丰富了。
首先就是大家最关心的引导问题。当然没有问题,GRUB2 早已支持 Btrfs 和子卷,grub-mkconfig
可以正确识别出子卷并在 grub.cfg 填上正确的 subvolid 和 subvol 参数,比如我这里:
linux /vmlinuz-linux root=UUID=3fc0a297-c5df-41d5-a82a-f7edc299747a rw rootflags=subvol=archfs quiet
其次就是挂载。/etc/fstab
中可以写上挂载参数,这当然也不是问题:
/dev/sda3 /home btrfs rw,relatime,ssd,space_cache,subvolid=258,subvol=/homefs,subvol=homefs 0 0