🍣

Arch Linux Install w/Btrfs & Snapper

2025/02/28に公開

まえがき

本記事は初心者向けに作ってあります。経験深い方々には既知の情報かと思われますが、もし読んでいただけるのならば、ご自身のLinuxインストール関連の体験談などコメントに書いていただければありがたいです。

概要

本記事は筆者がArch Linux をインストールし、環境構築する際に躓いたりし、複数のサイトを参考にインストールした経験に基づいて作られた簡単なガイドです。

Arch Linux を使おうと思った話

Linuxには様々なDistributionがあり、それぞれ特徴があります。代表的なものを上げるとUbuntuやLinux Mint, Fedora, openSUSE, Debian, MX Linux, Kali Linux, Pop!_OS などでしょうか。筆者は以前 Linux Mint, Ubuntu, openSUSE, (ほんの少しですが)Fedoraを使った経験があります。それぞれ素晴らしい経験を供給してくれるものでしたが、正直な話、GNOMEにしろKDE Plasmaにしろ、あまりしっくりくるデスクトップ環境がありませんでした。Cinnamonは割と好きでしたが、6.4になったばかりでバグが増えたりリソース消費が増えたりしてしまい、大型DEとの差別化がいまいちになった感じがします(いずれバグ修正や最適化はかかると思いますが)。そこでHyprlandのようなDEでないWMを使ってみたいと考えました。DEをきれいに削除するのははっきり言って面倒です。せっかくDIY感覚でGUI環境を構築するのであれば、Arch Linux で他にもいろいろいじってみたいと考えてdistro hop(Distroを変えること)した訳ですね。因みにArch Linuxは開発者向けのパッケージでデフォルトのレポジトリから直接落とせたるものが他より多かったり、他にも魅力的な点は多くありますが、それはArch Linux 公式の比較ページから見てみてください。
うだうだと長く話してしまいました、次行きましょうか。

軽くハードウェア環境紹介

私が使用している環境を軽く紹介します。
CPU: Intel i9-12900HX
GPU: NVIDIA GeForce RTX 4060 Max-Q / Mobile
Mem: 16GB × 2 = 32GB
Storage: Samsung 990 pro 2TB
マウスコンピューター、型番P6-I9G60BK-A

Arch Linux 使うにあたって

Arch Linux はいわゆるRolling ReleaseのDistroです。パッケージが十分にテストされずに環境が壊れてしまったということが十分考えられます。そこでBtrfsというOracleが開発した新しめのファイルシステムを使いたいと思います。

Btrfsってなんぞ

Btrfs は Oracle によって開発されたファイルシステムです。CoW(copy on write)という技術を用いており、ファイルを書き込む際に上書きするのではなく、既存のデータを残したまま差分のみを別の場所に保存することで少ない領域で効率的にスナップショット(バックアップ)を取ることができるのです。またSSDにおいては最適化がなされており、CoWなどで処理量が増えたりと多機能な分遅いと思われがちですが、ext4とほとんど遜色ないとか。これは使えるぞということで採用しました。

Snapper - Btrfsを管理する

Btrfsという多機能はファイルシステムを使うにあたり、直接Btrfsコマンドを使用してもいいのですが、openSUSEのコミュニティーによって生み出されたSnapperというツールがあります。今回はそちらを使用していこうと思います。他にもTimeshift等のツールはあります。気になった方は調べてみて下さい。

Arch Linux をインストールするぞ

ここから先は公式ガイドを主に参考にしていきます。当然ですが、公式Wikiは一読してください。あらゆる情報が詰まっていますし、筆者自身Linuxを使った経験は割と浅いので、間違えたことを知らずに記述している可能性も否めません。もし間違いを発見した場合にはコメントを残していただければ幸いです。

ISO を落としてこよう

ここからISOファイルを落としてきましょう。近くのサーバーのほうが早いです(その時によって別なサーバーのほうが早いかもしれないです。あまりに遅いときは変えてみてください。)
署名を検証しましょう。公式ページから落としたのであれば基本的に問題はないですが、習慣としてやっておきます。GnuPGをインストールして、

gpg --keyserver-options auto-key-retrieve --verify archlinux-version-x86_64.iso.sig

を実行。次に参りましょう。

Arch Linux インストール

ISOをUSBやDVDに焼いて(Fedora Media Writer, Raspberry pi Imager等のツールがあります),
UEFI 設定で然るべき変更(ISOを焼いたメディアの起動順位を最上位にあげましょう)を行ってLive bootします。まずキーボードレイアウトを変えましょう。

loadkeys jp106

次にUEFIで起動したことを確認します。

ls /sys/firmware/efi/efivars

大量のファイルが正常に表示されたらOKです。
次にネットに接続します。Wifiを接続していきます。

iwctl
device list
station wlan0 get-networks
station wlan0 connect <ネットワークの名前>
<パスワードを入力してください>
exit			

次、時間帯調節

timedatectl set-timezone Asia/Tokyo

次に、fdiskでPC内のデバイスとパーティションを見てみましょう。

fdisk -l

すると/dev/nvme0n1などの表示が出てきます。インストールしたいストレージをパーティションで区切っていきます。今回は/dev/nvme0n1とします。

fdisk /dev/nvme0n1

# 新たにGPTパーティションを作成
g
# 新しいパーティションを作成
n
1 (Enter押せばいい)
2048 (Enter押せばいい)
+512M (最低300M)
n
2 (Enter押せばいい)
(Enter押せばいい)
-**G (swap容量に残したい分だけ**にいれること)
n
3 (Enter押せばいい)
(Enter押せばいい)
(Enter押せばいい)
t (ファイルシステムを変える。デフォルトは20のLinux Filesystem)
1 (1つめのパーティションを選択)
1 (EFI partition)
t 
2 
23 (Linux root x86_64)
t
3
19 (SWAP)

次にフォーマットしていきましょう。

mkfs.vfat -F32 -n ESP /dev/nvme0n1p1
mkfs.btrfs -L root /dev/nvme0n1p2
mkswap /dev/nvme0n1p3
swapon /dev/nvme0n1p3 (スワップ領域を有効化する)
blkid -o list (確認)

次にBtrfs のサブボリュームを作ります。

mount /dev/nvme0n1p2 /mnt
cd /mnt
btrfs subvolume create {@,@home,@var_log,@snapshots,@home_snapshots}
btrfs subvolume list /mnt (確認)

どこにサブボリュームを作るかは人によりますが、今回はroot(/), /home, /var/log, /.snapshots, /home/.snapshots に作っていきます。

# 一旦アンマウントします
cd
umount /mnt (umountはtypoではありません。nが無いことに注意)
mount -o defaults,noatime,space_cache=v2,ssd,compress-force=zstd:1,commit=120,subvol=@ /dev/nvme0n1p2 /mnt
mount --mkdir -o subvol=@home /dev/nvme0n1p2 /mnt/home
mount --mkdir -o subvol=@var_log /dev/nvme0n1p2 /mnt/var/log
mount --mkdir -o subvol=@snapshots /dev/nvme0n1p2 /mnt/.snapshots
mount --mkdir -o subvol=@home_snapshots /dev/nvme0n1p2 /mnt/home/.snapshots

BtrfsにおいてCoWの特性上、頻繁な書き込みが発生するディレクトリでは処理の負荷(オーバーヘッド)が増えることがあります。var/logはlogを頻繁に書き込むので、CoWを無効にします。

chattr +C /mnt/var/log

ではESP(EFI system partition) をマウントします。

mount --mkdir /dev/nvme0n1p1 /mnt/efi

/mnt/bootにするパターンもありますが、ESPはFat32が必要であり、Fat32は古くて制限のあるファイルシステムです。KernelをBtrfsにおけた方が制限を受けにくくて個人的には好きです。

では必要なパッケージをインストールしていきます。

vim /etc/pacman.d/mirrorlist
# Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch を追加してください。上にあるほど優先されます。
pacstrap -K /mnt base base-devel linux linux-firmware grub efibootmgr dosfstools netctl vim iw wpa_supplicant networkmanager dialog btrfs-progs intel-ucode arch-install-scripts
# intel-ucode はAMD CPUをお使いの場合 amd-ucodeに変えてください

必要なパッケージがインストールできたところで、fstabを作成します。

genfstab -U /mnt >> /mnt/etc/fstab

ではarch-chroot環境に入って色々設定していきましょう。

arch-chroot /mnt
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
hwclock --systohc
vim /etc/locale.gen
# en_US.UTF-8 UTF-8 及び ja_JP.UTF-8 UTF-8 (他使いたい言語等)の行のコメントを解除
locale-gen
vim /etc/locale.conf
# LANG=en_US.UTF-8 を追加(筆者はイギリス英語派なのでen_GBです。上のlocale.genも解除済み)
vim /etc/vconsole.conf
# KEYMAP=jp106 を追加(日本語キーボード以外は検索してください)
vim /etc/hostname
# 設定したいホストネームを直打ちするだけ

mkinitcpio -P
passwd (ガイドに従って2回入力するだけ)

あらかたインストールに必要な作業は終わりました。最後にブートローダーをインストールしましょう。今回はGRUBを使います。

grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg

終わりです。exitしてshutdown -h nowでシャットダウンしましょう。
もしなにかが起きた場合、Archwikiを見てください、本当に充実したWikiなので。またコメントを残してくれたら私のできる範囲で答えたいと思います。余談ですが、Linuxの問題解決にはClaudeが結構優秀なのでそちらもおすすめしておきます。

インストールが終わったぞ

ユーザー作成・諸々

Wifiを使っている人はとりあえずインターネットに接続しましょう。

systemctl start NetworkManager
systemctl enable NetworkManager
nmcli d wifi list
nmcli d wifi connect SSID password パスワード

次に、ユーザーを作成します。いつまでもrootなのは不便だし多少危険です。

useradd -m -G wheel -s /bin/bash ユーザーネーム
passwd ユーザーネーム
pacman -S sudo
EDITOR=vim visudo
# Defaults env_keep += "HOME" の行と %wheel ALL=(ALL) ALL の行のコメントを解除

因みにzsh等が使いたい場合には/bin/bashを変更してください。
exitしてユーザーにログインして見てください。できたらユーザー作成完了です。

AUR使えるようにしよう

今回はyayを使おうと思います。

sudo pacman -S git fakeroot binutils make gcc
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
# インストールできたことを確認
which yay

Btrfs 管理

まずSnapperを入れます。ついでにbtrfs-assistantを入れます。

sudo pacman -S snapper snap-pac grub-btrfs
yay -S snap-pac-grub
sudo pacman -S diffutils polkit qt6-base qt6-svg noto-fonts util-linux cmake qt6-tools  # 依存関係のインストール
yay -S btrfsmaintenance  # 依存関係の以下略()
yay -S btrfs-assistant
sudo umount /.snapshots
sudo rmdir /.snapshots
sudo snapper -c root create-config /
sudo umount /home/.snapshots
sudo rmdir /home/.snapshots
sudo snapper -c home create-config /home
# 確認
sudo snapper list-configs
sudo btrfs subvolume delete /.snapshots
sudo btrfs subvolume delete /home/.snapshots
sudo mkdir /.snapshots
sudo mkdir /home/.snapshots
lsblk # ディスク・パーティションを一度確認するだけ
sudo mount -o subvol=@snapshots /dev/nvme0n1p2 /.snapshots
sudo mount -o subvol=@home_snapshots /dev/nvme0n1p2 /home/.snapshots
sudo genfstab -U / | grep snapshots >> /etc/fstab
# ルート権限がなくても使えるようにします
sudo vim /etc/snapper/configs/home
# ALLOW_USERS="ユーザー名をここに追加してください"
sudo vim /etc/snapper/configs/root
# やることは上に同じ

最後に編集した2つのファイルを編集することで、Snapperに関する様々な設定が行えるようになります。おすすめをいくつか出しておくと、SYNC_ALC="yes"、あとはTIMELINE~~に関しては好みのスナップショットの保存数を設定してください。正直デフォルトの毎時、毎日、毎週、毎月、毎3ヶ月、毎年10個ずつは多すぎると思いますので、、、
最後に先ほどいれたsnap-pacが自動的にスナップショットを取ったり、クリーンアップを実行してくれるように

systemctl enable --now snapper-timeline.timer
systemctl enable --now snapper-cleanup.timer

を実行しましょう。Well Done. 完了です。

あとがき

Arch Linuxのインストール、それからSnapperの設定といろいろ手順が多く、はっきり言って面倒だと感じる人も多いのでは無いでしょうか? しかし一度このステップを踏んでみると、LinuxのGUIインストーラーが裏で何をやっているのか、Btrfsって何なのか、などについての理解が深まり、少し違った景色が見えるのではないでしょうか。僕は初めてArch Linuxを入れたときの眼の前に広がる景色の違いに圧倒された記憶があります。皆さんとその感動が共有できたのであれば幸いです。
それでは楽しいLinuxライフを楽しんでください。最後まで読んでいただき、ありがとうございました。

Discussion