ホットスワップを用いたソフトウェアRAID復旧
気付いたら6月です。驚きですね。
他にもVM周りとか色々書きたいことはあるのですが、差し当たってソフトウェアRAIDを復旧した時のメモなどを書きたいと思います。
キーワード: mdadm, RAID, hotswap, hotplug, software RAID
さて、SASが12本刺さる2Uのサーバ(RAID箱ではない)という面白いものが研究室にありまして、それに2TのSASを12本刺し、mdでRAID1にして合計2T * 6 = 12Tという感じになっています。
で、今回壊れたのがsdgだったのですが、これがなかなか面倒な感じでした。パーティションの構成は以下です。
sdaとsdgをそれぞれ4パーティションに切って、そのうち2パーティションずつをmdでRAID1にし、1つずつをswapにし、1つずつを/bootにしています。
/bootはRAIDにはしておらず、単にそれぞれに/bootを用意しておいて、片方が壊れたときにも片方から起動できるようにしてあるだけです。
さて、状況を確認してみます。
# less /proc/mdstat md5 : active raid1 sda3[0] sdg3[1] 976562432 blocks [2/2] [UU] md6 : active raid1 sda4[0] sdg4[2](F) 944725376 blocks [2/1] [U_]
というわけで、sdg4が壊れているようです。
やらなければいけないことは
という感じです。
では具体的な手順を。
swapとRAIDからsdgを切り離す
# swapoff /dev/sdg2 # mdadm --manage --fail /dev/md6 /dev/sdg4 # mdadm --manage --remove /dev/md6 /dev/sdg4 # mdadm --manage --fail /dev/md5 /dev/sdg3 # mdadm --manage --remove /dev/md5 /dev/sdg3
これでOK
sdgを抜いていい状態にし、ディスクを交換する
# echo 1 > /sys/block/sdg/device/delete
これで抜いて大丈夫になったはず。
ディスクを交換。今回は自動的に新たなディスクがsdgとして認識された。
以前と同じパーティションに切る
はい。partedを使ってGPTで切っていたので、同じようにpartedで同じように切ればいいのですが、「見ながら同じように切る」なんて許せないですよね。コピーしたいですよね。
そこでこうしました。
# dd if=/dev/sda of=/dev/sdg count=100
先頭のMBRをコピーすればおk!
bsが512なので、51.2kBコピーすることになります。こんなにコピーする必要ありませんが、なんとなく。念のため。
確認してみます。
# parted /dev/sdg print Model: SEAGATE ST32000444SS (scsi) Disk /dev/sdg: 2000GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 17.4kB 1000MB 1000MB ext3 boot 2 1000MB 33.0GB 32.0GB 3 33.0GB 1033GB 1000GB raid 4 1033GB 2000GB 967GB raid
ちゃんと切れています。flagも立っていて、ちゃんとgptにもなっています。
フォーマットはまだしていませんが、先頭のパーティションだけはさきほどのddで一部コピーされてext3と判断されているようです。
3と4はRAIDでresyncするのでフォーマットする必要はありませんが、1と2はそれぞれext3とswapにフォーマットする必要があります。
# mkfs.ext3 /dev/sdg1 # mkswap /dev/sdg2