2.PCのパーティションテーブル

● パーティション

 一般的にハードディスクは,複数のパーティション(partition)に分けて,論理的に複数のドライブとして扱う.ここでは,このパーティションの分け方を表すパーティションテーブルについて説明する.

 MOのような取り外し可能なディスクの場合,パーティションに分けず,ちょうど容量の大きなフロッピーディスクとして扱うこともある.これを俗にフロッピーディスク形式,あるいはスーパーフロッピーディスク形式などと呼び,パーティションに分けるハードディスク形式とは区別する.フロッピーディスク形式においては,以下でいうMBRやパーティションテーブルは存在せず,LBAが0のセクタからいきなりファイルシステムが始まる.

 パーティションの分け方は,MBR(Master Boot Record)と呼ばれるディスクの先頭のセクタに記録される.MBRにはその名のとおりシステムのブートストラップのために,OSをディスクから読み込むためのコードが記録されている.このうち,446バイト目から始まる64バイトがパーティションテーブルである.

〔図2〕MBRの構造

 また,その後に続く(つまりは最後の)2バイトは,パーティションテーブルに付けられた署名(マジックナンバー)で,順に0x55,0xAAでないとパーティションテーブルがない,もしくは破壊されていると判断される(図2).すなわち,フロッピーディスク形式のフォーマットか未フォーマットである.

〔図3〕パーティションテーブルのエントリ

  パーティションテーブルは,16バイトのエントリ四つからなる.すなわち,最大4パーティションまで分けることが可能である.より多くのパーティションに分割するために,BSD系OSやSolarisなどではこのパーティション内部をさらに独自の方式で分割し,またLinuxやDOS,Windowsなどでは後述の拡張パーティションを用いる.

 1エントリは,アクティブフラグ(1バイト),CHSによる開始セクタ(3バイト),パーティションタイプ (1バイト),CHSによる終了セクタ(3バイト),LBAによる開始セクタ(4バイト),パーティションサイズ(4バイト)の各フィールドからなる.LBA開始セクタおよびパーティションサイズは,リトルエンディアンで表現される(図3).

〔表1〕カーネルの設定オプション(重要な個所,デフォルト値では問題がある部分のみ
(28KB)

  アクティブフラグは,通常起動パーティションにのみ0x80が,それ以外のパーティションには0が入る.MBRの最初のブートストラップコードは,通常このフィールドが0x80であるパーティションからOSを読み込む.起動ディスク以外では,どのパーティションもこのフィールドが0であることが多い.

 パーティションタイプは,そのパーティションのファイルシステムの種類を表す.おもなものを表1に挙げる.この値が0の場合,そのエントリは無視される.

〔図4〕CHSによる開始セクタおよび終了セクタ

 CHSによる開始セクタと終了セクタは,ビットフィールドを用いてパッキングされている(図4).小さなディスクの場合,基本的には同じ情報を示す値がLBAによる開始セクタおよびサイズのフィールドに記録される.サイズはセクタ単位である.大きなディスクの場合,CHSの各フィールドにはダミーが書き込まれる注7

 なお,筆者のディスクのMBRを例として掲げておく(図5).先頭トラック(C=0,H=0)は慣例的に使わないことになっている.ブートセレクタなどのプログラムが利用することも多い.

〔図5〕MBRの例

● 拡張パーティション

 さて,ここでもし可能ならばDOSやWindows 9xに附属しているFDISK.EXEを起動してみてほしい.内容を破壊してかまわない空いたディスクがあれば,適当にいじり倒してみるとよいだろう.

 DOSのパーティションには基本領域,拡張領域,論理ドライブがあり(英語版ではそれぞれPrimary Partition,Extended Partition,Logical Drive),図6のような論理構成になっている.基本領域は,一つのディスクに一つしか作ることができない.拡張領域を作るには,ディスクに基本領域が一つ必要である.また,論理ドライブは拡張領域の中にいくつでも作ることができる.拡張領域単体では,ファイルシステムとして利用できない.

 この拡張領域は,複数のパーティションテーブルを数珠繋ぎにすることで実現される.

 まず,FDISKからは単一の拡張領域の中に,複数の論理ドライブを作成できるかのように見えたが,実際の実現方法はもう少し複雑である.拡張領域に直接論理ドライブが格納されるのではなく,論理ドライブに対応する「器」があり,その中に論理ドライブが格納される.

 それぞれの「器」の先頭には,MBRに似たセクタが配置され,これをEBR(Extended Boot Record)と呼ぶ.この446バイト目からにもパーティションテーブルが記録されており,論理ドライブの情報が得られる.「器」は,論理ドライブの前にEBRをくっつけたものと言えるが,論理ドライブが削除されても「器」は残る.MBRと同様,EBRの後も1トラック分は使わない慣例になっている.

〔図6〕拡張領域

 EBRのパーティションテーブルは,MBRのそれとまったく同じ構造で,4エントリ分の領域をもつわけだが,実際には先頭の二つのみが用いられる.一つ目は,「器」の中の論理ドライブの情報を持つエントリである.二つ目は,次の「器」の情報であり,これがない場合,一つ目のエントリが示す論理ドライブが最後の論理ドライブであることを示す.

 論理ドライブのエントリのうち,LBAによる先頭セクタのフィールドが,その「器」内でのオフセットで表されるのに対し,次の「器」のエントリは,拡張領域内でのオフセットで表されることに注意してほしい注8表2).

〔表2〕拡張領域のある場合のMBRとEBRの例
(28KB)

参考文献

1)Andries Brouwer,"Large Disk HOWTO"(たとえば http://www.win.tue.nl/~aeb/linux/Large-Disk.html)

2)中野賢,「導師への道」第7回 MBR,『BSD magazine 2001 No.7』


みのうら・まこと 日本NetBSDユーザーグループ
minoura@jp.NetBSD.org


注7:パーティションテーブルを操作するツールは,各OS添付のものをはじめ,とくにDOS向けには数多く知られているが,このCHS部分に書く値やその解釈を巡って相性問題が発生することもあるようだ.

注8:余談だが,記事執筆中にNetBSDでのこの部分のコードがバグっていて,どちらも「器」内のオフセットとして扱われていることを発見してしまった.報告したら,ソースコード上は瞬時に修正されたので,NetBSD-1.6では問題は起きないはずである.

Prologue

1.組み込み機器でファイルシステムが必要な場面
2.組み込み機器におけるファイルシステム実装のいろいろ
コラム 仮想的にストレージを実現する方法

第1章  ディスクの構造とパーティション情報の基礎知識

1.ディスク装置の基礎知識
2.PCのパーティションテーブル


7月号特集トップページへ戻る


Copyright 2001 みのうら・まこと