はじめに
RAIDはデータ保護としては有効な手段ではありますが、時にトラブルのもとにもなります。今回の記事では、前日まで問題なく動作していたRAID1で動作している外付けHDDが、次の日来てみると動作していなかったというトラブルの調査と解決について書きます。
使用環境
- ソフトウェア環境
- Windows10
- openSUSE Tumbleweed
- ハードウェア環境
- USB-SATAブリッジ〈JMicron 152d:1576〉)
事象の概要
昨日、データのバックアップを行っていたのだが、帰り際にRAIDのリビルドが走っていることに気付いた。長くなりそうなのでそのまま置いて帰ったところ、翌日にはHDDのパーティションテーブルが認識しなくなっていた。
コンピュータの管理で該当のHDDを確認したところ、コンピューターの管理で「未割り当て/RAW」、USB 接続では認識するがアクセス不能となっていた。
この結果から、想定した主原因(GPT ずれ/MFT 破損/物理障害)を抽出し、それぞれ当たりをつけて確認していった。
初期調査
Linuxでの確認
検証用のLinuxサーバーに外付けHDDを接続し、dmesgなどの出力を確認してみた。確認内容は下記の通り。
色々と確認してみると、どうもGPTパーティションがおかしくなっているような感じなので、中身のデータはおそらく無事だろうと一安心した。
チェック項目 | コマンド | 結果 | 判断 |
---|---|---|---|
dmesg | `dmesg | tail` | GPT WARNING のみ |
セクタサイズ | lsblk -o NAME,SIZE,PHY-SeC | 512e / 4 Kn | ブリッジ誤報なし |
SMART | smartctl -a /dev/sdd | Reallocated/Pending = 0 | 物理健全 |
GPT 整合 | sgdisk -v /dev/sdd | Alt header not at end | GPT 末尾ずれ |
試しにバックアップGPTとパーティションテーブルを再配置してみたところ(下記コマンド)、パーティションは正しく認識したが、やっぱりデータは読み込めなかった。
sgdisk -e /dev/sdd
TestDiskのRepair MFTを試してみようとしたが、どうやらTestDisk的には問題ないと認識されるらしく、項目が出てこず断念した。
復旧天使を使用したディープスキャン
結局見当がつかないので、昔購入した復旧天使というソフトウェアを引っ張り出してきて試してみることにした。
このソフトの使い方は直感的で分かりやすいが、下記の画面の補足説明だけ付け加えておこうと思う。

画面での表記 | ざっくり意味 | このケースでの適性 |
---|---|---|
① このファイルシステムをインデックスして未使用領域をスキャン(データ削除時に推奨) | 既存の MFT を読み取り、削除フラグの付いたエントリだけを探す | 今回は MFT が壊れているため 読めずに即終了する可能性大 |
② インデックスしてスキャン (クイックスキャン) | ①より速い簡易解析 | 同上 |
③ ファイルシステムを無視して全領域をスキャン(フォーマット/リカバリー時に推奨) | クラスタ全域をディープスキャンし、失われた MFT を再構築しながらファイルを抽出 | ◎ 最も成功率が高い |
④ メタデータを参考に使用領域のみスキャン | MFT が読める前提で効率化 | MFT が壊れているので不可 |
⑤ 使用領域を除いた全領域をスキャン | ほぼ RAW スキャン専用 | 最終手段向け |
要はこのソフトはMFT(Master File Table)がぶっ壊れていても、HDDの全セクタをスキャンしてMFTを自動生成してくれるというスグレモノということで、非常に重宝するソフトだ。確か値段も大して高くなかったと思うので、一度購入しておくと心強い。

途中で不良セクタを検出して上記のエラーが出るかもしれないが、今回はハードウェア障害では無さそうなので、そのまま進めても問題ないだろう(ハードウェア障害なら進めないほうが良い)。
コラム NTFSのファイルシステム構造

ボリュームレイアウト領域の説明
領域名 | 説明 |
---|---|
Boot Sector | パーティション情報や起動コードが格納されるセクタ |
MFT | すべてのファイル情報が記録されたファイルテーブル |
MFT Mirror | MFTのバックアップ。破損時の復旧用 |
Metadata | $Bitmap, $LogFile などファイルシステム制御に必要な情報群 |
User Data Area | ユーザーのファイルデータが実際に格納される領域 |
MFTエントリ属性の説明
属性名 | 説明 |
---|---|
$STANDARD_INFORMATION | タイムスタンプやファイル属性など基本情報 |
$FILE_NAME | ファイル名と親ディレクトリとの関係を記録 |
$DATA | ファイルの中身そのものを格納 |
$INDEX_ROOT | ディレクトリのルート構造に関する情報 |
$INDEX_ALLOCATION | 大きなディレクトリの場合に使われるインデックス拡張 |
この構造から、MFTが吹っ飛ぶと仮にファイルが無事であっても、ファイルシステム的には何も表示できない理由が分かると思う。
NTFSに限らず、先頭の方のセクタにファイルシステムの構造データを保存するのは、ファイルシステムの一般的な仕様と言える。
おわりに
今回は、何かの拍子で壊れてしまったRAID1の修復作業を行った。今回に限らず、RAID1は案外簡単に壊れる印象なので、RAID1だからといって安心しないでデータのバックアップはしっかりと行っていただきたい。
あと、安価なRAIDチップやソフトウェアRAIDだと破損の確率が上がる気がするので、本気でRAID1を組みたいなら、専用のICを搭載したマザーボードか、後付のRAIDボードをおすすめする。