ブートセクタの修復

狭義のブートセクタ

ブートセクタは、パーティションの先頭セクタのことです。
これにはいくつか別称があり、
PBSPBRVBSVBR、とも呼ばれます。※参考: Wikipedia(英語)
というのも、ブートセクタの本来の意味はもっと広く、MBRもブートセクタの一種ととらえることができるので、
これらを区別するための呼び名です。

ただ、GPTが普及し、拡張パーティションの必要性も低下してきたので、
ブートセクタと言えばPBS(パーティションブートセクタ)のみを指すのが一般的になってきました。
PBS以外のブートセクタの重要度が相対的に低下してきたというか。
以後、ここで述べるブートセクタは、基本的にPBSのことだと思ってください。

ブートセクタに問題があると、そのパーティション全体に対してアクセスできなくなります。
結果として、Windowsが起動できなくなることもあります。
ブートセクタという言葉を初めて耳にする人でも、フォーマットという単語なら知っていると思います。
ブートセクタは、パーティションの論理フォーマットと直接関係しています

パーティションをフォーマットすると、データが完全に消えてしまうと誤解されることもありますが、
論理フォーマットの前後において、パーティション内のほとんどの領域はデータの書き換えがありません。
論理フォーマットで上書きされているのは、ブートセクタやファイルシステムのインデックスです。

つまり、ブートセクタはパーティションのフォーマットを規定するものでもあるため、
ブートセクタが破損していれば、そのパーティションはフォーマットされていないとみなされてしまいます。
アクセスできなくなるのも当たり前です。

ブートセクタとは何か

パーティションブートセクタ
MBRと同じ、ブートセクタの一種です。

各パーティションの最初の1セクタが、ブートセクタです。
ブートセクタには、ブートセクタが属するパーティションに必要な情報が収められています。
パーティションがパーティションとしてふるまうために、必要不可欠なものです。

ブートセクタが正常でないと、そのパーティション全体に対してアクセスできなくなります。
Windowsは「フォーマットしますか?」とか聞いてきます。

ドライブF:を使うにはフォーマットする必要があります。フォーマットしますか?

ちなみに、「フォーマットしますか?」と聞いてくるのは、
フォーマット完了時にブートセクタが作られるからです。
論理フォーマットは、新たにブートセクタを作る作業でもあります。
ブートセクタが正常でないため、ブートセクタを新たに作り直そう、ということです。

新しくパーティションを利用するのであれば、それでまったく問題ありません。
もちろん、過去に保存されていたファイルは使えなくなりますが。

ブートセクタ内のデータ

MBRと同じく、ブートセクタも1セクタ分のデータしかありません
ブートセクタ内に書かれている情報も、MBRと似た部分があり、大きく以下の2つに分けられます。

ディスクパラメータ そのパーティションに固有の情報
セクタサイズ、クラスタサイズ、総セクタ数、
MFT(マスターファイルテーブル)の位置等が書かれています。
ブートストラップローダ プログラム部分
「Windows NT」系のOSだと、
ブートローダ本体である「NTLDR」や「BOOTMGR」を読みに行き、
Windowsを起動していく引き金となるものです。

ディスクパラメータには、
そのブートセクタが属するパーティションのファイルシステムに関するルールが書かれているので、
これを読み込まないことには、後に続くパーティション内のファイルを認識することができません。
また、ブートストラップローダは、OSの起動に必要なものです。
アクティブパーティションのブートストラップローダが正しくないと、それより先の起動処理が行われません。

以下、ブートセクタの修復について、

と、対象を分けて説明していきます。

ディスクパラメータの修復

ディスクパラメータの修復は、一般に困難な作業になることが多いです。
ただ、パーティションのフォーマット完了時に、ブートセクタのバックアップが同時に作られているので、
これを利用して復旧を試みることができます。※参考: Microsoftサポート

とはいえ、そのためにはセクタエディタを使う必要があり、操作が簡単ではありません。
そこで、「TestDisk」というツールを使うと、ブートセクタを半自動的に復旧することができます。

「TestDisk」によるブートセクタの修復

半自動とはいえ、ユーザーによる判断が多く求められる部分でもあります。
実際にデータを書き込む前に、現状を正しく把握することが何より重要です。

ブートストラップローダの修復

ブートセクタに関して、「TestDisk」で唯一修正できないのが、ブートセクタのブートストラップローダです。
ブートストラップローダはOSのブートローダと対になって意味を成すもの、つまりOSの一部でもあるため、
OSによって書き込まれるべきものです。※もちろん、一番大きいのはライセンスの問題だと思います。

最初に断りを入れておきますが、
ブートストラップローダは、すべてのパーティションに必要なものではありません
パーティションを認識する、しないという問題とは無関係です。
前述のとおり、ブートストラップローダはOSの起動に必要なプログラムなので、
OSがインストールされているディスクの、さらにアクティブパーティションのブートセクタにのみ必要です。

たとえば、データ保存用として使われることがほとんどのSDカード等では、
ブートセクタにブートストラップローダがない場合があります。
それでも正常動作しますし、データ保存用であれば何の問題もありません。

「Windows XP」時代には、
回復コンソールから「fixboot」コマンドを使うことで、ブートストラップローダを修復することができました。
※参考: Microsoftサポート
ただ、これには「Windows XP」のインストール用ディスクが必要で、
誰でも「fixboot」を使える環境にはなかったのが実情です。

「Windows 7」が普及するにつれ、ユーザーにもいろんな選択肢が与えられるようになりました。
特に、「Windows PE」と「システム修復ディスク」の存在は大きいです。「Windows XP」でも「Windows PE」を作成できます。
これらを使えば、
Windowsのインストール用ディスクがなくても、ブートセクタのブートストラップローダを修復することは可能です。

bootsect /nt60 sys

具体的に、ブートセクタのブートストラップローダを修復するには、
Windows PE」上コマンドプロンプト(「システム修復ディスク」上コマンドプロンプトでも一緒)にて、

bootsect /nt60 sys

と入力します。

「bootsect」というのは、ブートセクタを修復するためのコマンドです。※参考: Microsoft TechNet
以下、オプションについて補足します。

/nt60 ブートセクタに「BOOTMGR」用のブートストラップローダを書き込む
つまり、Vista以降の起動パーティション用。
/nt52 ブートセクタに「NTLDR」用のブートストラップローダを書き込む
つまり、XP以前の起動パーティション用。
sys ブートセクタに関して、アクティブパーティションを対象とする。
その他のパーティションのブートセクタには変更を加えない。

「sys」というのは、ドライブレターの代わりです。
ドライブレターを直接指定してもいいんですが、
ブートストラップローダが影響するのはアクティブパーティションのみなので
「sys」としておけばいいと思います。
しかも、「Windows PE」から起動すると、ドライブレターが普段とは変わることがありますので。

「Windows PE」は、基本的にVista以降のWindowsを対象としていますが、
「bootsect」コマンドではXP以前に対応したブートストラップローダを書き込むこともできるので、重宝します。
たとえば、

bootsect /nt52 sys

とか入力すればいいわけです。

どーでもいーはなし

「bootsect」に似たコマンドで、「bootrec」というものがあります。
「/fixboot」オプションを指定することで、ブートセクタにブートストラップローダを書き込むことができます。

ただし、「bootrec」コマンドはVista以降のWindowsを対象としているため、
「/fixboot」オプションで書き込まれるブートストラップローダも、「BOOTMGR」用のものに限定されます

さらに、「bootrec」コマンドは「Windows RE」でしか使えません。
つまり、「システム修復ディスク」では使えても、「Windows PE」では使えないのです。

以上の理由から、ここでは「bootsect」コマンドを中心に説明しています。