新しいマザーボードへ移設したRAIDの再構築に失敗した件について
前回のRAID6復旧時に「よりよい筐体を」「eSATAでは速度に難がある」「これを機にCPUも含めて刷新を」という雰囲気に至ったので、毎年末に行っているメンテナンス作業を早めて11月時点で、RAIDを構成しているHDDを新しい筐体やマザーボードへ乗せ換えることとした。
RAIDの再構成ができない
新しい筐体・マザーボードに乗せ換えて、新しいSSDにUbuntu 16.04をインストール。その後、HDDを移設して接続して起動して、mdadmで再構築を行った。ところが認識されない。mdadm -A(--assemble)を行ってもsuperblockが見つからないとのこと。
そこで、mdadmからraidのsuperblockの情報がどうなっているのか、見に行く。
# mdadm -E /dev/sdb /dev/sdb: MBR Magic : aa55 Partition[0] : 4294967295 sectors at 1 (type ee)
見えない。存在しない。
通常、mdadmのメタバージョン1.2では、オフセット8セクタの場所にsuperblockの情報が書き込まれていることが分かっている。
例えば、前回の記事でRAID6の復旧に利用したメタ情報から抜き出すと、以下のように見える。
# mdadm -E /dev/sde | grep Super Super Offset : 8 sectors
ディスクは1セクタ=512バイトであるので、8セクタ=4096バイトのオフセットのバイナリを見ることでsuperblockの存在を確認できる。
sdbのsuperblockを確認する。
# hexdump -C -n 5000 /dev/sdb 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff |................| 000001c0 ff ff ee ff ff ff 01 00 00 00 ff ff ff ff 00 00 |................| 000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.| 00000200 45 46 49 20 50 41 52 54 00 00 01 00 5c 00 00 00 |EFI PART....\...| 00000210 1e e0 4b 5f 00 00 00 00 01 00 00 00 00 00 00 00 |..K_............| 00000220 af a3 50 5d 01 00 00 00 22 00 00 00 00 00 00 00 |..P]....".......| 00000230 8e a3 50 5d 01 00 00 00 63 20 c9 10 f5 f3 41 0f |..P]....c ....A.| 00000240 8c a0 ac b9 35 55 87 e6 02 00 00 00 00 00 00 00 |....5U..........| 00000250 80 00 00 00 80 00 00 00 b9 f0 6c 32 00 00 00 00 |..........l2....| 00000260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000400 c3 8c 89 6a d2 1d b2 11 99 a6 08 00 20 73 66 31 |...j........ sf1| 00000410 5a da 25 4e 9f f5 41 3c 8c 55 b7 d8 2a a8 5a 32 |Z.%N..A<.U..*.Z2| 00000420 00 08 00 00 00 00 00 00 ff 5f 50 5d 01 00 00 00 |........._P]....| 00000430 00 00 00 00 00 00 00 00 7a 00 66 00 73 00 00 00 |........z.f.s...| 00000440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000800 3b 5a 94 6a d2 1d b2 11 99 a6 08 00 20 73 66 31 |;Z.j........ sf1| 00000810 ef ab 9b c3 cf 46 48 fa 88 af 3f c5 e6 0c 87 60 |.....FH...?....`| 00000820 00 60 50 5d 01 00 00 00 ff 9f 50 5d 01 00 00 00 |.`P]......P]....| 00000830 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00001388
0x00000830から0x00001388まで飛ばされていて0x00001000(4096)の場所には何も書き込まれていないことになっている。
ちなみに0x000001fe(510バイト)にMBRのブートシグニチャである0xaa55(リトルエンディアン)が見える(マスターブートレコード)。その後に"EFIPART"の文字列が続くが、これはGPT(GUID PARTITION TABLE)のシグニチャである。
ともかく、このことからsuperblockが存在しないように見える。悲しい。
ちなみに1台だけsuperblockの情報が見えるHDDが存在した。
# hexdump -C -n 5000 /dev/sde 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00001000 fc 4e 2b a9 01 00 00 00 01 00 00 00 00 00 00 00 |.N+.............| 00001010 fb 80 6f e4 de 7f cc e6 ae 17 5e bb 2e dd c9 b1 |..o.......^.....| 00001020 6d 78 31 33 30 73 32 3a 33 00 00 00 00 00 00 00 |mx130s2:3.......| 00001030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00001040 a9 ce 1d 58 00 00 00 00 06 00 00 00 02 00 00 00 |...X............| 00001050 00 a0 4c 5d 01 00 00 00 00 04 00 00 08 00 00 00 |..L]............| 00001060 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00001070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00001080 00 00 04 00 00 00 00 00 b0 a3 4c 5d 01 00 00 00 |..........L]....| 00001090 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000010a0 04 00 00 00 00 00 00 00 46 18 70 eb 85 31 f5 41 |........F.p..1.A| 000010b0 10 01 d0 3d de 89 c8 31 00 00 08 00 48 00 00 00 |...=...1....H...| 000010c0 9a e0 22 58 00 00 00 00 e8 63 00 00 00 00 00 00 |.."X.....c......| 000010d0 ff ff ff ff ff ff ff ff dd 60 aa 56 80 00 00 00 |.........`.V....| 000010e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00001100 00 00 01 00 02 00 03 00 04 00 05 00 fe ff fe ff |................| 00001110 07 00 06 00 fe ff fe ff fe ff fe ff fe ff fe ff |................| 00001120 fe ff fe ff fe ff fe ff fe ff fe ff fe ff fe ff |................| * 00001200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00001388
RAID superblock formatsを参考にsuperblockの形式を調べると、0x00001000(4096バイト)の場所に0xa92b4efc(little-endian)がMagic Numberとして書き込まれるはず。
00001000 fc 4e 2b a9 01 00 00 00 01 00 00 00 00 00 00 00 |.N+.............|
を見ると、確かにリトルエンディアンでMagic Numberが書き込まれている。
埒が明かないので、HDDを何台か以前の環境に戻してみたが、mdadm -Eしてもhexdumpしても、結果は相変わらず。superblockのデータは環境が変わったから見えなくなった、という線を期待していたのだが、そうではなく、本当に消えてしまったようだ。
まとめ
RAIDが再構成できなかったことについて、いくつかの可能性が考えている。
- 書き込んだと思っていたsuperblockが書き込まれていなかった
- superblockの書き込みには成功したがHDDの移動時に削除された(してしまった)
とはいえ、これらのHDDはインストール作業が終わってから移動したので、インストーラーは絡んでいない。MBRやGPTのパーティションテーブルを変更した記憶もない。mdadm --zero-superblockをこれらのHDDに行った記憶もない。疑問だらけだ。
前回の教訓から、大事なデータはバックアップを取っており大事には至っていない。とはいえ、こうした現象が起こるということを踏まえて
- RAIDに参加しているHDDの先頭1MB程度はバックアップを取っておいたほうが良いのかもしれない
- もしくはディスク全体をmdadmでRAIDにするのではなく、パーティションを切ってからそのパーティションでRAIDを構築するほうがよかったのではないか
とうっすら思っているが、これで大丈夫だという確証はない。
ともかく、RAIDを再構成するためには、HDDの順番を確認してmdadm -C(--create)で再作成するしかないだろうことが分かった。