BOOTPARTユーティリティの使い方

2001/06.09
概要

 BootPartユーティリティhttp://www.winimage.com/bootpart.htmから入手可能なフリーソフトで、見た目DOSコマンドのようだが、れっきとしたWin32コンソールアプリケーションだ。WindowsNT/2000のブートセクターの修復の他、NTLDRを使ったマルチブートに関し、様々なことが可能な非常に便利なユーティリティである。ざっと機能を以下に挙げる。

  1. ブートセクターの修復(MS-DOS上のみ)
  2. ブートセクターファイルの作成
  3. Boot.iniへのエントリの追加
  4. Boot.iniからのエントリの削除
  5. Boot.ini内容とパーティションの表示
  6. IO.SYSなどの配置替え(MS-DOS上のみ)

 動作環境は以下のようになる。

  1. MS-DOS上
    純粋なMS-DOSのほか、Windows9xの起動ディスクや「Command Prompt Only」などの上で動作する。ただしWindows9x上の「MS-DOSプロンプト」、所謂「DOS窓」では動作しない。
     
  2. WindowsNT/2000上
    WindowsNT/2000上の「コマンドプロンプト」で動作する。上記の機能リストでも書いた通り、いくつかの機能がWindowsNT/2000上では使えない。

 WindowsNT/2000の「コマンドプロンプト」で動いて、Windows9xの「DOS窓」でできないのが不思議だが、まあそういう作りなのだろう。コマンドの使い方はbootpart /?と実行することで、簡単なものだが表示される。

[BootPartの使い方の表示]
 
C:\BOOTPART>bootpart /?
Boot Partition 2.20 for WinNT (c) 1995-98 G. Vollant (info@winimage.com)
WEB : http://www.winimage.com and http://www.winimage.com/bootpart.htm
Add partition in the Windows NT Multi-boot loader
Usage : When running under Windows NT or MS-Dos
    BOOTPART
      List all partition, with number
    BOOTPART <part_number> <filename> [<name_of_system>]
      where : part_number : a number of a partition (or A: for floppy)
           filename : the file name of the bootfile to create
           name_of_system : the name to be added in the BOOT.INI
        Create a boot file for the partition, and if name_of_system
           is specified, register it in the BOOT.INI
      You can also replace <part_number> by DOS622 or WIN95 to them.
    BOOTPART LIST
      List entry in BOOT.INI (you can remove them after with BOOTPART)
Under MS-Dos (MS-Dos 6.22 or the "MS-Dos 7.0" from Windows 95) only:
    BOOTPART <part_type> BOOT:C:
      where <part_type> is DOS622, WIN95 or WINNT, rewrite the boot sector
        of C: for boot under MS-Dos 6.22, Win95 or the NT Boot loader
    BOOTPART REWRITEROOT:C:
      Put the IO.SYS and MSDOS.SYS file from MS-Dos 6.22 at the beginning
        of the boot sector

C:\BOOTPART>
 

 内容はそれぞれ細かく説明する。

 


ブートセクターの修復

[実行シンタックス]
> BOOTPART <パーティションタイプ> BOOT:C:

 BootPartの基本機能として、ブートセクターの修復がある。現在のブートパーティション(Cドライブ)のブートセクターをWindowsNT/2000のNT-IPLのものにしたり、逆にWindows9x/DOSのDOS-IPLのものにしたりできる。このコマンドはWindowsNT/2000上では動作せず、MS-DOS上でしか動作しない。またあくまで、修復するのは現在のブートパーティション(Cドライブ)である。任意のパーティションのブートセクターの修復はできない。

 NT-IPLにするのはNTLDRによるマルチブート環境がWindows9xのインストールにより破壊された場合に便利だ。またDOS-IPLにするのはマルチブート環境を純粋なWindows9xの単独環境に戻すときに使う。コマンドの実行は基本的にブートパーティション(Cドライブ)をカレントディレクトリとして実行してほしい。

 パーティションタイプにはWINNT、DOS622、WIN95、WIN95OSR2、WIN98の5種類が指定できる。

 まず、NT-IPLのものにする場合は以下のようにパーティションタイプにWINNTを指定してコマンドを打つ。

[現在のブートパーティションのブートセクターをNT-IPLにする]
 
C:\> bootpart  winnt  boot:c:
 

 以上で、現在のブートパーティションのブートセクターがNT-IPLのものになる。次にDOS-IPLにする場合である。

[ブートセクターをDOS-IPLにする]
 
C:\> bootpart  win95  boot:c:
 

 パーティションタイプwin95の部分はwin95osr2win98とすることもできる。これによる違いは特に発見できなかったが、マルチブートのOSがWindows95 OSR2やWindows98の場合は一応それぞれ「win95osr2」や「win98」と指定した方がいいだろう。

 また同じDOS-IPLでもMS-DOS 6.22では内容が違うので、もしMS-DOS6.22のものにしたい場合は以下のように実行してほしい。

[ブートセクターをMS-DOS6.2のDOS-IPLにする]
 
C:\> bootpart  dos622  boot:c:
 

 いずれも、大文字小文字はどちらでも構わない。

 


ブートセクターファイルの作成

[実行シンタックス]
> BOOTPART <パーティションタイプ> <ブートセクターファイル名> [<boot.iniエントリ名>]

 これはなかなかユニークな機能だ。Windows9xがインストールされている環境に後からWindowsNT/2000をインストールすると現在のブートセクターが退避され、bootsect.dosというファイルに作成されるということは何度も述べてきた。これは単に現在ブートパーティション(Cドライブ)のブートセクターをイメージ化して、それをそのままファイル化したに過ぎない。

 しかしBootPartのこの機能は現在のブートパーティション(Cドライブ)のブートセクターのBPB(BIOSパラメータブロック)とそれに合ったIPLを組み合わせて、ブートセクターファイルを新たに生成するということができる。つまり単なる現存するブートセクターのイメージ化ではない。

 以下のようなコマンドを打つことによって、現在のブートセクターのBPB(これはブートパーティションの情報を含んでいます)とWindows95用のDOS-IPLを組み合わせたブートセクターファイルを「bootsect.95」という名称で作成することができる。

[ブートセクターファイルの作成]
 
C:\BOOTPART> bootpart  win95  bootsect.95
 

 第1パラメータのパーティションタイプはwin95の他、ブートセクターの修復の項でも述べた、win98またはwin95osr2でもOKである。同様に違いはよく分かりませんが、それぞれのOSに合ったものにしておいた方が無難だろう。またやはり同様にDOS622とすることでMS-DOS6.22用のブートセクターファイルも作成可能だ。ただし「winnt」は指定できない。理由は後述する。

 このコマンドはWindowsNT/2000上でも実行可能である。やはり必ずCドライブをカレントディレクトリとして実行してほしい。ただしドライブ直下である必要はない。

 
 またこの機能ではブートセクターファイルを作るだけでなく、このファイルを起動エントリとして、ブートエントリをBoot.iniファイルに追加することができる。以下のようにコマンドの最後にエントリ名を追加する。

[ブートセクターファイルの作成とboot.iniエントリの追加]
 
C:\BOOTPART> bootpart  win98  bootsect.98  Windows 98 SE
 

 エントリ名はスペースを含むことも可能である。その場合特に全体をダブルクォーテーションで囲む必要もない。このようにするとbootset.98というファイルが作成されると共に以下のようにboot.iniにエントリが追加される。

[boot.iniに追加されたエントリ]
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00"
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sos
C:\BOOTPART\Bootsect.98 ="Windows 98 SE"

 このように、マルチブート環境の構築が比較的簡単に行うことができる訳である。

 因みに、この機能は現在のブートパーティションのBPBとDOS-IPLを組み合わせたブートセクターファイルしか生成できない。たとえば任意のパーティションのBPBと組み合わせたり、またNT-IPLと組み合わせるといったことはできない。これはNTLDRによるマルチブートにとって、このようなブートセクターファイルは必要ないからだ。この理由は私のページをじっくり読んでいただければ、自ずと理解できることだと思う。

 


Boot.iniのエントリの追加

[実行シンタックス]
> BOOTPART {<パーティション番号> | A: } <ブートファイル名> [<boot.iniエントリ名>]

 この機能は通常NTLDRが不可能な任意のパーティションをチェーンロードすることを可能にするものである。パーティション番号は以下のように何もパラメータを指定しないで、BOOTPARTコマンドを実行することにより参照する。そうすると以下のようにパーティション情報が表示される。

[パーティションの表示]
 
C:\BOOTPART>bootpart
Boot Partition 2.20 for WinNT (c) 1995-98 G. Vollant (info@winimage.com)
WEB : http://www.winimage.com and http://www.winimage.com/bootpart.htm
Add partition in the Windows NT Multi-boot loader
Run "bootpart /?" for more information

0 : C:* type=b (Win95 Fat32), size = 1670728 KB
1 : C: type=f (Win95 XInt 13 extended), size = 16265812 KB
2 : C: type=b (Win95 Fat32), size = 1309266 KB
3 : C: type=5 (Extended), size = 1429785 KB
4 : C: type=b (Win95 Fat32), size = 1429753 KB
5 : C: type=5 (Extended), size = 11406150 KB
6 : C: type=b (Win95 Fat32), size = 11406118 KB
7 : C: type=5 (Extended), size = 2000092 KB
8 : C: type=83 (Linux native), size = 2000061 KB
9 : C: type=5 (Extended), size = 120487 KB
10 : C: type=82 (Linux swap), size = 120456 KB
11 : C: type=c (Win95 Fat32 LBA), size = 2000092 KB

C:\BOOTPART>
 

 たとえば、この中で8番のLinuxの起動エントリを作りたい場合、次のようなシンタックスのコマンドを実行する。

 > BOOTPART <パーティション番号> <ブートファイル名> [<boot.iniエントリ名>]

 パーティション番号は先に表示したものの各行(パーティション)の先頭の番号だ。ブートファイル名は起動したいパーティションのブートセクターを起動するIPLが含まれるファイルの名称になる。任意の名称を指定して構わない。boot.iniエントリ名boot.iniファイルのエントリになるものである。最後のboot.iniエントリ名は省略可能だ。省略した場合はboot.iniにエントリを追加せず、ブートファイルのみ作成する。

[ブートファイルの作成とboot.iniへのエントリの追加]
 
C:\BOOTPART>bootpart  8  bootfile.lnx  Turbo Linux 6.0
 

 上記例ではbootsect.lnxというブートファイルがカレントディレクトリに作成され、そのファイルへのエントリがboot.iniファイルに追加される。boot.iniファイルは以下のようになっただろう。

[Linuxのエントリが追加されたboot.iniの内容]
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00"
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sos
C:\BOOTPART\bootfile.lnx="Turbo Linux 6.0"

 起動画面は以下のようなイメージになったはずである。

[NTLDRによるOS選択画面(+Windows95+Linux)]
OS Loader V4.00

オペレーティング システムの選択


  Windows NT Workstation Version 4.00
  Windows NT Workstation Version 4.00 [VGA mode]
  Turbo Linux 6.0

↑ キーと ↓ キーを使って、起動するオペレーティング システムを選択し、
Enter キーを押してください。


システムが自動的に起動するまで: 30




 ところでこの機能において、BootPartが作成するブートファイル(例ではC:\BOOTPART\bootfile.lnx)は指定パーティションのブートセクターをファイル化したものではない。このファイルは指定パーティションのブートセクターをロードすることだけを行う、一種のブートローダである。

 これはNTLDRはカレントドライブのファイルしか読めないため、特定のパーティションのブートセクターを直接読み込むことができないので、このブートファイルを仲立ちにすることでそれを可能にするという機能なのだ。

 つまり、ブートシーケンスはNTLDRはカレントドライブにある、このブートファイルをロードする。このブートファイルは一種のブートローダなのでロードされ実行されると特定のパーティションのブートセクターをロード、実行という作業を行う。


 さて、この機能で任意のパーティションが起動できる訳だが、この応用としてここでやはりNTLDRでは出来なかったフロッピーディスクからのブートのメニューを追加することができる。次のシンタックスで可能である。

> BOOTPART A: <ブートファイル名> [<boot.iniエントリ名>]

 やはり、フロッピーブートを司るブートファイルが生成され、NTLDRがそれをロードするというブートシーケンスになる。

[フロッピーブートのエントリの作成]
 
C:\BOOTPART>bootpart  a:  bootfile.fd  Diskette
 

 これで、NTLDRからフロッピーブートすることが可能になる。

 


Boot.iniのエントリの表示、削除

 Boot.iniに対するBootPartの機能として更にその内容を表示したり、エントリを削除することも可能だ。Windows2000/NT上で操作している場合はエクスプローラから簡単に操作できるが、それでもいちいちファイル属性を変更したりせねばならない。また起動ディスクからおこなっている場合はEDITコマンドなどは若干不便なので、このような機能があると楽だろう。

 表示は以下のようなシンタックスである。

> BOOTPART LIST

[パーティションの表示]
 
C:\BOOTPART>bootpart list
Boot Partition 2.20 for WinNT (c) 1995-98 G. Vollant (info@winimage.com)
WEB : http://www.winimage.com and http://www.winimage.com/bootpart.htm
Add partition in the Windows NT Multi-boot loader
List entry in BOOT.INI
0 : multi(0)disk(0)rdisk(0)partition(2)\WINNT="Microsoft Windows 2000 Server" /fastdetect
1 : multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Professional" /fastdetect
2 : C:\="Windows 98"
3 : C:\BOOTPART\bootsect.fd="Diskette"
4 : C:\BOOTPART\bootsect.lnx="Turbo Linux 6.0"

By runnning "bootpart REMOVE <number>"
where number is an entry number, you can remove the entry from C:\BOOT.INI

C:\BOOTPART>
 

 更にこの中から特定のエントリを消したい場合は以下のシンタックスで削除できる。

 > BOOTPART REMOVE <エントリ番号>

 エントリ番号はリストの各行の先頭の番号となる。

 


IO.SYSなどの配置替え

 今となってはあまり必要性のある機能ではないが、MS-DOS6.22以前ではIO.SYSとMSDOS.SYSはルートディレクトリの先頭のエントリとして存在していなければブートすることはできない。

 エクスプローラなどでファイルをコピーしたりしても、そのファイルのディレクトリエントリはどこになるか保証されないので、通常は起動できない位置にIO.SYSやMSDOS.SYSが配置されてしまう場合がある。このような時に行うコマンドである。

> BOOTPART REWRITEROOT:C:

 上記のように実行するだけである。

 尚、Windows95以降の起動ディスクのMS-DOSは正確にはMS-DOS7.xなので、IO.SYSとMSDOS.SYSがどのディレクトリエントリにあっても問題なくDOS-IPLが探して起動できるようになっているため、このような作業は必要ない。