🐧

Arch Linux を btrfs でインストール

に公開

ThinkPad T480 という古いノートPCに Arch Linux をインストールして遊んでみようと思います。
ファイルシステムは btrfs にしてみます。

公式のインストールガイドに従っていくので、ガイドから変えたところだけ書くことにします。日本語版に加えて英語版も参考にしながら進めていきます。
https://wiki.archlinux.jp/index.php/インストールガイド
https://wiki.archlinux.org/title/Installation_guide

インストールの準備

1.1 インストールメディアの入手 から 1.4 ライブ環境の起動 まではガイド通りに進めました。

1.5 コンソールのキーボードレイアウト

キーボードレイアウトはいいとして、フォントが小さくて辛いので大きくします。英語版のガイドで一番大きな ter-132b が例示されていますが流石に大き過ぎるので /usr/share/kbd/consolefonts/ から見繕って変更します。

# setfont ter-128n

1.7 インターネットへの接続

インターネット接続は有線か簡単そうだけど無線で。デバイス名を確認して SSID に接続します。

# iwctl device list
# iwctl station <device> connect <SSID>

https://wiki.archlinux.jp/index.php/Iwd#iwctl

1.9 パーティション

EFIシステムは英語版に倣って1G割り当て、残りをbtrfs用にします。

device size type
/dev/nvme0n1p1 1G EFI System
/dev/nvme0n1p2 残り全て Linux filesystem

1.10 パーティションのフォーマット

# mkfs.fat -F 32 /dev/nvme0n1p1
# mkfs.btrfs /dev/nvme0n1p2

1.11 ファイルシステムのマウント

ここが今回のポイントです。スナップショットを保存するためのサブボリュームも用意した構成にしました。

マウントポイント サブボリューム
/ @
/home @home
/var/cache @var_cache
/var/log @var_log
/.snapshots @snapshots

一旦ディスクをマウントしてサブボリュームを作成します。

# mount /dev/nvme0n1p2 /mnt
# cd mnt
# btrfs subvolume create @
# btrfs subvolume create @home
# btrfs subvolume create @var_cache
# btrfs subvolume create @var_log
# btrfs subvolume create @snapshots
# chattr +C @var_log

@var_log は CoW を無効にします。

アンマウントして作成したサブボリュームを使ってマウントし直します。

# mount -o noatine,compress=zstd,subvol=@  /dev/nvme0n1p2 /mnt
# mount --mkdir  /dev/nvme0n1p1 /mnt/boot
# mount --mkdir -o noatine,compress=zstd,subvol=@home  /dev/nvme0n1p2 /mnt/home
# mount --mkdir -o noatine,compress=zstd,subvol=@var_cache  /dev/nvme0n1p2 /mnt/var/cache
# mount --mkdir -o noatine,compress=zstd,subvol=@var_log  /dev/nvme0n1p2 /mnt/var/log
# mount --mkdir -o noatine,compress=zstd,subvol=@snapshots  /dev/nvme0n1p2 /mnt/.snapshots

EFIシステムは英語版に倣って /boot にしました。
https://wiki.archlinux.jp/index.php/Btrfs

3.8 ブートローダー

systemd-boot を使います。
EFIブートマネージャーのインストール

# bootctl install

注意されたけど動くのでいいでしょう。

Mount point '/boot' witch backs the random seed file is world accessible, which is a security hole!
Random seed file '/boot/loader/.#bootctrrandom-seedxxxxxxxxxxxxxxxx' is world accessible, which is a security hole!

ローダー設定

/boot/loader/loader.conf
default  arch.conf
timeout  4
console-mode max
editor   no

ローダー追加
archlinux を起動する設定ファイルを作成しますがディスクのUUIDを書くのは面倒なので、blkid でファイルに書き出してから編集します。

# blkid -s UUID -o value /dev/nvme0n1p2 > /boot/loader/entries/arch.conf
/boot/loader/entries/arch.conf
title   Arch Linux
linux   /vmlinuz-linux
initrd  /initramfs-linux.img
options root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rootflags=subvol=/@ rw

btrfs のサブボリューム /@/ にマウントしているので options に rootflags=subvol=/@ を追加しています。

https://wiki.archlinux.jp/index.php/Systemd-boot

終わりに

btrfs でスナップショットを取っておけば過去のスナップショットに戻すこともできると思うので、色々遊んでいこうと思います。

Discussion