その5 上級編

 上級編では、マルチブートシステムでのトラブルシューティングのために知っておくと役に立つMBRやパーティションブートセクタの解説、および修復方法を説明する。ただし、これらの操作は間違って行うとパーティションそのものが使用不可能になる危険があるので、十分に理論的な理解を持ってから実行していただきたい。

Part1 マスターブートレコードおよびパーティションブートセクタのバックアップ

 マルチブートの場合に限らないのだが、マスターブートレコード (以下MBR) やパーティションブートセクタ (以下PBS) は、いったん壊れると被害が非常に大きい。そのパーティションがアクセス不能になるだけでなく、場合によってはハードディスク全体がアクセス不能になる。しかも標準機能ではバックアップを取ることもできない。また完全な修復機能も標準では提供されていない。ただ、シングルOSの場合は、OSのインストール時以外ではこれらが書き換えられることは普通ないので、壊れる危険性は少ない。一方、マルチブートシステムで、NTLDR以外のOSセレクタを使っている場合は、MBRが頻繁に書き換えられるため、MBRが壊れる危険性も高くなる。そこで、転ばぬ先の用心として、MBRPBSのバックアップを取っておけば安心できる。ここでは、MBRPBSのバックアップの取り方、リストアの仕方について解説する。

MBRのバックアップ

 MBRをバックアップするには、そのためのツールが必要だ。Windows 2000/XPのインストールCD-ROMには「Support\Tools」フォルダに「Disk Probe」が収録されている。同フォルダのSetup.exeを実行すればDisk Probeを含むサポートツールがインストールできる。このDisk Probeを使うとMBRのバックアップ/リストアができる。ただし、これはWindows NT/2000/XP用のプログラムなので、Windows NT/2000/XPが起動できなくなった際は、これを使ったリストアができない。その場合はDOSベースで動作するツールを使う必要がある。

 Disk ProbeMBRのバックアップを行うには、次の操作を行う。


1.      Administrator権限でDisk Probeを起動して、「Drives」メニューから「Physical Drive」を選択する。

2.      MBRをバックアップしたいハードディスク (通常はPhysicalDrive0) をダブルクリックし、「Set Active」をクリックし、「OK」をクリックする。

3.      Sectors」メニューから「Read」選択する。

4.      Starting Sector」が「0」、「Number of Sectors」が「1」のまま、「Read」をクリックする。画面にはMBRが表示される (画面1)

画面1 Disk ProbeでMBRを表示した

5.       File」メニューから「Save As」を選択し、適当な場所に (ハードディスクにアクセスできない場合に備えてフロッピィがよい)、適当な名前をつけて保存する。名前には.dskの拡張子が自動的に付けられる。これでMBRのバックアップができた。

MBRのリストア

 MBRに異常があってもWindows NT/2000/XPが起動できるなら、Disk Probeを使ってMBRのリストアができる。方法は、

1.      File」メニューから「Open File」を選択し、バックアップしておいたファイルを指定する。画面にバックアップファイルの内容が表示される。

2.      Drives」メニューから「Physical Drive」を選択する。

3.      MBRをリストアしたいハードディスク (通常はPhysicalDrive0) をダブルクリックし、「Set Active」をクリックし、「Read Only」のチェックを外し、「OK」をクリックする。

4.      Sectors」メニューから「Write」選択する。

5.      Starting sector to write data」が「0」のまま、「Write it」をクリックする。

6.       警告メッセージに対して「はい」をクリックする (画面2)

画面2 Disk ProbeでMBRをリストアする

 これでMBRがリストアされる。もし、MBRの損傷によりWindows NT/2000/XPが起動しない場合は、まず、Windows 2000/XPの回復コンソールで「FIXMBR」コマンドを実行してみる。このコマンドはMBR中のマスターブートプログラムを修復する (書き換える) ので、これでWindows NT/2000/XPが起動する可能性がある。これでも起動しない場合は、Windows NT 4.0リソースキットの「DiskSave」を使ってMBRをリストアすることができる。DiskSaveはリソースキットの「I386\FaultTol」フォルダに収録されているので、これをフロッピィにコピーしておく。DiskSaveの使い方は次のとおり。

1.       英語モードのDOSフロッピィから起動する (Win9xのフロッピィは不可)DiskSaveをコピーしたフロッピィに差し替え、「Disksave」と入力する。

画面3 DiskSaveの画面

2.      画面3のDiskSaveの画面で「F3」キーを押して、MBRのバックアップファイルを指定すれば、MBRのリストアができる。
なお、DiskSaveではMBRのバックアップもできる。バックアップファイルはDisk Probeで作成したものと同じだ。

 DiskSaveを持っていない場合は、MBMと同じ作者によるフリーソフトの「MBRX」を使ってもMBRのバックアップ/リストアができる (画面4)。このバックアップファイルはDisk ProbeDiskSaveと互換性がある。

画面4 MBRXによるMBRのリストア

 この他に、フリーソフトの「FIPS(http://www.igd.fhg.de/~aschaefe/fips/) でも、MBRとアクティブなPBSのバックアップができ、FIPS付属の「Retorrb」でリストアができるが、バックアップファイルは上記の3ソフトと互換性がなく、8GB超のハードディスクにも対応していないので、ちょっと使いにくい。ただし、このソフトは、データを保ったまま、パーティションの分割ができるので、その面では役に立つこともあるだろう。

PBSのバックアップ

 PBSのバックアップもやはりDisk Probeでできる。方法は次のとおり。


1.      Administrator権限でDisk Probeを起動して、「Drives」メニューから「Logical Volumes」を選択する。

2.      PBSをバックアップしたいドライブをダブルクリックし、「Set Active」をクリックし、「OK」をクリックする。

3.      Sectors」メニューから「Read」選択する。

4.       Starting Sector」が「0」、「Number of Sectors」が「1」のまま、「Read」をクリックする。画面にはPBSが表示される (画面5)

画面5 Disk ProbeでPBSを表示した

5.       File」メニューから「Save As」を選択し、適当な場所に (ハードディスクにアクセスできない場合に備えてフロッピィがよい)、適当な名前をつけて保存する。名前には.dskの拡張子が自動的に付けられる。これでPBSのバックアップができた。

PBSのリストア

 PBSが損傷していてもWindows NT/2000/XPが起動できる場合は、やはりDisk ProbePBSのリストアができる。方法は次のとおり。


1.      Disk Probeの「File」メニューから「Open File」を選択し、バックアップしておいたファイルを指定する。画面にバックアップファイルの内容が表示される。

2.      Drives」メニューから「Logical Volumes」を選択する。

3.      PBSをリストアしたいドライブをダブルクリックし、「Set Active」をクリックし、「Read Only」のチェックを外し、「OK」をクリックする。

4.      Sectors」メニューから「Write」選択する。

5.      Starting sector to write data」が「0」のまま、「Write it」をクリックする。

6.       警告メッセージに対して「はい」をクリックする (画面6)

画面6 PBSをリストアする

 PBSが損傷したことが原因でWindows NT/2000/XPが起動できない場合は、まずWindos 2000/XPの回復コンソールを起動して、「FIXBOOT X:」コマンドを実行してみて欲しい (Xは対象となるドライブ名)。このコマンドはPBSのプログラム部分の修復 (書き換え) を行うもので、これで起動できるようになる可能性がある。なお、Windows 9xの起動パーティションのPBSを修復する場合は、Windows 9xの起動ディスクで起動して「SYS X:」コマンドを実行する。

 それでも起動しない場合は、DOSベースのPBSリストアツールを使うしかないが、困ったことに適当なツールがない。DsikSaveではPBSのバックアップ/リストアが可能だが、残念ながら8GB超に対応していないので、8GB超のパーティションに対しては利用できない。FIPSRetorrbも同様に8GB超に対応していない。またMBRXにはPBSのバックアップ/リストア機能がない。したがって8GB以内のパーティションの場合に限ってDiskSaveを使うとよいだろう。

 またDiskSaveFIPS/Restorrbでバックアップ/リストアできるPBSはアクティブな基本パーティションだけだ。一方、Disk ProbeではすべてのパーティションのPBSをバックアップ/リストアできる。なお、Disk Probeは、本当はバックアップ/リストアのためのツールではなく。ハードディスクのすべてのセクタを表示・編集するためのローレベルディスクエディタだ。したがって、Windowsであれ、Linuxであれ、すべてのハードディスク領域をDisk Probeで編集できる。それだけに、使い方を間違うと極めて危険なツールだ。Disk Probeを使う場合は、十分に注意して使っていただきたい。

Part2 MBRの構造

 これまで述べてきたように、ハードディスクの障害に対しては、時にはMBRPBSの修復といった作業が必要になる。そこで最後に、MBRPBSの構造について説明しておこう。これが理解できていれば、MBRPBSを直接編集して、色々な障害を修復することも可能になる。

 まず、MBRの構造だが、画面7のようになっている。これはハードディスクの最初のセクタであり、サイズは512バイトだ。

画面7 Windows 2000で作成されたMBRの例

 画面7のマスターブートプログラムはWindows 2000で作成されたもので、画面8のWindows Meで作成されたものとは、サイズも内容も異なっているのが分かるだろう。マスターブートプログラムを修復 (書き込む) するコマンドが、Windows 2000/XPでは回復コンソールの「FIXMBR」であり、Windows 9xでは「FDISK /MBR」だ。

画面8 Windows Meで作成されたMBRの例

 署名は、Windows NT/2000/XPでハードディスクを識別するために使われる特別な4バイトのフィールドだ。Windows 9xでは、このデータは無視される。Windows 2000の場合はこれが変更されると、起動できなくなる場合があるので、絶対に変更してはならない。

 署名の前に3バイトのデータがあるが、これはWindows 2000で書き込まれる。これがどういう目的で使われるのかは分かっていない。試しに、このフィールドを削除 (00で上書き) してみたが、Windows 2000の動作に変化は見られなかった。

 パーティションテーブルには、各16バイトの4つのフィールドがあり、各フィールドが1つのパーティションを表している。パーティションテーブルの最初の1フィールド分を取り出すと、

00 01
01 00 0C FE FF FF 3F 00 00 00 FA EF D4 01

となる。

最初の「00」は「ブート識別子」と呼ばれるデータで、これが「80」ならアクティブ、「00」なら非アクティブを表す。その後のデータは順に、

01」はパーティションの開始ヘッド

01」はパーティションの先頭セクタ

00」はパーティションの先頭シリンダ

そして「0C」は本稿でたびたび問題となっているシステムIDだ。

FE」は終了ヘッド

FF」は終了セクタ

FF」は終了シリンダ

その後の4バイト「3F 00 00 00」はディスク先頭からの相対セクタ

さらにその後の4バイト「FA EF D4 01」はパーティションの総セクタ数だ。

この後の16バイトは次のパーティションを表し、データの順番は上と同じだ。パーティションは最大4つまで記録され、4つに満たない場合は、「00」で埋められる。

なお、パーティションテーブルの後にある2バイト「55 AA」はセクタ終了マーカーで、常に「55 AA」になる。

この例のパーティションテーブルから、次のことが容易に読み取れる。
現在アクティブなパーティションはハードディスクの先頭から3つ目のNTFSパーティションである。
ハードディスクの先頭パーティションはFAT32の基本パーティションだ。
2番目には拡張パーティションがある。拡張パーティションの中に、いくつのパーティション、あるいはどんなパーティションがあるかはこのデータからは分からない。
4つ目のパーティションはFAT32の基本パーティションだ。
●各パーティションのサイズは先頭位置と終了位置から、あるいは総セクタ数から計算すれば分かる。


Part3 PBSの構造

 PBSは各パーティションの先頭セクタにある512バイトだ。そのパーティションがNTFS (画面9) か、FAT32 (画面10) またはFAT16かによって構造が異なる。

画面9 NTFSのPBSの例

画面10 FAT32のPBSの例

 NTFSのパーティションの場合は、先頭の3バイトがイニシャルプログラムローダー (IPL) へのジャンプ命令、次の8バイトがOEM ID、その後の25バイトがBIOS Parameter Block (BPB) と呼ばれるファイルシステムのデータを表すフィールド、次ぎの48バイトが拡張BPB、その後の426バイトがIPL、そして最後の2バイトがセクタ終了マーカー (55 AAに固定) となっている。

 FAT32の場合は、先頭の3バイトがIPLへのジャンプ命令、次の8バイトがOEM ID、その後の53バイトがBPB、次ぎの26バイトが拡張BPB、その後の420バイトがIPL、最後の2バイトがセクタ終了マーカー (55 AAに固定) となっている。

 BPBや拡張BPBは、CheckdskScandiskでチェックし修復が可能だ。またIPLWindows 2000/XPの回復コンソールで「FIXBOOT」コマンドを実行することで、あるいはWindows 9xで「Sys」コマンドを実行することで修復ができる。BPBや拡張BPBについては、ここでは詳しい説明は省略するので、詳しく知りたい人は「Windows 2000 Professionalリソースキット ()」を参照していただきたい。