上級編では、マルチブートシステムでのトラブルシューティングのために知っておくと役に立つMBRやパーティションブートセクタの解説、および修復方法を説明する。ただし、これらの操作は間違って行うとパーティションそのものが使用不可能になる危険があるので、十分に理論的な理解を持ってから実行していただきたい。
マルチブートの場合に限らないのだが、マスターブートレコード (以下MBR) やパーティションブートセクタ (以下PBS) は、いったん壊れると被害が非常に大きい。そのパーティションがアクセス不能になるだけでなく、場合によってはハードディスク全体がアクセス不能になる。しかも標準機能ではバックアップを取ることもできない。また完全な修復機能も標準では提供されていない。ただ、シングルOSの場合は、OSのインストール時以外ではこれらが書き換えられることは普通ないので、壊れる危険性は少ない。一方、マルチブートシステムで、NTLDR以外のOSセレクタを使っている場合は、MBRが頻繁に書き換えられるため、MBRが壊れる危険性も高くなる。そこで、転ばぬ先の用心として、MBRやPBSのバックアップを取っておけば安心できる。ここでは、MBRとPBSのバックアップの取り方、リストアの仕方について解説する。
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 ProbeでMBRのバックアップを行うには、次の操作を行う。
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に異常があっても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 ProbeやDiskSaveと互換性がある。
画面4 MBRXによるMBRのリストア
この他に、フリーソフトの「FIPS」(http://www.igd.fhg.de/~aschaefe/fips/) でも、MBRとアクティブなPBSのバックアップができ、FIPS付属の「Retorrb」でリストアができるが、バックアップファイルは上記の3ソフトと互換性がなく、8GB超のハードディスクにも対応していないので、ちょっと使いにくい。ただし、このソフトは、データを保ったまま、パーティションの分割ができるので、その面では役に立つこともあるだろう。
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が損傷していてもWindows NT/2000/XPが起動できる場合は、やはりDisk ProbeでPBSのリストアができる。方法は次のとおり。
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超のパーティションに対しては利用できない。FIPSとRetorrbも同様に8GB超に対応していない。またMBRXにはPBSのバックアップ/リストア機能がない。したがって8GB以内のパーティションの場合に限ってDiskSaveを使うとよいだろう。
またDiskSaveやFIPS/Restorrbでバックアップ/リストアできるPBSはアクティブな基本パーティションだけだ。一方、Disk ProbeではすべてのパーティションのPBSをバックアップ/リストアできる。なお、Disk
Probeは、本当はバックアップ/リストアのためのツールではなく。ハードディスクのすべてのセクタを表示・編集するためのローレベルディスクエディタだ。したがって、Windowsであれ、Linuxであれ、すべてのハードディスク領域をDisk
Probeで編集できる。それだけに、使い方を間違うと極めて危険なツールだ。Disk
Probeを使う場合は、十分に注意して使っていただきたい。
これまで述べてきたように、ハードディスクの障害に対しては、時にはMBRやPBSの修復といった作業が必要になる。そこで最後に、MBRとPBSの構造について説明しておこう。これが理解できていれば、MBRやPBSを直接編集して、色々な障害を修復することも可能になる。
まず、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の基本パーティションだ。
●各パーティションのサイズは先頭位置と終了位置から、あるいは総セクタ数から計算すれば分かる。
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は、CheckdskやScandiskでチェックし修復が可能だ。またIPLはWindows 2000/XPの回復コンソールで「FIXBOOT」コマンドを実行することで、あるいはWindows 9xで「Sys」コマンドを実行することで修復ができる。BPBや拡張BPBについては、ここでは詳しい説明は省略するので、詳しく知りたい人は「Windows 2000 Professionalリソースキット (下)」を参照していただきたい。