2009年12月6日日曜日

rootfsにBtrfsを使う場合の注意

先日メイン環境をFedora 12に移行させたことは書いたが、その際に発生した問題については書いていなかった。それはFedora 12の標準設定では、HDDを複数使用したBtrfs領域をrootファイル・システムとして利用できないということである。


実は今回は、単にFedora 12に移行するだけではなく、rootファイル・システムをBtrfsに切り替えてみていた。Btrfsはまだ開発中とはいえ、すでにメインライン・カーネルにマージされて8ヵ月が経ちそれなりに安定してきていること、原理的にデータを安全に更新・保持できること、単独でRAID機能を備えることで管理が楽になることなどが理由である。Fedora 12のインストーラは標準ではBtrfsをサポートしないが、「icantbelieveitsnotbtr」という文字列を起動オプションとして渡すことでBtrfsに対応する。


インストーラをBtrfsに対応させておけば、単独のHDD上には問題なくFedora 12をインストールして起動できる。ところが複数のHDDにまたがるBtrfs領域を作成し、そこにFedora 12をインストールするには、ちょっとコツがいる。


まず、初期化作業は、コマンドラインで実施する必要がある。まぁこれは、仮想コンソールを切り替えて、# mkfs.btrfs -m raid1 -d raid1 /dev/sda /dev/sdb といったコマンドを実行するだけで済む(RAID1構成にする場合)。


再度インストーラに戻って作業を続行すれば、インストールを完了できる。しかし、インストールしたFedora 12は起動できない。というのも、複数HDDにまたがるBtrfs領域を利用する際は事前に「btrfsctl -a」を実行しておく必要があるにもかかわらず、Fedora 12の初期化処理ではそれがなされていないからだ。この問題を解消するには、インストールDVDからレスキューモードを起動してrootfsをマウントし、初期化用RAMディスク・イメージを再作成する必要がある。なお、レスキューモード起動時にも「icantbelieveitsnotbtr」を指定しなければならない。


rootfs環境にchroot後、/usr/share/dracut/modules.d/95rootfs-blockディレクトリに移動し、そこにある「install」ファイルの2行めに「inst btrfsctl」を挿入、「mount-root.sh」ファイルの2行めに「/sbin/btrfsctl -a」を挿入する。その後、次のコマンドを実行すれば、複数HDDにまたがったBtrfs領域をrootfsとして利用できる初期化RAMディスク・イメージが生成される。


# yum -y install btrfs-progs
# dracut -f /boot/initramfs-`uname -r`.img `uname -r`

本来はBtrfs専用のdracut設定ファイルを用意する方が望ましいのだろうけど、この方法が一番お手軽だと思う。Btrfsをサポートする以上、btrfsctl -aを実行する仕組みが無い方がおかしいので、いずれはこうした作業は不要になるはずだ。「つなぎ」としての対処ならこんな程度で充分だろう。


(2009/12/06追記)btrfsctl -aの前に「/sbin/modprobe btrfs」しておいた方がいいようだ。無くても起動はするが、一度マウントに失敗する(マウントを試みた際にbtrfsドライバが読み込まれるので、リトライ時にはうまくいく)。「mount-rootfs.sh」にはこの行も記述しておいた方がいい。

0 件のコメント: