1.1. OSの起動×パーティション

EMO
2007/Feb/18

複数のOS

navigation

1. OSの起動過程

電源を投入してからOSが起動するまでの過程は、大まかには以下のようになります。

<電源投入>
BIOS
  • Basic Input/Output System。マザーボード上の不揮発メモリに記録されている。
  • 最も基本的な入出力+OSの起動(ブート)のための小さなプログラム。
  1. 電源投入と共に、メモリに読み込まれ(ロード)、実行される。
  2. まず接続されている基本的なデバイスを点検し(POST: Power On Self-Test)、初期化する。
  3. 次にブート可能なデバイス(HDD、FD、光学ドライブ等)を探し、設定に従って、その先頭セクタをロード・実行する。
<HDDからブートする場合>
<FD、光学ディスク等
からブートする場合>
MBR
  • Master Boot Record。HDDの先頭セクタ。
  • ブートのための小さなプログラム(ブートコード)とパーティションテーブルがある。
  • 基本的にはOSに依存しない。
  1. (標準の)MBRのブートコードは、パーティションテーブルに記録されている基本パーティションのうち、「アクティブ」に指定されているものを探し、その先頭セクタをロード・実行する。
ブートセクタ(PBR)
+関連ファイル群
  • ブートセクタ(PBR: Partition Boot Record)(注1)は、パーティションの先頭セクタ。
  • PBRには、ブートのための小さなプログラム(ブートコード)とBPB(BIOS Parameter Block。当該パーティションの情報が入っている)がある。
  • PBRと関連ファイル群はセット。OSに依存する。
  1. PBRのブートコード(そのOSに専用のもの)は、そのパーティションから(基本的にルートにある)関連ファイル(そのOSに専用のもの。9xであればio.sys)を探し、ロード・実行する。
  2. そのファイルは、同じところにある他の関連ファイルもロード・実行し、設定ファイルに従って、OS本体(OSカーネル・ファイル。設定ファイルに場所が記録されている)を探し、ロード・実行する。
OS本体
  • OSカーネル・ファイル(OSの核となる部分)と関連ファイル群
  1. OSカーネル・ファイルが起動すれば、OSは自分で自分を立ち上げる。
(注1) PBRは、MBRのように一般化した用語ではないが、「ブートセクタ」も語義的には曖昧であり(ブートに関わるセクタということならMBRも含めて他にもあるし、またブートコード以外の部分も含んでいる)、また「PBR」はMBRと対置させるには好適な略語なので、便宜的に使用するもの。

普通はこのような段階を経て1つのOSが起動しますが、各段階で手を加えてやれば、他のOSへ分岐させて、そのOSを起動することができるわけです。PBR+関連ファイル群は、特定のOSの一部として、OS本体が起動する前にセットで機能するので、差し当たり「ブート部分」と呼ぶことにします。

具体的には、各段階に応じて以下のようになります。

BIOS

MBR
MBR
(a)
(b...)
ブート部分(a)
ブート部分(b...)
ハードウェア的な
切り替え
HDDを交換する(=MBRをHDDごと切り替える)等
起動するFD、光学ディスク等を交換する等
BIOS→MBR→ ブート部分(a)
ブート部分(b...)
ソフトウェア的な
切り替え
MBRに標準のブートコードに代わるプログラムを置き、起動するブート部分をそのパーティションごと切り替える(SystemCommander等)。
BIOS→MBR→ ブート部分
OS本体(a)
OS本体(b...)
他のブート部分(a)
他のブート部分(b...)
ブート部分のプログラムから、起動するOS本体を切り替える、或いは他のブート部分を起動する(NT系のNTLDR、LinuxのGRUB)。

2. パーティション

データを記憶媒体に収めるには、そのための構造としてファイルシステムが必要です。パーティション(注2)は、HDD内にファイルシステムを作成する前提となるもので、HDD内の一定の空間(全空間でもよいが)を1つのパーティションとして設定します。いわばHDD内の「部屋割り」のようなもの。これらはOSの起動に密接に関連しています。

(注2) パーティションは、日本語では「領域」「区画」とも表記されるが、一般名詞と区別が付きにくいので、ここでは「パーティション」と表記する。なお、Microsoftの文書(特にNT系関連)では、「ボリューム」(volume)と表記されている場合が多い。

A. 基本

パーティションの種類として、以下のものがあります。

基本パーティション
(primary partition)
  • 基本的なパーティション。1つのHDDに最大4つまで作成できる。
  • 「アクティブ」に指定することができる(1つのHDDで同時に1つだけ)。標準のMBRのブートコードは「アクティブ」な基本パーティションから起動しようとする。
  • パーティションの構成情報(パーティションの位置・サイズ、パーティションID(ファイルシステム)、アクティブ指定)は、MBRのパーティションテーブルに記録されている(個々のパーティションのPBR中のBPBにも記録されている)。
拡張パーティション
(extended partition)
  • 1つの基本パーティションの代わりに作成できる(1つのHDDに1つのみ)。
  • それ自体に直接ファイルシステムは作成できず、論理ドライブを収めるための「殻」となるもの。内部には論理ドライブを多数作成することができる(注3)。これにより、作成できるパーティション数の問題を解決している。
論理ドライブ
(logical drive
/logical partition)
  • 拡張パーティションの中に作成できるパーティション。拡張パーティション内の「小部屋」のようなもの。
(注3) 拡張パーティションの先頭セクタにはMBRと同様のパーティションテーブルがあり、1つの基本パーティション(論理ドライブとなる)+元の拡張パーティションの残りの全空間を含む拡張パーティションが記録されている。この繰り返しで、拡張パーティションを入れ子構造で繋げることにより、論理ドライブを多数作成することを可能としている。ただし、このような構造を意識する必要は、通常の使用では全くない。

ファイルシステムには、主に以下のようなものがあり、パーティションIDとして記録されています。

ファイル
システム
パーティション
ID(16進数)
備考 説明
FAT FAT12 01 パーティション・サイズが10MB以下の場合。
  • 以前のDOSから使われてきた最もオーソドックスなファイルシステム。名前はファイルの位置等を記録するFile Allocation Tableに由来。FAT12になるのは作成する際のサイズによるが、FAT16と使用上の違いはない。9xでは、これを拡張してロングファイルネームを扱えるようにしたVFATを使う。
  • 仕様が古いため、パーティション・サイズの上限が(DOS/9xでは)2GB(2047MB)であり、またクラスタ(注4)・サイズの関係上、スペースの無駄が生じやすいという欠点がある。
  • パーティションの位置に関して、CHSによる1024シリンダ(容量にして8GB前後)を境界に、新たなIDが付けられるようになった(ただし、古いOS(NT4.0ではSP2以前、OS/2)はこれに対応していない)。
FAT16 04 パーティション・サイズが10MBを超え、32MB以下の場合。
06 パーティション・サイズが32MBを超える場合(ツールによっては「BIG FAT」、「FAT16B」と呼ぶ)。
0E パーティションの位置が1024シリンダを超える基本パーティションの場合で、9x、NT系によるもの(ツールによっては「FAT16X」と呼ぶ)。
FAT32 0B 下記以外の基本パーティションか、論理ドライブの場合。
  • FATのパーティション・サイズ、クラスタ・サイズの問題を一応解決したもの。パーティション・サイズの上限は2TBになった(ただし、2K/XPでは、FAT32のパーティションを作成する際には32GBが上限になっている。既にある32GBを超えるパーティションを使用するには問題ない)。
  • 95のOSR2以降から使えるようになった(FDISKの起動時の選択により、512MBを超えるパーティションは自動的にFAT32で作成される)。古いOS(NT4.0の全バージョン、OS/2)はこれに対応していない。
  • パーティションの位置に関して、CHSによる1024シリンダを境界に、新たなIDが付けられるようになった。
0C パーティションの位置が1024シリンダをまたがるか、超える基本パーティションの場合(ツールによっては「FAT32X」と呼ぶ)。
NTFS 07 OS/2のHPFS(High Performance File System)も同じID。
  • NT系専用のファイルシステム。名前はNT File Systemに由来。FATに比べて、セキュリティと堅牢性に優れる。
  • NT系のバージョンによって、IDは同じでも、NTFS4.0(NT4.0)、NTFS5.0(2K。NT4.0はSP4以降の対応)、NTFS5.1(XP。2Kでも互換性はある)の違いがある。
Linux Native 83 Linuxのファイル用のパーティション。
  • 内部的にはExt2、Ext3等。
Linux Swap 82 Linuxのスワップ用のパーティション。
05 拡張パーティション 下記以外の場合。
  • ファイルシステムではないので、パーティションテーブル中で表記されるのみ。
  • パーティションの位置に関して、CHSによる1024シリンダを境界に、新たなIDが付けられるようになった。
0F パーティションの位置が1024シリンダを超える場合で、9x、NT系によるもの(ツールによっては「ExtendedX」と呼ぶ)。
0A OS/2のブートマネージャ
  • OS/2のブート部分であると同時に、他のブート部分も含めて選択的に起動出来る起動切り替えソフトでもある。
  • 基本パーティションを1つ占有する。
(注4) クラスタは、OSがファイルシステムでデータを記録するための単位。
  • クラスタは、セクタ(サイズは512Byteで固定)を複数まとめて構成される。
  • 1つのクラスタには1つのファイルしか記録できず、クラスタの余ったスペースは無駄になる。クラスタ・サイズが大きくなるほど、無駄になるスペースも大きくなりやすい。
  • FATの場合、クラスタ・サイズはパーティション・サイズに連動しており、パーティション・サイズが大きくなるほど、クラスタ・サイズも段階的に大きくなる。
[参考情報] Microsoft: MS-DOS のパーティションの概要
FAT16ファイルシステムを使用したパーティションの最大容量
FAT Type and Cluster Size Depends on Logical Drive Size
FAT32ファイルシステムについて
Windows 2000のFAT32ファイルシステムの制限
Windows XPでのFAT32ファイルシステムについて
Windows 95のパーティションの種類がWindows NTで認識されない
DOS FDISK program sees NTFS partitions as HPFS
FAT、HPFS、NTFS ファイル システムについて
NTFS 5.0 ファイル システムの新しい機能

B. 留意点

パーティションに関して留意する必要がある(かもしれない)点として、以下のものがあります。

C. パーティションテーブル

基本パーティションの構成情報はMBR内のパーティションテーブルに記録されています。なお、パーティションテーブルの詳細は、通常の使用にはほとんど関係してきません。

例として、2K/XPの「ディスクの管理」で見た状態で、以下のようなパーティション構成のHDDがあるとします。先頭のC:とG:が基本パーティション、その後ろの緑で囲まれた部分が拡張パーティションで、その中にD:等の論理ドライブがあります。

ディスクの管理

このHDDのMBR内のパーティションテーブルは、Disk Probe(注8)で見ると、以下のようなものです。

(注8) Disk ProbeはMicrosoft製のディスクエディタ。NT4.0のResource Kitからあったツールで、新しいものはWindows XP Service Pack 2 Support Toolsとしてダウンロードできる(Disk Probeをインストールするにはインストール時には「Complete」を選ぶ必要がある)。同梱のdskprtrb.docに基本的な使い方の説明がある。

Disk Probe

このパーティションテーブルをエントリごとに並べ直すと、以下のようになります。

1番目のエントリ

80

01 01 00

07

EF FF CF

3F 00 00 00

C1 2C E1 00

(基本パーティションC:)
2番目のエントリ

00

00 C1 D0

07

EF FF FF

00 2D E1 00

40 F9 6B 00

(基本パーティションG:)
3番目のエントリ

00

00 C1 FF

0F

EF FF FF

40 26 4D 01

40 56 AF 05

(拡張パーティション)
4番目のエントリ

00

00 00 00

00

00 00 00

00 00 00 00

00 00 00 00

(空き)

1

[1]

2

[2]

3

[3]

4

[4]

5

[5]

6

[6]

それぞれの意味は以下のとおり。パーティションの位置・サイズは、CHSとLBA(注9)による値が併記される形になっています。

[1] アクティブ指定
  • その基本パーティションが「アクティブ」な場合は「80」、そうでない場合は「00」になる。
[2] 開始セクタ(CHS)
  • CHSによる開始セクタ。なお、このHDDではCHSの上限は1023/239/63。
  • 1番目のByteがヘッドの値を示す。2番目と3番目の2Byte=16bitのうち、6bitがセクタ、10bitがシリンダの値を示す(2番目のByte=8bitのうち上2桁の2bitを除いた6bitがセクタ、この2bitを3番目のByte=8bitに上2桁として加えた10bitがシリンダになる)。例えば、2番目のエントリの開始セクタは、あえて図示すれば以下のとおり。したがって、CHSの値としては976/0/1となる。
16進数 2進数(bit) 2進数 10進数
2番目のByte C1 11 000001 000001 1 (セクタ)

上2桁を移動
3番目のByte D0 11010000 11 11010000 976 (シリンダ)
  • パーティションはCHSのシリンダ単位で作成される。このHDDでは1シリンダは240×63×512Byte÷1024≒7.7MBであるので、パーティションは7.7MB刻みとなる。ただし、MBR直後の最初のパーティションは、MBR(0/0/1)があるので、1シリンダ目(シリンダ:0)の2ヘッド目(ヘッド:1)から始まり、開始セクタは常に0/1/1となる。このHDDの1番目のエントリの開始セクタも0/1/1となっている。
  • 3番目のエントリの開始セクタは1023/0/1であるが、2番目のエントリの終了セクタは1023/239/63であり、これより前にあることになるので、矛盾している。これは(このHDDの場合は)CHSの上限が1023/239/63である(換算すると1024×240×63×512Byte÷1024^3≒7.38GB)ことと関係している。つまり、2番目のエントリの終了セクタは、実際には「ディスクの管理」で見ると7.04+3.37=10.41GBの位置にあるが、既にCHSで表現できる上限を超えているため、上限の値となっている。3番目のエントリの終了セクタも同様であるが、パーティションはシリンダ単位というルールがあり、開始セクタは終了セクタより少なくとも1シリンダ前にあるはずなので、このような値になっているらしい。いずれにせよ、これらは正確な値ではない。
[3] パーティションID
  • ファイルシステムの種類(拡張パーティションの場合は違うが)を示す。
  • 1番目と2番目のエントリでは「07」で、NTFSであることを示す。3番目のエントリでは「0F」で、拡張パーティションであることを示す。
[4] 終了セクタ(CHS)
  • CHSによる終了セクタ。
  • 2番目と3番目のエントリでは、実際の終了セクタの位置が(このHDDの)CHSの上限を超えているため、上限の値である1023/239/63になっている。
[5] 開始セクタ(LBA)
  • LBAによる開始セクタ。「Relative Sector」という言い方もある(パーティションテーブルの先頭からの距離という意味で)。
  • リトルエンディアンなので、Byteごとに逆に読む。したがって、1番目のエントリの開始セクタは3F(16進数)=63(10進数)。2番目のエントリではE12D00(16進数)=14757120(10進数)。
  • パーティション作成のルールはCHSが踏襲されるので、CHSのシリンダ単位になる。ただし、1番目のパーティションは、(MBRとの間にスペースを空けない限り)CHSの1シリンダ目の2ヘッド目から始まるので、1ヘッド=CHSのセクタの最大値+1セクタ目から始まる。したがって、大抵のHDDではCHSのセクタの最大値は63なので、1番目のパーティションは64番目のセクタ、LBAの値としては63から始まる。このHDDでも1番目のエントリはそうなっている。
[6] パーティションの
サイズ(セクタ数)
  • パーティションのサイズ(セクタ数)。LBA用。
  • リトルエンディアンなので、Byteごとに逆に読む。したがって、1番目のエントリのサイズはE12CC1(16進数)=14757057(10進数)で、容量としては14757057×512Byte÷1024^3≒7.04GBとなる。
(注9) CHSとLBAは、ともにHDD中のセクタの位置を表現するための方式。
  • CHSは、Cylinder/Head/Sectorの3つのパラメータ(ジオメトリ)の組み合わせによる。
    • シリンダは10bit=1024個(値は0〜1023)、ヘッドは8bit=256個(値は0〜255)、セクタは6bit=63個(値は1〜63。64個でないのは最小値が1のため)の値をとり(HDDによっては最大値はこれより小さい)、階層的には1セクタ×最大値=1ヘッド、1ヘッド×最大値=1シリンダとなる。
    • HDDの最初のセクタであるMBRは、1シリンダ目(シリンダ:0)の1ヘッド目(ヘッド:0)の1セクタ目(セクタ:1)になるので、CHSの値としては0/0/1となる。
    • CHSで表現できる容量の上限は、1024×256×63×512Byte÷1024^3≒7.88GBとなる。これ以上の容量は扱えないので、LBAによるしかない。
  • LBAは、Logical Block Addressingの略で、HDDの先頭からの通し番号による。
    • 最小値は0。よって、MBRは、LBAの値としては0となる。
[参考情報] Microsoft: Windows Support for Large IDE Hard Disks
Windows NT Boot Process and Hard Disk Constraints
1024 Cylinder Limit, How Windows NT Gets Drive Geometry
How It Works: Partition Tables
@IT: Windows TIPS: ディスクのパーティション・テーブルを調査する

参考までに、ptedit.exe(注10)では、このパーティションテーブルの状態が以下のように整理されて表示されます。

(注10) ptedit.exeはPartitionMagicの開発元のPowerQuest(Symantecに買収された)製のツール。DOSで動くptedit.exeとWindows上で動くptedit32.exeがある。PartitionMagicに入っているが、2005年7月現在、SymantecのFTPサイトからダウンロードできる。
Partition Table Editor
[0] MBRのセクタであることを示す。「sector 0」がLBA表示、「cyl 0, head 0, sector 1」がCHS表示。
[1] アクティブ設定
[2] 開始セクタ(CHS)
[3] パーティションID
[4] 終了セクタ(CHS)
[5] 開始セクタ(LBAの値=開始セクタの前にあるセクタ数)
[6] パーティションのサイズ(セクタ数)

3. 構成方法

A. 指針

具体的な複数のOSの構成(起動切り替え方法+パーティション構成)を組み立てるには、以下の点を考慮に入れる必要があります。

構成のバリエーションは幾らでもあり得ますが、最も素直な構成としては、以下のようなものです。

MBR

基本パーティション

ブート部分+
OS本体

基本パーティション

ブート部分+(注11)
OS本体

基本パーティション

ブート部分+(注12)
OS本体

拡張パーティション

論理ドライブ

ブート部分+(注2)
OS本体

...

論理ドライブ

共有データ

(注11) 他のブート部分からOS本体を起動させる場合は不要。
(注12) Linux等の論理ドライブにブート部分を置けるOSのみ。他のブート部分からOS本体を起動させる場合は不要。

例えば、XPを主に使いつつ、2KとMeを時々使い、Linuxもたまに使うという場合、以下の構成が考えられます。

MBR

基本パーティション

XPのブート部分
(NTLDR)+
XP本体
(NTFS)

基本パーティション

2Kのブート部分
(NTLDR)+(注13)
2K本体
(NTFS)

基本パーティション

Meのブート部分+
Me本体
(FAT32)

拡張パーティション

論理ドライブ

Linuxのブート部分
(GRUB)+
Linux本体
(Ext3)

...

論理ドライブ

共有データ
(FAT32)

(注13) 2K本体を、XPのNTLDRから起動する場合(2KのNTLDRにはパーティションの開始位置がHDDの先頭から約8GBを超えると起動できないという制限がある)、2Kのブート部分は不要。この場合、2K本体は論理ドライブに追い出してもよい。

この場合の起動切り替えは、ややこしい方法は幾らでもあり得ますが、最もストレートな方法としては、以下が考えられます。

  1. MBRに起動切り替えソフト(SystemCommander等)を置く。
    MBR
    (SystemCommander等)
    XPのブート部分
    2Kのブート部分
    Meのブート部分
    Linuxのブート部分
    XP本体
    2K本体
    Me本体
    Linux本体
    <メリット>
    • 各OSを、ブート部分を含めて、完全に独立して扱える(注14)。したがって、他のOSのあるパーティションを見えるようにするか否かも、各OSで自由に設定可能。
      • 9xとしてはMeだけであり、XPと2KのファイルシステムがNTFS、LinuxのファイルシステムがExt3であればMeは認識できないので、Meから他のOSのパーティションが見えることはそもそもない。ただし、9xが複数あるような場合は、9xのパーティション同士が見えないようにするには「隠し」設定を利用することになる(SystemCommander等にはそのための機能がある)。
      • XPと2Kは、「ディスクの管理」で互いにドライブレターを付けなければよい。
      (注14) 起動切り替えソフトには、SystemCommanderを含めて、動作に必要なデータを基本パーティションの1つに置くものがあるが、このパーティションに問題が起こった場合には、起動切り替えソフトの動作に支障が出る。
    <デメリット>
    • 追加的なソフトが必要(選択肢は広いので困ることはないが)。
  2. XPのNTLDRを使う。
    MBR
    (標準のブートコード)
    XPのブート部分(NTLDR)
    (XPの基本パーティションを
    「アクティブ」に設定)
          
    XP本体
    2K本体
    Meのブート部分
    Linuxのブート部分(GRUB)
    Me本体
    Linux本体
    <メリット>
    • XP標準の機能を利用するので、追加的なソフトは不要。
    <デメリット>
    • XPのNTLDRに依存することによる制限がある。
      • XPのパーティションに問題が起こったような場合には、NTLDRが機能しなくなるので、他のOSも起動できなくなる。
      • NTLDRを共有するNT系からは、NTLDRのあるパーティションを見えなくすることはできない。よって、2KからはXPのパーティションが見える状態で使うことになる。

具体的な目的に即して、メリット/デメリットを考慮しつつ、構成を選択することになります。

4. 起動切り替えソフト

起動切り替えソフト(注15)は種々様々あるので、選択肢は広いです。

(注15) 定番的な呼び方は存在しない。「ブートローダー」(boot loader)という便利な言葉はあるが、語義上、OSの起動過程で単に次の段階への橋渡しをするだけで、切り替える機能は持たないものも含み得るので、あえてこう呼ぶもの。

A. MBRで切り替えるもの

B. ブート部分で切り替えるもの。

C. その他

5. パーティション操作ソフト

パーティション操作ソフト(注17)という場合、少なくともパーティションの作成/削除の機能を持つものと捉えれば、範囲は広いです。

(注17) 定番的な呼び方は存在しない(英語であれば「partitioning tool」で済むが)。「パーティション管理ソフト」という呼び方もあるが、ソフトの性格上、パーティションの状態を変更するときに使用されるだけで、常時起動して「管理」するわけではない。

A. 縮小/拡大/移動等が可能なソフト

B. OS付属のツール

C. その他

Appendix. エラーメッセージ

PRESS A KEY TO REBOOT

1台目のHDDに「アクティブ」に指定された基本パーティションがない場合等に出ます。対策は、パーティション操作ソフト(9xのDOSのFDISKで良い)で、起動すべき基本パーティションを「アクティブ」に設定することです。

[参考情報] Microsoft: If Your MS-DOS or Windows NT Operating System Does Not Boot

DISK BOOT FAILURE, INSERT SYSTEM DISK AND PRESS ENTER

典型的には、HDDがマザーから認識されておらず、かつFDDに起動FDが入っていない場合等に出ます。対策は、HDDの物理的な接続、BIOS設定を確認することです。