Ubuntuはさほど気に入ったOSというわけでもなかったので、あまり触ったことが無いが、ひょんなことからDesktopをインストールしてみる気になった。どうせなら、Software RAIDを組んでみようと思ったら、一発インストールというわけには行かなかった。試していないが、server版ではこう言う問題はない。あったら大騒ぎだろうな。要するにデスクトップで酔狂なことをするからダメなんだけれど。
課題
desktopタイプは、RAIDを前提にしたインストーラーではないようなので、まず、”Try Ubuntu"で LiveCDを起動してから、ターミナルを使って作業する。それはまあ仕方ない。
問題は、RAIDの設定が無事に終わっても、インストールの最後で、grubのインストールでこけてしまうことにある。Ubntuのバグか仕様かはわからない。(もっとも私のインストールの仕方に何かそもそもの勘違いがあるのかもしれない。alternativeのインストーラがあるのかもしれない)
RAIDを組む
desktopタイプでは、”Try Ubuntu"で LiveCDを起動してから、ターミナルを使って作業する。
ここでは、RAIDはミラー( raid1)の例にしたが、RAIDの他の場合も違いは無い。
- まず、ターミナルでraidを組むためにmdadmをインストールする
apt-get install mdadm
- fdiskでミラーを組むためのディスクを作る。
fdisk /dev/sda fdisk /dev/sdb
この場合はパーティションは、nで作成し、いわれるがままデフォルトの全体を一つだけのプライマリーで作る。ただし、最後にタイプだけをtコマンドで raid( fd)にしておき、wで書き込みをする。
できあがったらミラーを組む。仕上がりはこんな感じになるだろう。
fdisk -l /dev/sda1 ...... fd Linux raid /dev/sdb1 ...... fd Linux raid
- 続いて、Software RAIDを組む。
mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/sda1 /dev/sdb1 --metadata=0.90
インストール
ここまでの作業でインストーラーを動かせば、RAIDディスク ( /dev/md0)にインストールできるようになる。普通にインストールが進むのだが、最後にgrubに書き込みをしようとして失敗し停止する。
私の環境では、面倒なことに、停止した箇所で、「このまま続行」を選ぶことができない(ほかの選択肢も選べない)。grubに書き込めないのは、インストーラーが想定していないインストール方法なので仕方がないにしても、何も選べなくなるのは、Ubuntuのバグでは無いかと思う。このまま異常終了させるしか無い。
修正作業
再び、ターミナルにもどって作業する。
- /dev/md0をマウントする。私の場合、ファイルフォーマットをLVMとしたので、マウントは/dev/mapper以下の論理デバイスで行う。
mount /dev/mapper/ubuntu-vg-root /mnt
- bootファイルは通常通りマウントする
mount /dev/md0p1 /mnt/boot
- 環境関係もマウントする
mount -t proc none /mnt/proc mount --bind /dev /mnt/dev mount --bind /sys /mnt/sys
- 名前解決のためにファイルをコピーしておく
cp /etc/resolv.conf /mnt/etc
ここで一度 change root してmdadmをインストールしておく
chroot /mnt apt-get install mdadm exit
- change root 環境から抜けたらraidのUUIDを保存するために関係のファイルを設定しておく。これを忘れるとブートできなくなる
/usr/share/mdadm/mkconf > /mnt/etc/mdadm/mdadm.conf
- 最後にchrootしてからgrubを書き込む
chroot /mnt grub-install /dev/sda grub-install /dev/sdb exit
起動後の修正
あとはbootすれば、起動するはずであるが私の環境ではubuntuのバグで、起動時にちょっとしたエラーが出る("Error: diskfilter writes are not supported")。LVM+RAIDの組み合わせで出るらしい。そのまま放っておいてもしばらくすればbootするので、実害はなさそうだが、修正提案はでているようだ。
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1274320
ここの#34に従って、/etc/grub.d/00_header を書き換える。
以上