このページでは、IOデータ製NASドライブのHDL-GTシリーズにおいて、RAID崩壊モードになった場合の、データ救済方法について記載する。
まず、以下にこのモデル(以下、HDLと記載)の特徴を公式HPから転載する。
「LAN DISK Tera」はRAID 5によるデータ保護機能を備えたNASLAN接続型ハードディスク)製品です。 カートリッジ式のハードディスクを採用し、ホットスワップにも対応。万が一の障害発生時もシステムを停止することなく障害ハードディスクを交換することが可能。 更に、外付けeSATAハードディスクへのミラーリング機能も搭載し、保存したデータを障害から守ります。
最も発生しやすいのは、RAID5運用中に1台のHDが故障した状態で、電源を切った場合である。(下図)
上記の製品概要の文章では、「ホットスワップにも対応」という書き方をしている事から、電源を切って入れ替えても良いような印象を持つが、取扱説明書にはホットスワップの方法しか記載が無い。
そして実際に、自分は障害発生時に電源OFFしてRAID崩壊モードになってしまった。
ひとたびRAID崩壊モードに陥れば、通常の方法ではデータ復旧は不可能となる。
HDLは、システムとユーザーが保存するデータが共にHDDに保存されている。
そこで、システムやユーザーデータがどのように保存されているのかをここでざっくりと説明しておく。
まず、HDDは複数のボリュームにパーティショニングされている。システムは4台のHDDにRAID1(ミラーリング)で保存されている。ユーザーデータは、ユーザーの設定に従い、4台のHDDにシステムとは異なるボリュームに保存されている。
各HDDのボリュームの構成は以下の表のとおりとなっている。特に、ユーザーデータに用いられるmd13は複雑で、RAIDの入れ子構造になっている。これは、外付けディスクのバックアップに対応するためである。
ボリューム1 | ボリューム2 | ボリューム3 | ボリューム4 | ボリューム5 | ボリューム6 | ||
ドライブ1 /dev/sda | デバイス番号 | sda1 | sda2 | sda3 | sda4 | sda5 | sda6 |
フォーマット | RAID1(md1) | RAID1(md2) | swap | 拡張領域 | RAID1(md5) | RAID5(md10) | |
ドライブ2, 3, 4 /dev/sdb, sdc, sdd | ドライブ1と同じ構成 |
ボリューム | フォーマット | マウント先 | RAID構成 |
/dev/md1 | ext2 | /boot | RAID1(sda1,sdb1,sdc1,sdd1) |
/dev/md2 | ext3 | / | RAID1(sda2,sdb2,sdc2,sdd2) |
/dev/md5 | ext3 | /mnt/hda5 | RAID1(sda5,sdb5,sdc5,sdd5) |
/dev/md10 | RAID1アレイ | md13 | RAID1(sda6,sdb6,sdc6,sdd6) |
/dev/md13 | xfs | /mnt/sataraid1 | RAID1(md10,外付けドライブ) |
すでにHDLをハッキングし、telnetを有効化していれば、telnetでログインすることでデータ救済が可能だが、telnetを有効化していない場合はHDLを外部から操作する方法は(web以外)無い。
そこで、ドライブをすべて取り出し、別のPCに接続することでRAID崩壊したディスクから大切なデータを救済する。
必要なツールは以下の通り
PCに接続されていたHDDは作業が終了するまで取り外す。
ここでは、RAID5運用していたHDLのドライブ2が故障し、RAID崩壊に陥った場合を想定する。図の様に故障ドライブ以外のNASドライブと救済用HDをPCに接続する。もしドライブ3が故障した場合は、図のドライブ2とドライブ3で救済用HDの接続位置が入れ替わる。
救済用PCのSATA端子が4個しか無い場合、USB光学ドライブがあれば構成可能。ただし、BIOSがUSBブートに対応している必要がある。
PC本体の構成が完了したら、KNOPPIXを起動する。
以下、GUIは使わないので、ターミナルを起動し、rootユーザーになる。
$su - root
接続したドライブがどのデバイスに割り当てられているか、RAIDアレーのスーパーブロックをmdadmで読み取って確認する。
#mdadm --misc --examine /dev/sda1 <--コマンドで指定したデバイス /dev/sda1: Magic : xxxxxxxx Version : 0.90.xx UUID : 705f919a:8b56e077:93875f94:f8cbfdfd Creation Time : Mon Jan 1 00:00:00 20xx Raid Level : raid5 Used Dev Size : 1234567890 (xxxxx.xx GiB xxxx.xx GB) Array Size : 1234567890 (xxxxx.xx GiB xxxx.xx GB) Raid Devices : 4 Total Devices : 4 Preferred Minor : 0 Update Time : Sun Nov 04 00:00:00 2012 State : clean, degraded Active Devices : 3 Working Devices : 3 Failed Devices : 1 Spare Devices : 0 Checksum : abcdefgh - correct Events : 12345678 Layout : left-symmetric Chunk Size : 256K Number Major Minor RaidDevice State this 0 8 145 0 active sync /dev/sda1 <--一致しているかどうか確認する場所 0 0 8 145 0 active sync /dev/sda1 1 1 8 129 1 removed 2 2 8 33 2 active sync /dev/sdc1 3 3 8 81 3 active sync /dev/sdd1
ここで、コマンドで指定したデバイスとコマンド結果のthisの行のデバイスが一致していれば問題ない。一致していない場合は、PCの接続が間違っている可能性がある。そのまま修復作業を続けても良いが、一致させて置いた方がベター。
他のデバイスも同様に、mdadmで確認する。
確認が終わったところで、ユーザーデータが入っているRAIDドライブのマウント作業に入る。
#mdadm -A --run --force /dev/md10 /dev/sda6 /dev/sdc6 /dev/sdd6
オプションの-Aは--assembleと同じで、既存のRAIDアレーを構築することを指示している。
また、元のRAIDに対してデバイス数が足りない場合でも強制的にアクティブにするために--runと--forceをつけている。&br
ここで、もしmd10が見つからないというエラーが出た場合は、以下のコマンドでブロックデバイスmd10を作る。
#mknod /dev/md10 b 9 10
それから、先ほどのコマンドを実行する。
md10のステータスを確認する。以下のコマンドでactiveとなっていれば、動作している。
#cat /proc/mdstat md10 : active raid5 sdd6[0] sdc6[1] sda6[2] 1234567 blocks level 5, 64k chunk, algorithm 2 [4/3] [U_UU]
これでRAID5のデバイスはRAID縮退モード(degraded mode)で運転が開始した。
次に、md13を作成する。先ほどと同じ要領で、強制的にアクティブにする。
#mdadm -A --run --force /dev/md13 /dev/md10
そして、md13をマウントする。
#mount -t xfs /dev/md13 /mnt/sataraid1