2010年7月25日日曜日

rootfs に btrfs をつかってみる

Gentoo というより Funtoo だけど、LVM上に rootfs を作っていて起動に initramfs が必要な状況だった。
起動時間が遅くなるから、initramfs は使わないようにしたかった。
そうすると、ファイルシステムは ext4 になっちゃうわけだけど、面白くないなあということで btrfs にしてみた。

1. ファイルシステムの作成

まずは btrfs な領域を作成する。
今回のターゲットは ThinkPad X61 で、ディスクを一個しか積んでいない。
そのため、データ領域、メタ領域共に single を指定した。
このパラメータには、raid0 や raid1 などが指定できる

$ sudo mkfs.btrfs -d single -m single /dev/sda3
$ sudo mkdir /btrfs
$ sudo mount -t btrfs /dev/sda3 /btrfs
2. サブボリュームの作成

次に、サブボリュームを作成する。
今回は、/, /home, /usr/portage の3つの領域を作成する。

$ sudo btrfs subvolume create /btrfs/rootfs
$ sudo btrfs subvolume create /btrfs/home
$ sudo btrfs subvolume create /btrfs/portage

ちなみに、btrfs コマンドは2010年7月25日現在、sys-fs/btrfs-progs-9999 に入っています。

3. /etc/fstab の編集

/dev/sda3       /               btrfs           subvol=rootfs,noatime,ssd               0 1
/dev/sda3       /home           btrfs           subvol=home,noatime,ssd         0 1
/dev/sda3       /btrfs          btrfs           noatime,ssd             0 1
/dev/sda3       /usr/portage    btrfs           subvol=portage,noatime,ssd      0 1

4. /etc/boot.conf

Funtoo Linux だと、grub の設定は /etc/boot.conf で行うようになっている。
rootflags=subvol=rootfs が肝です。このオプションで /(root) にサブボリュームの rootfs をマウントすることが出来ます。

"Funtoo Linux" {
    params += root=/dev/sda3 rootflags=subvol=rootfs 
    kernel kernel-genkernel-x86_64[-v]
}

編集が終わったら、boot-update コマンドの実行と再起動です。

$ sudo boot-update
$ sudo reboot