2012年1月3日火曜日

Ubuntu で RAID10 の故障ハードディスクを取替え

RAID 復旧作業の備忘録

以前、RAID 復旧作業で、HDD のパーティションを切ることができず、ドライブ丸ごと RAID に突っ込んだ苦い失敗を、ここで挽回する。

今回、2度目の HDD 故障となり、HDD を Amazon でポチることにした。しかし容量が 2T のものしかなかったので、現在の 1.5T 構成だと、500GB 無駄になることになる。
さすがに、500GB 無駄になるのは、甚だ遺憾なので、真面目に対処することにした。

前回の失敗を振り返ると、、「GUI での設定方法がよく分かっていなかった」ことに尽きる。

そこらへんを重点的に攻略していこうと思ったが、やはり GUI では、思ったように設定できないようだ。


まず、HDD 構成

【スペック】
1500.3 GB, 1500301910016 バイト
ヘッド 255, セクタ 63, シリンダ 182401
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes

4台とも同じスペック

【パーティション】
/dev/sda
デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1   *           1          12       96358+  83  Linux
/dev/sda2              13      182401  1465039642+   5  拡張領域
/dev/sda5              13      182401  1465039611   fd  Linux raid 自動検出

/dev/sdb ~ /dev/sdd

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdd1          182390      182401       96390   83  Linux
/dev/sdd2               1      182389  1465039611    5  拡張領域
/dev/sdd5               1      182389  1465039579+  fd  Linux raid 自動検出

sda は、ブート領域を作成するために、100MB を基本領域にしてある。ソフトRAID 領域からはブートすることができない(本当か?)。
他のドライブは、先頭から RAID 領域をとり、最後の100MBを(なんとなく)パーティションを切った。
これら4台の HDD で RAID10 を構成している。(まったくアホ仕様ですなぁ)

今回壊れたのが、sdc ドライブだったので、どの HDD が壊れたのかを、ポート番号を頼りに調べようとしたのだが、どうやら、マザーボードの SATA コネクタ番号と一致しないらしい。

SATA0:ポート2(sdb)
SATA1:ポート4(sdd)
SATA2:ポート1(sda)
SATA3:ポート3(sdc)


では、さっそく 作業開始。

1.sdc ドライブを入れ替える。
2.sdc ドライブの設定  コマンドラインでの設定となる。
  sudo cfdisk /dev/sdb
  「新規作成」-「論理領域」を選択。「サイズ(MB)」を「1500199.30」と入力しEnter。(実際に割り当てられたのは、1500200.57 MB だった。)
  「最初から」を選択し、Enter。
  「FSタイプ」を選択し、「FD Linux raid 自動検出」を選択。
  残りの空き領域に、「新規作成」-「基本領域」で残り全サイズで作成。
  基本領域で「FSタイプ」を選択し、「83 Linux」を選択。
  最後に「書き込み」を実行後、「終了」を選択。
  (なんだか、Segmentation fail が頻発するのだが、コンソールのサイズを広げると、大丈夫になったりした。)
3.ドライブの再登録
  sudo mdadm --add /dev/md0 /dev/sdc5
  これで、勝手にリビルドされる。
  パーティション分割作業は、GUIのディスク・ユーティリティからでは、思ったようにできなかった。

結論、全部コマンドラインでやったほうが、安全確実で早い。

/boot がある sda 以外の 100 MB の領域には、/boot のバックアップを格納することにした。

大体3時間ぐらいでリビルドが完了。

そして、sdb もパーティションを切りなおす作業の途中・・・

事件発生!?

SATA コネクタが抜けてしまい、HDD にアクセスできない状態に・・・終わった感じがする。しようがないので、再起動。
・・・・・・・・・・起動しない。\(^o^)/オワタ

いやいや、ネバーギブアップ!!
よく見ると、起動時に HDD へアクセスをまったくしていないようだ・・・
BIOS のドライブ起動順序を確認すると・・・・おお、本来の起動順じゃない。おそらくは、ブートドライブ(sda)のコネクタを抜いてしまったので、順序が入れ替わったのだと思う。
これを直して再起動・・・
・・・・・ タ、タイムアウトだとっ!
(initramfs) ■
こんなプロンプトが、むなしく明滅を繰り返しているのでした・・・

悶絶しました。何も分かっていなかったのです。Linux も RAID も。私は貝になりたい。
今日も「無知の知」を得るのでした。

いろいろ試したが、有効そうなことを書いてゆく。
全て、initramfs 上で作業した。


RAID の状態を確認
mdadm --detail /dev/md0

State の行に「アクティブじゃない」となっていた。
RAID デバイスの内、2つが「removed」となっていた。


外れていたデバイスを追加
mdadm --add /dev/md0 /dev/sdc5
mdadm --add /dev/md0 /dev/sdd5
(デバイスは、/dev/sd[cd]5 とか正規表現で指定できるらしいぞ?試してないが・・・)

RAID を起動
mdadm -R /dev/md0

勝手に再構築が行われる。デバイス1つ当たり、だいたい3時間ぐらいで完了した。

各デバイスのスーパーブロックの内容を確認
sdb だけドライブ丸ごと登録したため番号が付かない。
mdadm -E /dev/sda5
mdadm -E /dev/sdb

mdadm -E /dev/sdc5

mdadm -E /dev/sdd5



結果を確認したら、sdd5 だけスーパーブロックの内容が無い・・・なんでだろう。


気にせずに再起動。おぃ



キタ――(゚∀゚)――!!
起動できました。まあ、HDD の内3台は、同期済みなので復旧できないわけないのですけどね。

このあと、sdb を無事に再設定できましたとさ。めでたしめでたし。