Ubuntu Server 20.04をBtrfsにインストールする
Ubuntu Server 20.04のルートファイルシステムをBtrfsにした時の手順をまとめました。
Btrfsのサブボリュームについて
Btrfsのサブボリュームは、個別にマウントでき、サブディレクトリとして表示できます。また、Btrfsのスナップショットはコピーオンライト(CoW)機能により、素早くスナップショットを作成できます。
Btrfsのサブボリュームのレイアウトについて
BtrfsのサブボリュームのレイアウトはopenSUSEが参考になります。openSUSEのデフォルトのファイルシステムはBtrfsを採用しています。
ストレージ レイアウトの設定
ストレージ レイアウトの設定で、Custom storage layout
を選択します。
ブート デバイス用のパーティションを作成します。
GPTパーティションを追加します。
btrfsでフォーマットし、マウント ポイントは/
にします。
ディスクにパーティション テーブルを書き込んで、インストールを続けます。
インストールが完了したら、再起動せずに次のステップに進んでください。
Btrfsのサブボリュームの作成
インストールが完了したら、再起動せずにALT
+ F2
を押して、コンソールに切り替えます。ここでルートになります。
sudo -i
マウントしたデバイスを表示します。/target
にUbuntuがインストールされています。
mount -l | grep /target
/target
をアンマウントし、/mnt
にディスクをマウントします。
umount -l /target
mount /dev/vda2 /mnt
lsblk
でブロックデバイスの一覧を表示できます。
サブボリュームを作成します。
cd /mnt
btrfs subvolume create @
btrfs subvolume create @/home
btrfs subvolume create @/opt
btrfs subvolume create @/root
btrfs subvolume create @/srv
btrfs subvolume create @/tmp
chmod 1777 @/tmp
mkdir @/usr
btrfs subvolume create @/usr/local
btrfs subvolume create @/var
btrfs subvolume create @/swap
/var
のコピーオンライト(CoW)を無効にして、パフォーマンスを向上させます。
chattr +C /mnt/@/var
すべてのファイルとフォルダをサブボリュームに移動します。
shopt -s dotglob
mv home/* @/home
mv root/* @/root
mv usr/local/* @/usr/local
mv var/* @/var
rmdir home opt root srv usr/local tmp var
ls | grep -v @ | xargs mv -t @
/mnt
をアンマウントして、システムに必要なデバイスをすべてマウントします。
umount /mnt
mount -o subvol=@ /dev/vda2 /target
mount /dev/vda2 /target/boot/efi
mount --bind /proc /target/proc
mount --bind /dev /target/dev
mount --bind /sys /target/sys
ALT
+ F3
を押して、3番目のウインドウに切り替え、chroot
でシステムを切り替えます。
sudo -i
chroot /target
fstabを編集して、サブボリュームを適切なマウントポイントを設定します。
vi /etc/fstab
UUID=xxxx / btrfs defaults,ssd,noatime,space_cache,commit=120,compress=zstd,subvol=@ 0 1
/swap/swapfile none swap sw 0 0
スワップ ファイルの作成
Btrfsのサブボリュームにスワップ ファイルを作成するには、コピーオンライト(CoW)を無効にしないといけません。しかし、コピーオンライト(CoW)が無効なファイルがあると、スナップショットを撮ることができません。そこで、スワップ ファイル用のサブボリュームを作成、そこにスワップ ファイルを作成します。
touch /swap/swapfile
chmod 0600 /swap/swapfile
chattr +C /swap/swapfile
fallocate /swap/swapfile -l 2g
mkswap /swap/swapfile
最後にGRUBを更新します。
update-initramfs -u -k all
grub-install --recheck /dev/sda
update-grub
ALT
+ F1
を押して、1番目のウインドウに切り替えて、再起動します。
参考文献
- Install Ubuntu 18.04 Server on btrfs - work-work.work
- 18.04 - Where are my BTRFS subvolumes? - Ask Ubuntu
- Ubuntu 20.04 with btrfs-luks-RAID1 full disk encryption including /boot and auto-apt snapshots with Timeshift | Willi Mutschler
- Using Btrfs for Easy Backup and Rollback | John Ramsden
- Creating openSUSE-style btrfs root partition & subvolumes
- SDB:BTRFS - openSUSE Wiki
- swap - Can I have a swapfile on btrfs? - Ask Ubuntu