Tips: 強力な(?)NTFSのPBR修復法

Last-modified: 2012-05-18 (金) 01:29:28
初出 2007-1-9
最終更新 2010-2-21
grubブートローダの修復法は→ こちら
grubをPBRにインストールにするなら→ こちら
ブートに関する一般的な情報なら→ こちら
Vista, 7のブートに関する少々マニアックな情報なら→ こちら
ddでNTFSをコピーするなら→ こちら←簡単な手法からマニアックなTipsまで(←このページを読めば、例に挙げて悪いですがこの質問者・回答者共にわかってないことがよくわかると思います。)
 

NTFSのPBRにサードパーティのブートローダを誤って書き込んでしまった等、PBRを完全に壊してしまった場合、そのPBR(ブートセクタあるいは先頭のセクタ)を回復コンソールで修復することは出来ません。こんな場合にも対応可能な、強力な(?)NTFSのPBR修復法を紹介します。といっても、難しい方法ではありません。本ページを読めば、多くの方が「そりゃ、その方法なら修復できるだろう」と言いたくなると思います。(修復法 2についての説明)


私はこの修復法を以前から実践していたのですがホームページを開くまで何年も公開していませんでした。その間多分他の人も同じ方法を使っているだろうと思っていました。2005年のこのような例を見るとそうではなかったようです。もっと早く公開すべきだったと思います。

 
 

”MBRの修復”について

このページの内容から連想して「MBRの修復ってどうすんの?」と考える人もいるかと思います。
MBRは簡単に言って「ブートローダ」+「NTシグニチャ」+「パーティションテーブル」です。
狭いMBRの中ですが、それらは重ならずに別々の場所に書き込まれていますので、それぞれを別個の存在とみなすことが出来ます。

 

(2008-6-24追加)※:Googleで「NTFS MBR 修復」、「NTFS MBR 復旧」というキーワード検索が多いようです。
でもMBRはNTFSファイルシステムの内部と関わりを持つことはありません(今から無理やり、関わりを持つように作り直さない限り)。関係性の薄いキーワードの組み合わせと言えます。

MBRのブートローダの修復

  • 勿論、修復が必要となるより以前にインストールされていたものと同じ種類のブートローダを、状態までも同じになるようにインストールし直すことも修復だと言えるわけですが、2段階ブートに統一している場合、この部分にそのPC固有とか、ユーザの設定に依存した情報は何も書き込まれていません。なので、以前に書き込まれていたブートローダと同等か、上位互換の機能を持つブートローダを単純に上書きインストールすることでも修復がおこなえます。MBMというブートローダは高機能なので、2段階ブートに統一している場合は、元々どんなブートローダを使用していたとしても代替のブートローダとして使用できます。ちなみに一つのWindowsだけをインストールしている場合も2段階ブートに統一された状態です。
    (読み返してみて自分の文章ながらかなり問題を感じたので2009-12-18追記および訂正)
    2000年あたり以降は、どのOSを使っていても、どんな使い方をしていようが、この部分にそのPC固有とかそのユーザの設定に依存した情報が書き込まれることはほぼなくなりました。書き込んでいたOSは過去にあるにはありましたが、liloを使用していた時期のLinuxくらいです。grubでもそのような書き込み方は可能ですが、特殊な用途で熟練者がわざとやらない限りは通常はそのような書き込み方にはなりませんので、現在はほぼ皆無と言えます。
    従って、grubをMBRにセットアップしている場合以外は(下で説明しています)(ハードディスクの先頭から440バイトの)この部分のバックアップを取る必要はないと言えます
    とにかくgrubをMBRにセットアップさえしていなければ、どんなOS(Windows, FreeBSD, Solaris, ...)をいくつインストールしていようが、この部分はMBM等で上書きすれば、壊れていても必ず直ります(←直るといってもMBRのブートローダについてだけですよ)。MBMをインストールするとマルチブートする必要がない場合でもメニューが出てしまいますが、マルチブートする必要がなくてもまずはこの方が好ましいと思います。MBMはアクティブフラグを修正できるので、もしアクティブフラグがずれていてもそれを修正してOSをブートできるからです。OSの無事なブートを確認した後に、マルチブートはしないのでメニューが邪魔と思うなら、Windows上でMBRのブートローダを再インストールしたり、こんな手段で互換ブートローダをインストールして、MBMを上書きしてしまえばいいんです。もちろんたとえその時点では必要なくてもMBMを残してもいいと思います。後で新たにOSを追加した際に役立ちます。残す場合は[F3]キーでMBMに自動起動の設定をおこなっておけばいいでしょう。

    MBRにgrubをセットアップしている場合は、(ハードディスクの先頭から440バイトの)この部分に書き込まれたプログラムと、論理第一トラックのMBRより後ろの部分に書き込まれたプログラムは一つのセットを構成していて、さらに論理第一トラックのMBRより後ろの部分にはユーザ設定の情報も書き込まれていますので、(ハードディスクの先頭から440バイトの)この部分を無条件に何かで上書きしていいとはとても言えません。上書きしてしまった場合にgrubを元の状態のように修復するにはある程度の知識や技術が必要になります。
    てことで、あらためて「grubをMBRにセットアップすること(≒grubを1段階ブート方式で使用すること)がいかに罪つくりなことか、センスの悪い手法であるか」を痛感します。(なんかいつのまにか3年前にこのページに書いたことと重なってしまいました。そのうち整理しないといけないかもしれません。)
  • grubによる1段階ブートを使用していた場合もこんな作業で修復がおこなえます。余談的になりますが、grubによる1段階ブートの場合でもstage1.5を使用している場合は先頭セクタ内にユーザの設定に依存した情報は保存されていませんので、そこが壊れているだけならgrubコマンドを使わずにgrubを修復することも可能です。←(2009-12-18追記)イメージ形式でバックアップ・レストアすれば可能な場合もあるという意味。
  • MBMは、WindowsがインストールするMicrosoft謹製のMBR用ブートローダやgrubのchainloader機能の上位互換となる高機能なブートローダです。
  • (2008-7-6追記)MBRのブートローダは(どのOSがインストールするものでも)MBRの先頭から437バイトまでに格納されています。そしてWindowsがインストールするMBRのブートローダにはユーザ固有のデータは何も書き込まれていなくて、Windowsのバージョンが同じならどのPCのものでも同じです。なので、Windows謹製のMBRのブートローダが壊れた場合は、他のPCの同種のOSのMBRのブートローダがインストールされたハードディスクの先頭から「# dd if=/dev/sda bs=1 count=437 of=hogefile」みたいなコマンドでファイルに抜き出したものを持ってきて上書きすることでも修復がおこなえます。マルチブートとかデュアルブートをおこなわないのであれば、この方法でも十分です。私も以前から、レスキューCDに、事前に入手しておいたこのようなファイルを収めてあります。(2009-3-15追記)一部のLinuxにあるinstall-mbrコマンドを使ったり、ここの方法をおこなっても、ほぼ同じ効果が得られます。どの方法を使ったか通常見分けることが出来ないくらいです。←(2009-12-26追記)これは「7 MBR 修復 OR 復旧」,「Vista MBR 修復 OR 復旧」,「XP MBR 修復 OR 復旧」に対する一つの回答です。

パーティションテーブルの修復

  • パーティションテーブルはまさしく全面的にユーザの設定に依存した情報ですから、上の「ブートローダの修復」のような簡単な作業では済みません。バックアップを取っていなければ、修復する為には広大なハードディスクの表面を詳細に調べて、パーティションの先頭や末尾"らしい"個所を探索するという大変地道で時間のかかる作業が必要になります。こちらを読んでみて下さい。←自家製ツールがダウンロードできます。

NTFSシグニチャの修復

  • 「NTSシグニチャの修復」といった言葉はあまり聞きませんが、先にこのような作業をおこなっておけば可能です。ただし普通よくおこなれるのはNTシグニチャのクリアです。と、書きましたが、実を言うと私自身は「NTSシグニチャの修復」をよくおこないます。←でも真似をして欲しくありません。その説明はこちら
    (2009-12-9追記)「Vistaより前のWindows OS」と「Vista以降のWindows OS」では「NTシグニチャがクリアされた状態」に対する振る舞いが異なります。「Vistaより前のOS」では起動時に自動的な対応がおこなわれますが、「Vista以降のOS」では都度「スタートアップ(環境の)修復」をおこなわなければ起動できなくなってしまいました。(2009-12-15追記)詳しくはこちら是非お読み下さい。

(いきなり補足事項)PBR修復のPBR修復以外の効用

このページの修復法(実際に経験したのは修復法 2)はPBRだけを壊してしまった場合以外にも役に立つことがあります。

誤ってメーカーPCのレストアCD(DVD)でパーティションのフォーマットを開始してしまった場合、条件によっては、この修復法を使えば元のデータを”より多く”復元できたりします。

実際に有効なケースは限られると思います。具体的に役立ったケースを挙げます。

  1. SonyのレストアCDでCドライブのレストアを開始した。自動でおこなわれるフォーマットの途中でまだバックアップしていないデータがあることに気づき、慌ててレストア作業を中止した。
  2. この状態で「FINAL DATA2006 特別復元+抹消Pro版」の高度な復元のファイル->開く->ドライブ選択で当該ドライブを開こうとしたが、当該パーテョションはフォーマットが中途半端におこなわれた不正な状態である為、開くことができない。
  3. クイックフォーマットをおこなってから2の作業を再度おこなうとドライブを開くことが出来たが、復元作業をおこなっても、全てのファイルが削除済みのファイルとして扱われ、ファイル名の情報が全部消えてしまった。

という状況だったのですが、実際には復元作業の前にパーテョション全体のバックアップを取得してありました。
本ページの修復法をおこなってから再度「FINAL DATA2006 特別復元+抹消Pro版」で復元作業をおこなうと、今度は日本語を含むファイル名も正しく復元されました。幸いなことにレストアを中止したのはフォーマット処理の本当に開始直後だったらしく、パーティション内の(ぱっと見た感じで)全てのファイルを正しく復元することができました。(本当は最初から本ページの修復法を使って復元し、その後にこの記事を書くために失敗例を試しました。)

まあこれはかなりレアケースだと思いますが、どうせ当サイトはニッチなネタばかりを扱うサイトですし、PBRだけを壊してしまった場合より、発生頻度が高いかもしれないので冒頭に記述しました。

NTFS以外のPBR修復について

PBRの修復はNTFSとFATの場合に特に重要です。なぜならこれらファイルシステムはファイルシステムのメタデータをPBRに書き込んであるからです。

Linux標準のext3なんかの場合はそもそもPBR(というかパーティションの先頭セクタ)はファイルシステムの仕様上は使用しないセクタです。PBRはブートローダを書き込む場所として使われることもありますが、ファイルシステムのメタデータが書き込まれることはないので、NTFSと同様な意味でのext3のPBR修復という概念はありません。

FATのPBR修復は以前から普通におこなわれていることなので本ページでは取り上げません。

NTFSのPBR修復法 1 (まず試みるべき法)

当初、ブートパーティションのみに適用可能と記していましたがデータ専用のパーティションでも使用できることがわかり、2008-2-1に修正しました。
[tip](この方法は2008-1-12に追加しました)
下の2の方法は最も強力な修復法ですが、バックアップ用のストレージ容量や作業時間が必要です。まず、この1の方法を試み、駄目だった場合のみ、2の方法を試みるようにして下さい。

 

この方法はシェルスクリプトで処理しますので、具体的な方法は当サイトのシェルスクリプトのページに載せています。
NTFSのPBR(ブートセクタ)の修復法

 

この方法は2の方法に比べて処理速度が圧倒的に早いです。またLinuxやOne CD Linux等の上だけで全ての処理がおこなえるので、Windowsが起動しない状態の復旧にも適しています。

NTFSのPBR修復法 2 (時間がかかるが、適用範囲が広く、最も強力な方法)

まず上の修復法1を試みて駄目だった場合のみ、この2の方法を試みて下さい。この方法をおこなう為には一旦バックアップするためのストレージと、容量に応じた処理時間が必要です。

 

ここではPBR(ブートセクタ)が壊れたパーティションのデバイスを/dev/sda1だと仮定します。適宜、読み替えて下さい。

1.修復したいパーティションのバックアップをイメージ形式で取得する

※バックアップの方法は他のページで紹介している内容と一部重複しています。

  • ローカルでバックアップするなら、
    # dd if=/dev/sda1 of=/savedir/client-name-sda1.img
    とか
    # dd if=/dev/sda1|gzip > /savedir/client-name-sda1.img.gz
    等の方法で
  • ネットワーク越しなら、
    # dd if=/dev/sda1 | ssh server-user@file-server \
    "dd of=/savedir/client-name-sda1.img"
    等の方法で

2.修復したいパーティションをクイックフォーマットする

正しいPBR(ブートセクタ)を入手する為に該当パーティションをクイックフォーマットします。
全体のフォーマットをおこなっても無駄なのでクイックフォーマットします。
(2010-2-21追記)OSによってはNTFSのバージョンが違うので、この作業は修復したいパーティションを元々フォーマットしたOSと同じバージョンのOSでおこなって下さい。つまりXPのパーティションを修復したい場合はXP(もしくはベースがXPのPE)でクイックフォーマットして下さい。

 

NTFSのフォーマットはGNUのツールではおこなえません。以下の方法等でおこなって下さい。

  • 当該マシンに他にインストールされたWindowsがあるならそれを使っておこなう
  • BartPEでおこなう
  • 当該ハードディスクを他のPCに取り付けておこなう

3.バックアップ・イメージをレストアする

バックアップしておいたイメージを元のパーティションにレストアします。但し、上述のバックアップ法では、元のバックアップイメージの先頭には壊れたPBRが含まれているので、それを除いてレストアしなければなりません。

 
# dd if=/savedir/client-name-sda1.img of=/dev/sda1 bs=512 skip=1 seek=1

とか

# gzip -dc /savedir/client-name-sda1.img.gz | dd of=/dev/sda1 bs=512 skip=1 seek=1

等の方法でおこなって下さい。bs=512は普通、デフォルトなので省略することも可能な筈です。

 

サイト内関連ページ:NTFSパーティションのネットワーク越しのバックアップ
サイト内関連リンク:Windowsを同一ハードディスク上にコピーしてマルチブートを実現する方法

(おまけ)PBR操作の例

システムパーティション・コピー(複製)手順

(2009-7-23追記)もっと詳しい内容がありますので、詳しい情報を知りたい方はそちらをご利用ください。
サイト内リンク:Windowsを同一ハードディスク上にコピーしてマルチブートを実現する方法

 

ここに掲載の手順はWindows XP以前を対象とした古い内容です。
※Windows システム・パーティションのコピー(複製)の方法は他にもあります。

 

関連ページ:ハードディスク操作のまとめ
で紹介したように、2つのパーティションを完全に同じ大きさで確保しているとします。

デバイス Boot      Start         End      Blocks   Id  System
/dev/sda1 *             2         610     4891792+   7  HPFS/NTFS
/dev/sda2             611        1219     4891792+   7  HPFS/NTFS
 

/dev/sda1にWindows XPとか2Kを普通にインストールして、運用しているとします。

  • 手順1./dev/sda1を/dev/sda2にコピー
    # dd if=/dev/sda1 of=/dev/sda2
    ここだけを読んで、こんなことが普通に可能だと誤解しないで下さい。上から読めばわかると思いますが、あくまでこのページに書いてある手法を実践していた場合の話です。
 
  • 手順2.回復コンソールでFIXBOOTコマンドを実行する
    > FIXBOOT D: ←この時点で/dev/sda2がアクティブでなければ、何らかの引数が必要な筈です
     
  • 手順3.boot.iniを修正する
    /dev/sda1のWindowsを使って、/dev/sda2のboot.iniを修正します。
     
  • 手順4.NTシグニチャをクリアする(NTシグニチャのバックアップはこちら)
    (2008-12-30)専用のスクリプトを公開しました。
    # dd if=/dev/zero of=/dev/sda bs=1 seek=440 count=4 ←ミスタイプすると惨事です
    # ms-sys -z /dev/sda
    や、
    DOSの起動ディスクで、
    A:?>FDISK /MBR
    等の手法でNTシグニチャのクリアをおこなって下さい。
    MBM0.384の区画エディタでもおこなえます。
     
  • 手順5.マルチブート用のブートローダをインストール
    ブートローダの選択については、このページをどうぞ
     

作業手順は厳密に言いますとかなり自由で、最低守らなければならない順番は、手順2と3がが手順1の後、手順4が手順2の後ということだけです。

 

以上の作業でWindowsのマルチブート環境が完成した筈です。ブートローダの機能によって/dev/sda2をアクティブにして/dev/sda2をブートすると、/dev/sda2にコピーされたWindowsが起動する筈です。

 

同様に/dev/sda3や/dev/sda4にコピーすることもできます。それぞれのWindows環境はシステムドライブのパーティション位置が異なるだけで、他は殆ど何から何まで同じです。どれを起動してもシステムドライブはC:になります。Windowsのソフトウェア開発者にとっては開発環境をコピーできるということで便利という意見もあるでしょうが、VMWareが無料になった現在ではあまり価値はないかもしれません。

 

ご要望、ご意見、質問を下のフォームにどうぞ
(でもここより、掲示板書き込みフォームのページに書いて頂いた方が気づき易いと思います。)

  • ここの情報でデータ復旧できました。一時はどうしようかと真剣に悩みました。本当にありがとうございました。作者様に幸ある事をお祈りします。 -- TA? 2008-01-14 (月) 18:54:38
  • 「NTFSのPBR修復法 1 (まず試みるべき法)」こちら試させていただいたところ、HDDが復活しました。本当に助かりました。ありがとうございました。 -- hir? 2009-01-09 (金) 00:00:30
  • クイックフォーマットすると正しいPBRが得られるのはどのような仕組みからなのでしょうか? -- IT? 2012-05-17 (木) 11:26:57
  • 全ファイルを瞬時に削除するだけなら(純粋なクイックフォーマットなら)PBRを再作成する必然性はないんですが、親切なことに、マイクロソフトさんは、クイックフォーマット時にPBRを再作成する仕様を盛り込んでくれているわけです。どうせ一瞬で済むので「やった方が親切だね」と考えてるのでしょう。 -- disklessfun? 2012-05-18 (金) 01:29:27