このページを見ているということは、HDDのMFTが壊れて困っているのだと思います。
結論から言うと、「大丈夫です。50%ぐらいの確率で治ります」
なんで50%かというと、MFTの壊れ方によっては修復できないことがあるからです。
多くの場合はMFTの順番が狂ってしまったり、軽度のデータ損傷が起きてしまっているだけなので、
治る可能性があります。
MFT修復に入る前に・・・・
一応の確認ですが、まだchkdskやデータ救出ソフト等を試していないかたは、まず試してみてください。
@chkdskのやり方
コマンドプロントを右クリック→「管理者として実行」で起動(Win7等の場合はこれで起動しないとうまくいかない)
chkdsk h: /f (ドライブがhの場合)でchkdskを実行出来ます。
MFTが損傷している場合は、ファイルシステムが認識できなかったりしてうまくいきません。
Aデータ救出ソフト
ファイナルデータなどの無料体験版を使ってデータ救出ができるかどうか試してみてください。
MFTが損傷している場合は、断片化しているファイルが復元できなかったり、ファイル名やフォルダ階層が復元
できなかったりします。
私は全データの救出(ファイル名フォルダ階層含む)を望んでいたため、ソフトでの救出は諦めました。
※重要
絶対に失ったら困るデータの場合は業者に頼む事を考えてください。(上記のchkdskもやらない方がいい)
あくまでも、「最悪の場合データを失っても構わない」という方のみ、自己責任でこれから紹介する修復方法を試してください。
MFTの修復にはリスクが伴いますので、最悪の場合、損傷が悪化して業者でも直せなくなってしまいます。
HDDクローンを作っておくのもひとつの手です。(万が一の場合でも復元できる)
私の場合は、一年かけて諦めの境地に達したのちにクローンを作らずに修復を実行しました。
(クローンをつくるのは時間がかかるのと、容量が大きいHDDを用意しなければならないので・・・)
あと、ここで紹介するのはパーティションを区切っていないHDDの場合の例です。
パーティションを切っている場合は、セクタ番号やその数え方などが変わってくることがあるので、
自分の環境に合わせて考えて下さい。
MFTの修復@:環境を整える
まず、どこでもいいので「MFT」という名前のフォルダを作ってください。
そして、その中に、「Disk Probe」「ScreenShot」「壊れたMFT」「書き込み用MFT」というフォルダを作ります。
内容
Disk Probe:MFT修復ソフトのDisk Probeを入れます
ScreenShot:セクターデータをスクリーンショットで保存していきます。
壊れたMFT:壊れたMFTのセクターデータを保存します。
書き込み用MFT:壊れたMFTを修復した書き込み用のMFTを保存します。
次に、MFTの修復に必要なソフト:Disk Probeを用意します。
Windows XP Service Pack 2 サポート ツール
Disk ProbeはWindowsXPなどに入っていたソフトでHDDをセクタ単位で読み書きできます。
Windows7などには入っていないので上のリンクよりダウンロードして下さい。
ダウンロードしたものを解凍すると、「support.cab」というファイルが有るはずなので、それをさらに解凍します。
「dskprobe.cnt」「dskprobe.exe」「dskprobe.hlp」「dskprtrb.doc」の4つのファイルを先ほど作ったDisk Probeフォルダ
に入れます。
これで下準備は完了です。
MFTの修復A:MFTを観察する
さっそくDisk Probeを起動します。
メニューから「Drives」→「Logical Volume」を開きます。
ドライブをダブルクリック(私の場合はIドライブ)→「Set Active」→「OK」
Read Onlyのチェックはつけたままにしておいて下さい。
メニューから「Sectors」→「Read」で以下の画面が現れます。
Starting Sectorは読み込むセクターの先頭番号
Number of SectorsはStarting Sectorからいくつ目までのセクターを読み込むか を表します。
Starting Sectorは0、Number of Sectorsは1の状態でReadをクリック
すると、セクタ0(MBR)が読み込まれます。
メニューから「View」→「NTFS BootSector」で以下の画面が現れます。
「Clusters to MFT」の横の「Go」をクリック
つづいて、上のメニューから「View」→「Bytes」をクリック
これでMFTの1セクタ目が読み込まれたと思います。
MFTは8セクタあるので、8セクタ分読み込むための操作をします。
メニューより「Sectors」→「Read」
今度はStarting Sectorのところに6291456と表示されていますね。
これは、私のHDDではセクタ6291456にMFTの1セクタ目があることを意味します。
つまり、セクタ0にMBRがあって、セクタ6291456〜6291463にMFTがあることになります。
このMFT1セクタ目のセクタ番号は重要なので、何かにメモっておいて下さい。
Starting Sectorはそのままに、Number of Sectorsに8を入力して「Read」をクリック
これで全8セクタ分のMFTが読み込まれます。
メニューバーの下に青い矢印があるので、それをクリックして8セクタ分のMFTを見てみて下さい。
↓(例)私のMFT損傷ハードディスク
Sector6291456 | |
Sector6291457 | |
Sector6291458 | |
Sector6291459 | |
Sector6291460 | |
Sector6291461 | |
Sector6291462 | |
Sector6291463 |
そして、セクタごとにスクリーンショットをとって、先ほど作ったScreenShotフォルダに保存して下さい。
保存するときのファイル名はセクタ名(例:Sector6291458.bmp)で保存して下さい。
MFTの修復B:損傷の度合いの確認〜修復方針
先ほど保存したスクリーンショトの画像を見ながら、どこが壊れているのかを確認します。
正常なMFTと比較したいので、予備の正常なHDDがある人はそれのMFTと比べてみて下さい。
予備がないという人は、ここに私のHDDから正常なMFT例を用意したので、これと見比べてみて下さい。
(↑のリンクで正しく画像が表示されないことがあるようなので、ここにzipで用意しました。)
修復方針はケース・バイ・ケースですので、自分のHDDのMFTを見ながら考えて下さい。
正常なMFTでは様々な規則性が見られるため、それをもとに損傷している部分を修復すればOKです。
以下私のMFT損傷ハードディスクの修復方針について書きます。
正常なMFTでは@$MFTA$MFT続き B$MFTMirrC$MFTMirr続き D$LogFileE$LogFile続き F$VolumeG$Volume続き
の8セクタで構成されています。
私の場合は、
@壊れた$Volume A$MFTB$MFT続き C$MFTMirrD$MFTMirr続き E$LogFileF$LogFile続き G$Volume
となっていて$Volume続きはなくなっていました。
順番を正しく並び替える&修復する必要があります。
@壊れた$Volumeについては、0000〜0030にかけて完全に破損している。
正常ではFILE0から始まるが、USBCなる文字列から始まっていて損傷は明らか。
この領域は正常なものでは規則性が見られるため修復も可能だが、Gに正常な$Volumeがあるので修復する必要なし。
Aの$MFTについては0170〜01C0にかけて損傷らしきものが見られる。
この領域については規則性が見られず修復が困難なため、手を付けなかった。
$Volume続きについてはなくなっていたので、規則性を見ながら復元する必要がある。
$Volume続きは正常なMFTではほとんど0で01F0に少しだけ規則性が見られる。
よって0で埋め尽くしたデータの01F0の最後から2番目を、$Volumeと同じD9に書きなおしたものを
$Volume続きとして書き込むことにした。
↓こんなかんじのデータを書き込む予定
まとめると、$MFT、$MFT続き、$MFTMirr、$MFTMirr続き、$LogFile、$LogFile続き、$Volumeの順番に並び替えて
最後に$Volume続きを追加することで修復することとした。
MFTの修復C:壊れたMFTの保存
Disk Probeを起動します。まだ起動したままの方はいったん閉じて開き直して下さい。
「Drives」→「Logical Volume」→ドライブをダブルクリック→「Set Active」→「OK」
でドライブを選択して下さい。(Read Onlyのチェックはつけたまま)
次に、「Sectors」→「Read」でRead Sectorsを開きます。
ここでStarting Sectorに以前メモったMFT1セクタ目のセクタ番号を入力(私の場合は6291456)
Number of Sectorsは1にしてReadをクリックします。
これでMFT1セクタ目が読み込まれたと思います。先ほどのスクリーンショットと見比べて
MFT1セクタ目が読み込まれていることを確認して下さい。
(もし、ここで違うセクタが読み込まれている場合は、セクタの数え方などがずれている可能性があるので
原因がわかるまで先に進まないで下さい。)
あとは保存するだけです。
「File」→「Save as」でセクタを以前作った壊れたMFTフォルダに保存して下さい。
(ファイル名はセクタ番号で保存します。例:Sector6291456.dsk)
次にMFTの2セクタ目を保存していきます。
「Sectors」→「Read」、Starting SectorにMFT1セクタ目のセクタ番号+1を入力(私の場合は6291457)
Number of Sectorsは1にしてReadをクリック
「File」→「Save as」で保存。(例:Sector6291457.dsk)
この要領でMFT8セクタ分保存して下さい。
全部保存し終わったら、きちんと保存されたか確認して下さい←重要
「File」→「Open File」で保存したものを開けるので、スクリーンショットと見比べて確認します。
MFTの修復D:書き込み用MFTの用意
保存した壊れたMFTをそれぞれの修復方針に従って修復・並び替えるなどして、書き込み用MFTフォルダに保存して下さい。
ファイル名は書き込む予定のセクタ番号で保存します。(例:Sector6291457.dsk)
私の場合は、
@壊れた$Volume A$MFTB$MFT続き C$MFTMirrD$MFTMirr続き E$LogFileF$LogFile続き G$Volume
となっていて$Volume続きはなくなってたので、
$MFT、$MFT続き、$MFTMirr、$MFTMirr続き、$LogFile、$LogFile続き、$Volumeの順番に並び替えて
最後に$Volume続きを追加することで修復します。
よって、
壊れたMFTフォルダのSector6291456(壊れた$Volume)→使わない
壊れたMFTフォルダのSector6291457($MFT)→Sector6291456にリネームして書き込み用MFTフォルダに保存
壊れたMFTフォルダのSector6291458($MFT続き)→Sector6291457にリネームして書き込み用MFTフォルダに保存
壊れたMFTフォルダのSector6291459($MFTMirr)→Sector6291458にリネームして書き込み用MFTフォルダに保存
壊れたMFTフォルダのSector6291460($MFTMirr続き)→Sector6291459にリネームして書き込み用MFTフォルダに保存
壊れたMFTフォルダのSector6291461($LogFile)→Sector6291460にリネームして書き込み用MFTフォルダに保存
壊れたMFTフォルダのSector6291462($LogFile続き)→Sector6291461にリネームして書き込み用MFTフォルダに保存
壊れたMFTフォルダのSector6291463($Volume)→Sector6291462にリネームして書き込み用MFTフォルダに保存
0で埋め尽くしたデータの01F0の最後から2番目をD9に書きなおしたもの→Sector6291463で書き込み用MFTフォルダに保存
これで書き込み用MFT8セクタ分のデータが揃いました。
全部保存し終わったら、「File」→「Open File」で開いてきちんと保存されたか確認して下さい←重要
MFTの修復E:MFTへの書き込み
ここから先は後戻りできません。修復できる自信のない方は何もせず、業者に頼む事も考えてください
覚悟がある方のみお進み下さい。
Disk Probeを起動します。まだ起動したままの方はいったん閉じて開き直して下さい。
「Drives」→「Logical Volume」→ドライブをダブルクリック→「Set Active」→Read Onlyのチェックをはずす→「OK」
でドライブを選択して下さい。
まず、MFT1セクタ目を書き込みます。
その前に書き込み先のセクタ(私の場合はセクタ6291456)を確認してみましょう。
「Read Sectors」のStarting SectorにMFT1セクタ目のセクタ番号(私の場合は6291456)、Number of Sectorsに1を入力して「Read」
書き込み先が合っていることを確認します。
次に「File」→「Open File」で書き込み用MFTフォルダからMFT1セクタ目のものを読み込みます。(私の場合はSector6291456.dsk)
「Sectors」→「Write」でWrite Sectorが現れるので、
Starting sector to write dataに書き込み先のセクタ番号を入力(私の場合は6291456)、そして「Write it」をクリックします。
警告画面が出るので「はい」をクリック
これでMFT1セクタ目が書き換わりました。
一度チェックしてみましょう。
Disk Probeを再起動して「Drives」→「Logical Volume」→ドライブをダブルクリック→「Set Active」→「OK」
「Sectors」→「Read」→Starting Sectorは0、Number of Sectorsは1の状態でReadをクリック
「View」→「NTFS BootSector」→「Clusters to MFT」の横の「Go」をクリック
つづいて、上のメニューから「View」→「Bytes」をクリック
これでMFT1セクタ目が表示されたはずです。
正しく書き換わっていたら、書き込み成功です。
うまくいった場合は、MFT2セクタ目も書き込んでいきます。
Disk Probeを再起動。
「Drives」→「Logical Volume」→ドライブをダブルクリック→「Set Active」→Read Onlyのチェックをはずす→「OK」
「File」→「Open File」で書き込み用MFTフォルダからMFT2セクタ目のものを読み込みます。(私の場合はSector6291457.dsk)
「Sectors」→「Write」
Starting sector to write dataに書き込み先のセクタ番号を入力(私の場合は6291457)、そして「Write it」をクリック。
この要領で3セクタ目以降も書き込んでいき、MFT全8セクタ分書き込みます。
MFTの修復F:CHKDSK
最後にchkdskを実行して完了です。
コマンドプロントを右クリック→「管理者として実行」で起動(Win7等の場合はこれで起動しないとうまくいかない)
chkdsk h: /f (ドライブがhの場合)でchkdskを実行。
MFTの修復に成功した場合は、chkdskコマンドがきちんととおります。
※重要
chkdskはファイルシステムを直すためもので、ファイルを直すものではありません。
そのため、chkdskによってファイルがなくなってしまうこともあるので注意が必要です。
chkdskを行わなくてもHDDを認識しているのであれば、chkdskする前にデータを避難させるのがお勧めです。
万が一chkdskでファイルが消えてしまった場合でも、「found.000」というような名前の隠しフォルダが作成されて、
その中にファイルの断片が格納されていることがあるので、そこから復元することも場合によってはできます。
(全てが格納されるわけではないみたいで、ファイルが完全に消えててしまうことも多々あります。)
私の場合、$MFTがやはり破損していたものの、$MFTMirrをもとにchkdskが直してくれました。
結果として、ファイルシステムは正常に戻り、クラッシュしていた1ファイルを除くすべてのファイルの救出に成功しました。
最後に
おそらく、MFTが壊れてしまったという方のほとんどが外付けハードディスクを使っていると思います。
実は外付けHDDは内蔵のものよりも複雑な仕組みで動いていて壊れやすいのです。
特に、USB変換チップの出来に左右されやすく、すぐにMFTが壊れてしまうものもあります。
(私が今回解説に使ったものはMFT故障をたった数ヶ月で3回も起こしてます。このメーカーはダメですね。)
MFTを壊さないコツは、USBケーブルを引き抜くときは所定の手順を踏むことです。
(「ハードウェアを安全に取り外してメディアを取り出す」で取り出すメディアを選択)
知らないプログラムが外付けHDDを使用していて取りはずせない場合は、PCをシャットダウンして取り外して下さい。
ただし、所定の手順を踏んでいても壊れる時は壊れます。
外付けハードディスクを購入する際のメーカー選びは非常に大切です。
この時重要なのは殻の方のメーカーです。(USB変換チップが含まれる)
中身のHDD本体のメーカーは、最近のものはどこのメーカーも壊れやすさに差はないように思います。
私おすすめのメーカーはBUFFALOやTranscendです。
BUFFALOに至っては約10年前に買ったものは、一度もこれといった故障を経験していません。
(所定の手順を踏まずにUSBを引っこ抜いたことが1000回以上あるが故障なしです。この時はXP環境だったからかもしれませんが・・)
TranscendのStoreJet 25Mについては2個持ってますが、どちらもMFT故障は起こしたことがないです。
また、メーカーによって壊れやすさは変わるとはいえ、どのメーカーでも運が悪けりゃ壊れます。
結局は、バックアップをとることが最善です。
外付けハードディスクは特に壊れやすいので、別の外付けハードディスクにバックアップをとっておくのがおすすめです。