よく分かっていないまま記事を書いているところがあるので、間違っている部分があるかもしれません!その場合はどうぞご指摘下さい。
症状
2TBのHDD2台でRAID1を組んでいたが、書き込み速度が遅いのが気になってRAID解除しようとした。どっかのサイトに乗っていたのに従って、
sudo umount /dev/md0 sudo mdadm --misc --stop /dev/md0
をコマンドラインで実行。続いてあろうことかスーパーブロックの削除を行ってしまった。
※これをやるとHDDがマウントできなくなる sudo mdadm --misc --zero-superblock /dev/sda1 /dev/sdb1
よく知らないままやったのが最大の間違い。このコマンドでHDDのパーティション区切り等の情報を保存している領域を0で上書きしてしまう。しかも両方のHDDに適用してしまった。
試行錯誤
スーパーブロックが壊れたり消してしまった場合でも、HDD内にバックアップが残っているらしいのでそこから復元を試みた。
#スーパーブロックが保存されている場所を表示 sudo mkfs.ext3 -n /dev/hda5 #スーパーブロックの場所を指定して読み込み出来るかチェック sudo fsck.ext3 -b 32768 -B 4096 /dev/hda5
参考ページ https://www.atmarkit.co.jp/flinux/rensai/linuxtips/728fixpartition.html
結果、バックアップの場所は表示されるものの、どのバックアップを使っても復元は出来なかった。
解決
打つ手がないので数万円払ってデータリカバリサービスに頼もうかと思ってた頃、あっさりと解決した。
失われたデータを復元するのではなく、同じRAID構成でもう一度作ってしまおうという発想だ。
まず、動作中のRAIDデバイス(HDDが壊れてもRAIDデバイスが動かないながらも残っていることがある。)があれば停止。
sudo mdadm --stop /dev/md0 mdadm: stopped /dev/md0
続いて、動いていた頃と全く同じようにRAIDを作ってみる。おそらくRAIDデバイスを作るときにスーパーブロックが作成される。全く同じ条件で作ればスーパーブロックも同じ?…にはならなくとも使えるようにはなると思い、一か八かやってみた。
mdadm –createオプションで作る。作るデバイス名は/dev/md0で良いのかもしれないけど、わかりやすさのために一応別の名前にしている。
壊れたHDDを2台とも繋いだまま再作成してもいいけど、また失敗してデータを失わないように、一番最初に壊れた時点のHDDは取っておいて他の1台だけで作業した。HDD1台でRAIDを作るときは、欠けているデバイスの部分は「missing」を入れると存在しなくても作ってくれる。すごい。
sudo mdadm --create /dev/md1 --verbose --level=1 --raid-devices=2 /dev/sda missing mdadm: /dev/sda appears to be part of a raid array: level=raid0 devices=0 ctime=Thu Jan 1 09:00:00 1970 mdadm: partition table exists on /dev/sda but will be lost or meaningless after creating array mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 mdadm: size set to 1953383488K mdadm: automatically enabling write-intent bitmap on large array Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md1 started.
僕の場合は作成した時点で/dev/md1が勝手にマウントされた。手動マウントするなら、
sudo mount /dev/md1 /mnt
もし何も反応がない場合はダメ押しの再起動を試してみる。
sudo reboot
これで何とかなった。