[PR]

[PR]



このページは、(業者に頼らず)自分でデータを復旧しようとするチャレンジャーの為に作成しました。
復旧天使などの有料ソフトも使いません。


はじめに

このページでは、IOデータ製NASドライブのHDL-GTシリーズにおいて、RAID崩壊モードになった場合の、データ救済方法について記載する。
まず、以下にこのモデル(以下、HDLと記載)の特徴を公式HPから転載する。

「LAN DISK Tera」はRAID 5によるデータ保護機能を備えたNASLAN接続型ハードディスク)製品です。
カートリッジ式のハードディスクを採用し、ホットスワップにも対応。万が一の障害発生時もシステムを停止することなく障害ハードディスクを交換することが可能。
更に、外付けeSATAハードディスクへのミラーリング機能も搭載し、保存したデータを障害から守ります。

このページで扱うRAID崩壊のケースについて

こちらの環境でRAID崩壊が発生したケースは、「RAID5運用中に1台のHDが故障した状態で、電源を切った」場合である。(下図)

RAID崩壊発生の順序.png

上記の製品概要の文章では、「ホットスワップにも対応」という書き方をしている事から、コールドスワップ*1でも良いような印象を持つが、取扱説明書にはホットスワップの方法しか記載が無い。コールドスワップは本当に非対応かもしれない。
そして、ひとたびRAID崩壊モードに陥れば、通常の方法ではデータ復旧は不可能となる。

HDL−GTシリーズのドライブ構成

HDLは、システムとユーザーが保存するデータが共にHDDに保存されている。
そこで、システムやユーザーデータがどのように保存されているのかをここでざっくりと説明しておく。
まず、HDDは複数のボリュームにパーティショニングされている。システムは4台のHDDにRAID1(ミラーリング)で保存されている。ユーザーデータは、システムとは異なるボリュームに保存されている。
各HDDのボリュームの構成は以下の表のとおりとなっている。特に、ユーザーデータに用いられるmd13は複雑で、RAIDの入れ子構造になっている。これは、外付けディスクのバックアップに対応するためである。

表 HDDのパーティション構成

ボリューム1ボリューム2ボリューム3ボリューム4ボリューム5ボリューム6
ドライブ1
/dev/sda
デバイス番号sda1sda2sda3sda4sda5sda6
フォーマットRAID1(md1)RAID1(md2)swap拡張領域RAID1(md5)RAID5(md10)
ドライブ2, 3, 4
/dev/sdb, sdc, sdd
ドライブ1と同じ構成

表 HDLのRAID構成

ボリュームフォーマットマウント先RAID構成
/dev/md1ext2/bootRAID1(sda1,sdb1,sdc1,sdd1)
/dev/md2ext3/RAID1(sda2,sdb2,sdc2,sdd2)
/dev/md5ext3/mnt/hda5RAID1(sda5,sdb5,sdc5,sdd5)
/dev/md10RAID1アレイmd13RAID1(sda6,sdb6,sdc6,sdd6)
/dev/md13xfs/mnt/sataraid1RAID1(md10,外付けドライブ)

救済に必要なツールの準備

すでにHDLをハッキングし、telnetを有効化していれば、telnetでログインすることでデータ救済が可能だが、telnetを有効化していない場合はHDLをコマンドラインで操作する方法は無い。
そこで、ドライブをすべて取り出し、別のPCに接続することでRAID崩壊したディスクから大切なデータを救済する。
必要なツールは以下の通り

  1. 救済用PC(SATA端子5つ以上あるWindowsPC、ノートPCはSATA端子が少ないためNG)
  2. 接続用SATAケーブル×4本
  3. KNOPPIX CD(説明)
  4. 救済用HD(ユーザーデータの容量と同等以上の容量のHDが必要。例:1TBx4HDでRAID5構成の場合3TBのHDを準備)

PCへの接続

PCに接続されていたHDDは作業が終了するまで取り外す。
ここでは、RAID5運用していたHDLのドライブ2が故障し、RAID崩壊に陥った場合を想定する。図の様に故障ドライブ以外のNASドライブと救済用HDをPCに接続する。もしドライブ3が故障した場合は、図のドライブ2とドライブ3で救済用HDの接続位置が入れ替わる。
救済用PCのSATA端子が4個しか無い場合、USB光学ドライブがあれば構成可能*2

PCへの接続図.png

RAIDアレイのデバイス番号を確認

PC本体の構成が完了したら、KNOPPIXを起動する。
以下、GUIは使わないので、ターミナルを起動し、rootユーザーになる。

$su -

接続したドライブがどのデバイスに割り当てられているか、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
    Array Size : 2923628928 (2788.19 GiB 2993.80 GB)
  Used Dev Size : 974542976 (929.40 GiB 997.93 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          6        0      active sync   /dev/sda1
   1     1       0         0        1      removed
   2     2       8       38        2      active sync   /dev/sdc1
   3     3       8       54        3      active sync   /dev/sdd1

ここで、コマンドで指定したデバイスとコマンド結果のthisの行のデバイスが一致していれば問題ない。一致していない場合は、PCの接続が間違っている可能性がある。そのまま修復作業を続けても良いが、一致させて置いた方がベター。
他のデバイスも同様に、mdadmで確認する。

RAID崩壊モードからの復旧

デバイス確認が終わったところで、ユーザーデータが入っているRAIDドライブの復旧作業に入る。
RAID崩壊モードからの復旧とは即ち、故障アレイ以外のアレイで同期をとる事である。

#mdadm -A --run --force /dev/md10 /dev/sda6 /dev/sdc6 /dev/sdd6

オプションの-Aは--assembleと同じで、既存のRAIDアレイを構築することを指示している。
また、元のRAIDに対してデバイス数が足りない場合でも強制的にアクティブにするために--runと--forceをつけている。
ここで、もしmd10が見つからないというエラーが出た場合は、以下のコマンドでブロックデバイスmd10を作る。

#mknod /dev/md10 b 9 10

それから、先ほどのコマンドを実行する。
md10のステータスを確認する。以下のコマンドでactiveとなっていれば、RAID5が動作している。

#cat /proc/mdstat
md10 : active raid5 sdd6[2] sdc6[1] sda6[0]
      1234567 blocks  level 5, 64k chunk, algorithm 2 [4/3] [U_UU]

これでRAID5のデバイスは同期がとれてRAID縮退モード(degraded mode デグレーデッドモード)で運転が開始した。
ここまでで、RAID5のRAID崩壊は回復している。
もし、同期をとる最中の場合は、recoveryと表示されるので、同期が完了するまで待っておく。

#cat /proc/mdstat
md10 : active raid5 sdd6[2] sdc6[1] sda6[0]
      1234567 blocks  level 5, 64k chunk, algorithm 2 [4/3] [U_UU]
     [>>>>>>>>>>>..........]  recovery =  50% (12345/1234567) finish=99.9min speed=12345K/sec

RAIDドライブのマウント

次に、md13を作成する。先ほどと同じ要領で、強制的にアクティブにする。

#mdadm -A --run /dev/md13 /dev/md10

そして、md13をマウントする。

#mount -t xfs /dev/md13 /mnt/sataraid1

注意
メモリのバイトオーダーがxfsファイルシステムで互換性が無いため、HDL(ARM系CPU)と救済用PC(X86系CPU)の組み合わせでは、md13をマウントしてもフォルダ構造を正常に認識できない。ここでは、sataraid1配下にshareが入っているかどうかの確認にとどめておく。

#ls -l /mnt/sataraid1
?????????? ? ? ? ? ? ? ? share
sataraid1にアクセスできません。

上記のようにshareという所をみるだけで確認は終了。

救済用HDのパーティション作成

作成するパーティションのサイズは、md13の全データが入るように、md13以上の容量を確保しておく。 もしまだmd13をactiveにしていなかった場合は以下のコマンドを実行する。

#mdadm -A --run /dev/md13 /dev/md10

md13の容量を確認する。

#fdisk -l /dev/md13
2993.8GB (2993795883008bytes)

上記以上のサイズのパーティションを作成する。上の容量+1049000bytesのパーティションをpartedで生成。

#parted /dev/sdb
(parted) mkpart primary 2048s 299379632008B
(parted) quit

次に、救済用HDにデータをコピーする。

RAID5ドライブからのデータ救済

データ救済はユーザーデータ内のファイルやフォルダを1つ1つコピーするのではなく、RAIDドライブmd13のデータそのものを丸ごと救済用HDにコピーする。ddコマンドを使用する。

 #dd if=/dev/md13 of=/dev/sdb1 ibs=1024k obs=1024k conv=sync

通常のデータ救済では、読み込みブロックサイズをHDDのセクタサイズと同じ512バイトに、conv変数にnoerrorを付加して不良セクタのデータをNULLで埋めるのが定石となっているが、RAID5縮退モードではセクタ単位での読取エラーという事象は無く、いずれかのドライブで異常があれば即停止するだけである。
つまり、noerrorオプション付きでコピー中にRAIDデバイスが停止した場合、それ以後のデータがすべてNULLで代替され、残りのデータは全く救済されていない。

RAID5ドライブのデータ救済中にRAIDが停止した場合

もし、救済中にRAIDが停止した場合、事態はいっそう深刻なものとなる。なぜなら、RAIDアレイのいずれかのドライブが壊れかけているからである。そこで、停止したRAIDアレイのステータスを確認し、異常が発生したドライブを急いで特定する。

#cat /proc/mdstat
md10 : active raid5 sdd6(2) sdc6(1) //sda6が消えている=sdaのドライブが故障

mdstatで停止したドライブを特定できたら、即座にPCをいったんシャットダウンし、故障したドライブ以外のアレイと救済用HDDは誤操作防止のためいったんすべて取り外し、代わりに故障したドライブと同等以上の容量のHDDを準備してPCに接続し、再度KNOPPIXを起動する。

故障したドライブのデータ救済

まず、ルートになる。

#su -

故障ドライブのデバイス番号を確認する。

#fdisk -l /dev/sda
#fdisk -l /dev/sdb

fdiskの結果でパーティションが見えた方が故障ドライブである。ここでは故障ドライブをsdaとして進める。
故障ドライブのデータを新しいHDDに救済する。

#dd if=/dev/sda of=/dev/sdb ibs=512 obs=512 conv=noerror,sync

ddコマンドでのデータ救済では、obs=1024kとしているホームページが多いが、不良セクタ以外のデータを確実にコピーできるようibsとobsは同じ値にしている。処理のスピードもさほど変わらない。
救済が完了したら、RAIDデータのコピー作業を続けるため、PCへの接続からやり直す。ただし、故障したアレイの代わりに新しいHDDを接続する。

関連リンク

mdadm(8) ver.1.5 man page [日本語]
いきあたりばったりのおもいつきめも : NASの情報を見る(参考)
mdadmで壊れたアレイを修復できるか?:ぴろにっき:So-netブログ
チラシの裏にでも書いてろ な!: mdadmでRAID構築(まとめ)
matoさんのぶろぐ mdadmでRAID1を試し組み
Linuxでmdadmを使ったソフトウェアRAIDの構築・管理メモ - nabeの雑記帳


コメント欄

多数のスパム投稿が絶えないため、削除しました。2014/3/6


*1 電源OFF状態での入れ替え
*2 ただし、BIOSがUSBブートに対応している必要がある。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS