プチ技術メモ

技術系の情報を中心に適当に書いています

RAID1を構築してみる

万が一の保険のためにもRAID1は必須。そこで、404 Not Foundを参考にしてRAID1の構築に挑戦してみた。

OSにはDebian Etchを使用する。ディスク容量が60Gなのでhdaレイアウトは以下のように変更した。もちろんhdbも同じレイアウトで切る必要がある。

マウント 種別 容量 fs HDD RAID
/boot primary 100M ext3 hda1 md0
/ primary 2G ext3 hda2 md1
swap primary 512M swap hda3 md2
/tmp logical 2G ext3 hda5 md3
/var logical 20G ext3 hda6 md4
/usr logical 残り ext3 hda7 md5

で、参考ページの下の方で紹介されているコマンド群を使用してサクッと構築できるはずだったが…

まずは、参考ページからshファイルをダウンロードし、テーブルレイアウトの部分を自分の環境に合わせて書き換えてから、何も考えずにコマンドを実行…見事に撃沈。"mkinitrd"が見つからないとかでエラーが出ているようだったので、"initrd-tools"パッケージをインストールする。

# apt-get install initrd-tools

「よし、これでうまくいくはず!」と思ったけど、そうは問屋がおろさない。参考ページの通りに、再起動してgrubのコマンドモードでbootを試みるが、ここでもエラー発生。ここは単純なtypoっぽくて

root (hd1,0)
kernel /vmlinux-??? root=/dev/md1
initrd /initrd.img-???
boot

とすることでbootできた。「よし、うまくいった!」と思ったのもつかの間

mount: unknown filesystem type 'devfs'
umount: devfs: not mounted
mount: unknown filesystem type 'devfs'
umount: devfs: not mounted
pivot_root: No such file or directory
/sbin/init: 432: cannot open dev/console: No such file
Kernel panic - not syncing: Attempted to kill init! 

とKernel panicが発生!これが長い道のりの始まりでした。grubコマンドのオプションを色々変えてみたり、RAIDアレイを作り直してみたり、挙げ句の果てはOSを再インストールしてみたり、色々試してみたが全て不発。
いろいろ調べていて第4章 Debian 6.0 (squeeze) からのアップグレードの中に

4.7.1 devfs からのコンバート

Debian のカーネルは、もう devfs をサポートしません。そのため devfs のユーザは、etch のカーネルで起動する前に手作業でシステムを切り替える必要があります。

/proc/mounts に 'devfs' という文字列がある場合、大抵 devfs を使用しています。devfs スタイルの名前を参照している設定ファイルは、すべて udev スタイルの名前を使うように調整する必要があります。devfs スタイルのデバイス名を参照する可能性があるファイルには、/etc/fstab、/etc/lilo.conf、/boot/grub/menu.lst、/etc/inittab などがあります。

生じる可能性がある問題に関するさらに詳しい情報が、バグ報告 #341152 で入手可能です。

という記述を発見。によると、devfsの替わりにudevを使用するときはmdadmに--auto=yesオプションが必要らしいので早速試してみるが、やっぱり不発。
で、最後にたどり着いたのが次。さっきのリリースノートに

4.7.3 mdadm のアップグレード

mdadm は、MD アレイ (RAID) を initial ramdisk から再構築したりシステム初期化シーケンス中に再構築するのに設定ファイルを必要とするようになりました。パッケージのアップグレードを終えた後、再起動する前に必ず /usr/share/doc/mdadm/README.upgrading-2.5.3.gz に書かれている説明を読み、それに従ってください。このファイルの最新版は http://svn.debian.org/wsvn/pkg-mdadm/mdadm/trunk/debian/README.upgrading-2.5.3?op=file から入手可能です。問題が生じた場合は参考にしてください。

とあったので、backportから新しいmdadmを入れてみることにした。まずは、backportsを利用するため公開鍵をインストールする。

# apt-get install debian-backports-keyring

続いてapt/etc/apt/sourceに以下を追加。

deb http://www.jp.backports.org/ etch-backports main
deb-src http://www.jp.backports.org/ etch-backports main

続いてPinの設定。/etc/apt/preferencesに以下を追加。

Package: mdadm
Pin: release a=etch-backports
Pin-Priority: 999

それでパッケージを更新してみる。

# apt-get update
# apt-get upgrade

ここで予想外の出来事が発生!mdadmとは別に、カーネルイメージも更新されてしまう。そういえば、インストールしてから一回もパッケージの更新をしていなかったorz。とにかく気を取り直して、grubのコマンドラインからbootを試みる…ついに成功!

結論、mdadmをbackportから入れて問題が解消したのか、カーネルイメージの更新で問題が解消したのかは不明だが、確認するのも面倒なのでどちらでもよい。