Arch Linux+btrfs配置简明指南
本文最后更新于 472 天前,其中的信息可能已经有所发展或是发生改变。

btrfs作为一个现代文件系统,其具有很多优势,比如写时复制,快照,子卷功能,文件校验,文件压缩等等。

我本身是把Arch Linux装到EXT4分区上的,但是,btrfs的子卷把我吸引过去了。传统的分区一般会把rootfs,home目录等等存放在不同分区,导致磁盘的空间可能无法充分利用。

我实际上一直在担心一件事情,就是rootfs分区满了,但是home分区还有大量的可用空间,这就挺尴尬的。

BTRFS的子卷功能则可以保证rootfs和home分区共享同一分区的大小,还能做到之前把rootfs和home目录单独分区的效果。

所以,我跑到btrfs下面去了。

将Arch Linux安装到btrfs分区上

以下内容假定将Arch Linux安装到/dev/vda2中。

在分区的时候,除去EFI分区外,对于Arch Linux整个文件系统,可以只分一个区。

如果你想使用GRUB的“记住上一次选中的启动项”功能,则需要将/boot单独分一个区(大小600~1024MB左右均可),并格式化为除btrfs之外的其他文件系统(如ext4)。

在分区完成之后,首先先将目标分区格式化为btrfs文件系统,挂载,并创建子卷。

# 格式化为btrfs
mkfs.btrfs -L arch-btrfs /dev/vda2
# 注意这个compress,压缩算法可以换成你喜欢的
mount --mkdir /dev/vda2 -o compress=zstd /tmp/btrfs-full
# 创建子卷
btrfs subvol create /tmp/btrfs-full/@
btrfs subvol create /tmp/btrfs-full/@home
btrfs subvol create /tmp/btrfs-full/@swap
btrfs subvol create /tmp/btrfs-full/@var-tmp
btrfs subvol create /tmp/btrfs-full/@var-cache
# 为部分不需要写时复制的子卷设置相关属性
chattr +C /tmp/btrfs-full/@swap
chattr +C /tmp/btrfs-full/@var-cache
# 取消挂载
umount /tmp/btrfs-full

如何决定需要创建什么子卷?

  1. 首先,推荐将rootfs和/home文件夹分别存放在不同子卷(@@home)中。

  2. swapfile推荐放置于单独的子卷中(@swap),并且关闭写时复制。

  3. /var/tmp属于临时文件文件夹,推荐为其单独分一个子卷(@var-tmp)。不需要为/tmp创建子卷。

  4. 建议为/var/cache单独创建一个子卷(@var-cache),并且根据需求,可考虑为该子卷关闭写时复制。

  5. 部分快照软件可能会用到/.snapshots目录。如果你打算使用的快照软件使用到了这个目录,则需要为此目录创建子卷@snapshots

  6. 假定你现在要对rootfs子卷执行快照操作,一些你觉得不应该纳入rootfs快照的目录,比如Docker数据文件夹(/var/lib/docker@docker)和libvirt文件夹(/var/lib/libvirt@libvirt)等。

  7. 不要为整个/var目录单独分一个子卷。

在创建完子卷之后,挂载子卷。

# 挂载分区,注意这里的compress和上面选择的压缩算法一致
mount --mkdir /dev/sda2 -o compress=zstd,subvol=@ /mnt
mount --mkdir /dev/sda2 -o subvol=@home /mnt/home
mount --mkdir /dev/sda2 -o subvol=@swap /mnt/swap
mount --mkdir /dev/sda2 -o subvol=@var-tmp /mnt/var/tmp
mount --mkdir /dev/sda2 -o subvol=@var-cache /mnt/var/cache
# 如果你要创建一个swapfile,则使用下面的命令
btrfs fi mkswapfile /mnt/swap/swapfile --uuid clear --size 4G

之后,按照正常的安装流程安装Arch Linux即可。不过需要以下以下两点。

一定要记得安装btrfs-progs软件包。

在执行genfstab之后,推荐立刻修改/mnt/etc/fstab,将fstab中的btrfs挂载点的挂载选项稍作编辑,再执行arch-chroot进行后续配置操作。

推荐删除ssd,discard=async,space_cache=v2,subvolid=xxx等这些由系统自动决定的挂载选项,保留rw,relatime,compress=zstd:3,subvol=@xxx等以及其他你认为需要保留的挂载选项。

比如,编辑前:

before-edit-fstab

编辑后:

after-edit-fstab

btrfs的管理

btrfs fi usage /可以查看当前btrfs分区的使用情况。

btrfs-fi-usage

可以通过compsize来查看btrfs中文件/目录的实际空间使用情况。

pacman -S compsize
compsize / -x
compsize ~

compsize

btrfs的快照功能

由于btrfs的特性,因此为子卷创建快照是非常简单的。目前也有很多现成的软件,简化了btrfs快照管理的操作步骤,比如SnapperTimeshift等。

笔者此处使用的是Timeshift,该软件的配置方法比较简单,本文不再概述。

timeshift

需要提醒的是,btrfs的快照功能并非万金油,它防不了文件系统的物理损坏(如突然断电等情况)。在使用btrfs的快照功能时,依然建议定期备份数据。

评论

  1. sails
    已编辑
    3 周前
    2024-11-17 20:55:39

    请问子卷的名称用@开头是有什么特殊的理由吗?还是单纯方便记忆名字

    • 博主
      sails
      3 周前
      2024-11-17 22:20:40

      准确的说,是一种btrfs子卷命名规范

      • sails
        Azure Zeng
        3 周前
        2024-11-20 23:26:27

        感谢解答,搜了下好像叫什么Ubuntu-type subvolume layout

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇