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 を無事に再設定できましたとさ。めでたしめでたし。