Sarge RAID1設定でハードディスク交換

Sargeはインストール時にハードディスク構成をソフトウェアRAIDに出来る。 今までルートディスクのRAID構成は面倒だったが、これで手軽に可能になる。

ハードディスクが壊れた?

まだ動かして50時間もたっていないのに、RAID1を構成していたハードディス クが故障した。/dev/hda1と/dev/hdd1とで構成していたRAID1だが、 /proc/mdstatを見ると/dev/hdd1が認識されていなかった。/var/log/syslogを みると、IDEドライバからのエラーメッセージが大量にあった。

smartctlでチェック

本当に壊れているのかどうか確信は持てない。たとえばデバイスドライバが相 性悪くエラーになるとか、あるいはハードディスクドライブ本体ではなく途中 のケーブルの接続が悪いとか色々考えられるからだ。 そこでsmartctlコマンド経由でハードディスクのS.M.A.R.T機能を使い情報を 見てみることにする。が、しかし、sargeにはsmartctlがない。 そこでKNOPPIX でブートしてから/dev/hddの状況を見てみる。こんな時にknoppixは実に便利だ。
 # smartctl -a /dev/hdd
パッケージ名がsmartmontoolsと変更になっていた。apt-get install smartmontoolsとすればインストールできる。

腐るほどエラーログが出てくる。だめだこりゃ。

ハードディスクが壊れた!

入れ換え。もともとハードウェアを組む時に「こ.ん.な.こ.と.も.あ. ろ.う.か.と」予備のハードディスクドライブ一台を(つまり最初に三台を 同時に)購入している。

[PR] ハードディスク
iconicon
アフリエイトについて

交換し/dev/hdaと同じパーティションを切る。fdisk -lで情報を確認し、それ と同じパーティションを切る。LinuxのRaidで自動認識するファイルタイプは FDであるので忘れないように。

# fdisk -l /dev/hda
# fdisk /dev/hdd
....

RAID1のディスクとして認識させるには

sargeからはmdadmコマンドを使うので、昔のノウハウが使えない。マニュアル を読む。どうやらaddすればいいだけのようだ。RAIDのデバイスは/dev/md0で 追加するのは/dev/hdd1(さっきパーティションを切っている)だ。
# mdadm --manage /dev/md0 --add /dev/hdd1
では状況をみてみよう。
# cat /proc/mdstat
コピーが開始されたようだ。しばらく時間がかかり、うまくコピーされたよう だ。無事解決。
 # mdadm --detail --scan
mdadm.confのための情報を取得し更新(mdadmのマニュアルを参照のこと)。

そうは問屋はおろさない

リブートすると、さっきの追加されたハードディスクが認識されていない。 こまった。何度やっても同じだ。

/dev/hda1と/dev/hdd1は約120.5GBの領域なので時間がかかる。そこでテスト のために/dev/hda1と/dev/hdd1を1GBのパーティションにして、そこをRAID1と してインストールして実験してみる。まずインストール後の稼働している状態 で/dev/hdd1を切り離し、/dev/hddにゼロを上書きする。次にパーティション を切りなおし、/dev/md0へ追加する。つまり、まったく新しいHDDをつけたの と同じ状態を作り出す。

  • /dev/hdd側のデータを破壊する
    #  mdadm /dev/md0 -f /dev/hdd1
    #  mdadm /dev/md0 -r /dev/hdd1
    #  dd if=/dev/zero of=/dev/hdd count=100
    # reboot
    次は当然/dev/hdd1は認識されない。
    

  • もう一度最初から追加するのと同じことをする
    #  fdisk /dev/hdd  <-/dev/hdaと同じにする
    #  mdadm /dev/md0 -a /dev/hdd1
    #  watch -n 10 cat /proc/mdstat <- 状態をモニターして終ったら^Cする
    #  reboot
    
    これでリブートすると問題なく認識される。なぜだ。両者の違いは/dev/md0へ 割り当てるパーティションのサイズのみだ。これはパーティションサイズの違 いでうまくいったりいかなかったりするのだろうか。

    考えられる違い

  • あたらしくインストールした時にバグが取れていた

  • サイズが巨大だと対応できない

    /dev/md0を30GB、/dev/md1を80GBにして運用を始める。今度、ハードディスク を交換する時、どうなるかはわからないが、これ以上復旧テストを繰り返すの も大変なのでここらで妥協する。ハードディスクが壊れてもデータはなくなら ないので、まあ、どうにかなるでしょう。

    なんとなくブート時に認識されない原因がわかった

    sargeはブート時にinitrdを使う。これを使うので、ブートディスクをraid化 できる。このイメージが/boot/initrd.img-2.4.27-2-386などとして入ってお り、gurbがブート時にロードしてくれる。あとから加えたあたらしいraidのディ スクの情報は当然initrd.img-2.4.27-2-386に入っていない。つまりブート時 にraidが認識されないのは当り前だ。なるほど。ハードディスクを変えてしまっ た時は、initrd.imgも作りかえなきゃいけないのだな。そうじゃないとブート 時に認識されないのは当り前だ。なるほど。 以前のinitrd.img-xxxを上書きするのは危険なので、別に作り、grubのメニュー エントリもちゃんと増やすこと。

    # mkinitrd -k -o initrd.img 2.4.27-2-386
    #  find /tmp -name 'initrd.img'
    
    

    場所がわかるので、そのファイルを/bootへコピーし、grubのメニューエン トリーを更新。


    目次へ

    すずきひろのぶ Hironobu SUZUKI < hironobu -at- h2np -dot- net >

    $Id: mdadm.htm,v 1.8 2005/11/15 02:00:16 hironobu Exp hironobu $