2008年2月20日水曜日

RAIDデバイス名の変更

Linuxのsoftware RAID(md)の場合、disk controllerをまたがって好きなようにRAIDを構成できるため重宝します。またhardware RAIDの場合、raid controllerが故障すると読み出せませんが、そのような欠点もありません。
mdはディスク内に自身のデバイス名(md0)などを保持しています。ここで例えばディスク交換のために、/パーティションをmd0からmd1にコピーした場合、新たに作られる/はmd1というデバイス名を持ってしまいます。これを繰り返すとデバイス名がどんどんいびつになっていきます。
これをどうにか整理したかったのですが、どこにも書かれていなかったので自力で解決しました。

まだまだ説明が続きます。多くのドキュメントではmdのcreateについてしか記述されていませんでした。しかし実際にはassembleとstopという行為が重要になってきます。なぜこれらが記述されていないのかというと、Linuxの各ディストリでは起動時やshutdown時のscriptにあらかじめ組み込まれていて、説明する必要がないわけです。そして、試した結果わかったのですが、「mdはディスク内に自身のデバイス名(md0)などを保持しています。」これはcreate時だけでなくassemble時にも更新されるようです。

いよいよデバイス名の変更の仕方です。例えばmd2をmd1に変更するには

# umount md2
# mdadm -S /dev/md2
# mdadm -A /dev/md1 /dev/sd... /dev/sd...
# mount ...
わかってしまえば簡単でした。
このあと/etc/fstabの変更も忘れずに。

ただしこれができるのはumount可能なパーティションだけです。CD bootなどでもいいかもしれません。
CD bootできなくてもがんばれば更新できます。例えば/のデバイス名をmd0に変更する場合kernel optionで
raid=noautodetect md=0,/dev/sd...,/dev/sd... root=/dev/md0
で変更されます。raid=noautodetectを指定しておかないと、autodetectされ、保持されているデバイス名でassembleされてしまい変更できません。またデバイス名が変わるためroot=/dev/md0の指定をしないと起動に失敗します。
このあと/boot/grub/menu.listや/etc/fstabの更新も忘れずに。

0 件のコメント: