新しいマザーボードへ移設したRAIDの再構築に失敗した件について

前回のRAID6復旧時に「よりよい筐体を」「eSATAでは速度に難がある」「これを機にCPUも含めて刷新を」という雰囲気に至ったので、毎年末に行っているメンテナンス作業を早めて11月時点で、RAIDを構成しているHDDを新しい筐体やマザーボードへ乗せ換えることとした。

RAIDの再構成ができない

新しい筐体・マザーボードに乗せ換えて、新しいSSDUbuntu 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)で再作成するしかないだろうことが分かった。