GUID Partition Table
GUID Partition Table (GPT) は Unified Extensible Firmware Interface の仕様に含まれる新しいパーティションスタイルで、デバイスに globally unique identifier を使います。多くの面で Master Boot Record (一般的に使われるパーティションスタイル) と異なり様々な利点を持っています。
GPT を理解するために、MBR とは何かを理解し、そしてそのデメリットを知るのが重要です。
どちらのパーティションスタイルでも、パーティションの数はパーティションテーブルに割り当てられた全ての容量とシングルパーティションの情報を保存するのに必要な容量に基づいて定義されます。
目次
Master Boot Record
MBR のパーティションテーブルはハードディスクの最初のセクタにパーティション情報を以下のように保存します。
HDD での位置 | コードの目的 |
---|---|
最初の 440 バイト | BIOS によって起動される MBR ブートコード。 |
441-446 バイト | MBR ディスクシグニチャ。 |
447-510 バイト | プライマリ・拡張パーティションの情報が入った実際のパーティションテーブル (論理パーティションはここに記載されないので注意してください)。 |
511-512 バイト | MBR ブートシグニチャ 0xAA55。 |
プライマリパーティションについての全ての情報は割り当てられた64バイトに制限されています。これを拡張するには、拡張パーティションを使います。拡張パーティションは MBR 内のプライマリパーティションでありながら論理パーティションと呼ばれる他のパーティションのコンテナとしての役割を果たします。従って4つのプライマリパーティションか、3つのプライマリパーティションと (多数の論理パーティションが入る) 1つの拡張パーティションのどちらかに制限されています。
MBR の欠点
- 4つのプライマリパーティションか3つのプライマリ+1つの拡張パーティション (中には任意の数の論理パーティション) しか定義できません。3つのプライマリ+1つの拡張パーティションの場合、拡張パーティションの領域の外に空き容量がありますが、この空き容量を使って新しいパーティションを作ることはできません。
- 拡張パーティションの中で、論理パーティションのメタデータは連結リスト構造で保存されます。リンクがひとつでも消失すると、メタデータに続く全ての論理パーティションが喪失されます。
- MBR は1バイトのパーティションタイプしかサポートしていないのでタイプの重複が多数存在します。
- MBR はパーティションのセクタ情報を32ビットの LBA 方式で保存します。この LBA 値は (通常使われる) 512バイトのセクタサイズとディスクの最大アドレス容量を2 TiB に制限しています。MBR パーティションを使っている限り、2 TiB 以降の領域をパーティションとして定義することはできません。
GUID Partition Table
GUID Partition Table (GPT) は GUID (linux では UUID) を使ってパーティション、タイプ、そして名前を定義します。GPT は以下のように構成されています:
HDD での位置 | 用途 |
---|---|
ディスクの最初の論理セクタもしくは最初の 512 バイト | 保護 MBR - 通常の MBR と同じですが64バイトの領域にはディスクの全容量 (2 TiB 以上の場合は最大パーティション容量の 2 TiB) を占める 0xEE タイプのプライマリパーティションだけが含まれています。 |
ディスクの2番目の論理セクタもしくは次の 512 バイト | 第一 GPT ヘッダ - Unique Disk GUID, 第一パーティションテーブルの位置, パーティションテーブルで利用できるエントリの数, 自分自身と第一パーティションテーブルの CRC32 チェックサム, 第二 (もしくはバックアップ) GPT ヘッダの位置を含みます。 |
ディスクの2番目の論理セクタの後の (デフォルトでは) 16 KiB | 第一 GPT テーブル - 128 個 (デフォルト値、変更可能) のパーティションエントリ、それぞれのエントリのサイズは 128 バイト (従って 128 個のパーティションエントリで合計 16 KiB)。セクタ番号は64ビットの LBA として保存されパーティションそれぞれに Partition Type GUID と Unique Partition GUID が書き込まれます。 |
ディスクの最後の論理セクタの前の (デフォルトでは) 16 KiB | 第二 GPT テーブル - 第一テーブルとバイト単位で全く同じです。主として第一パーティションテーブルに障害が発生した場合にリカバリーとして使われます。 |
ディスクの最後の論理セクタもしくは最後の 512 バイト | 第二 GPT ヘッダ - Unique Disk GUID, 第二パーティションテーブルの位置, パーティションテーブルで利用できるエントリの数, 自分自身と第二パーティションテーブルの CRC32 チェックサム, 第一 GPT ヘッダの位置を含みます。このヘッダは第一ヘッダが壊れた時に GPT 情報の復旧に使われます。 |
GPT の利点
- GUID (UUID) を使ってパーティションタイプを判別します - タイプの被りはありません。
- ディスク固有の GUID とそれぞれのパーティションにパーティション固有の GUID を利用します - ファイルシステムから独立してパーティションやディスクを参照できます。
- パーティションの数が任意 - パーティションテーブルに割り当てられた容量に依存します - 拡張・論理パーティションは必要ありません。デフォルトでは GPT テーブルは 128 個のパーティションが定義できるスペースを含みますが、より多くのパーティションを定義したい場合、パーティションテーブルにさらに多くのスペースを割り当てることができます (現在 gdisk だけがこの機能をサポートしています)。
- セクタ番号の保存に64ビットの LBA を使います - 最大アドレスディスク容量は 2 ZiB です。
- ディスクの最後にバックアップのヘッダとパーティションテーブルを保存して、第一ヘッダ・パーティションが破壊された時にリカバリを援助します。
- CRC32 チェックサムによってヘッダやパーティションテーブルのエラーや破損を検知します。
カーネルのサポート
カーネルコンフィグの CONFIG_EFI_PARTITION
オプションがカーネルの GPT サポートを有効にします (名前は EFI PARTITION ですが)。このオプションはカーネルに組み込む必要がありローダブルモジュールとしてコンパイルしてはいけません。GPT ディスクをデータストレージとして使っていて起動には使わない場合でもこのオプションが必要です。[core] リポジトリにある Arch の linux と linux-lts カーネルはこのオプションをデフォルトで有効にしています。カスタムカーネルでこのオプションを有効にするには CONFIG_EFI_PARTITION=y
を使って下さい。
ブートローダーのサポート
UEFI 環境
GPT は UEFI 仕様に含まれており UEFI ブートに必須なので全ての UEFI ブートローダーは GPT ディスクをサポートしています。詳しくは UEFI ブートローダーを見て下さい。
BIOS 環境
- GRUB は BIOS 環境では
core.img
ファイルを埋め込むための BIOS Boot Partition (2 MiB、ファイルシステムなし、gdisk ではタイプコードEF02
GNU Parted では bios_grub フラグ) を必要とします、GPT ディスクでは MBR の後ろに埋め込む領域が存在しないためです。GRUB のランタイム GPT サポートはpart_gpt
モジュールによって提供されており、BIOS Boot Partition が必要なこととは関係がありません。
- Syslinux は 440 バイトの MBR ブートコード
gptmbr.bin
が Syslinux のブートファイルを含むパーティションを判別するために (/boot
パーティションが分割されているかどうかに関わらず)/boot/syslinux/ldlinux.sys
を含むパーティションを "Legacy BIOS Bootable" GPT 属性 (GNU Parted では legacy_boot) としてマークする必要があります。詳細は Syslinux#GUID パーティションテーブル を見て下さい。MBR ディスクの "boot" フラグと同じです。
- GRUB Legacy と LILO は GPT をサポートしていません。
パーティションユーティリティ
GPT fdisk
GPT fdisk は GPT ディスクを編集するためのテキストモードユーティリティのセットです。gdisk, sgdisk, cgdisk から成り (MBR ディスクで使われる) util-linux fdisk のそれぞれのツールと同じ機能を持っています。GPT fdisk は gptfdisk として [extra] リポジトリから利用できます。
MBR から GPT への変換
gdisk の機能の一つとしてデータを喪失せずに MBR や BSD ディスクラベルを GPT に変換できることが挙げられます。変換時、全ての MBR のプライマリパーティションと論理パーティションは GPT パーティションになり、それぞれのパーティションには適切なパーティションタイプ GUID と Unique partition GUID が作られます。
MBR ディスクを GPT に変換するには MBR ディスクを gdisk を使って開き (fdisk と同じように) "w" オプションで変更をディスクに書いて終了するだけです。データを失う危険性があるので、ディスクに変更を書き込む前にエラーがないか確認して、エラーがあったらそれを修正してください。詳しくは http://www.rodsbooks.com/gdisk/mbr2gpt.html を参照してください。変換後、ブートローダを再インストールして GPT から起動するように設定する必要があります。
Util-linux fdisk
util-linux の (util-linux に含まれる libfdisk ベースの) fdisk ユーティリティは GPT を部分的にサポートしていますが、今の所まだベータ段階です (2013年10月7日現在)。関連するユーティリティの cfdisk や sfdisk は GPT をサポートしていないため、GPT ディスクで使うと GPT ヘッダやパーティションテーブルを破壊してしまう可能性があります。
GNU Parted
GNU Parted 3.0 以上では、parted
コマンドラインユーティリティはファイルシステムに関する操作をサポートしていません、FS に関するコードは libparted からほとんど削除され、gparted などの外部アプリケーションが必要とする最低限のコードだけが残されています。アップストリームでは、ファイルシステムに関する操作はファイルシステム固有のツールや gparted など parted の GUI ラッパー (外部ツールを呼び出します) を使うことを推奨しています。
参照
- Wikipedia のページ GPT と MBR
- Homepage of Rod Smith's GPT fdisk tool and its Sourceforge.net Project page - gptfdisk
- Rod Smith's page on Converting MBR to GPT and Booting OSes from GPT
- Rod Smith's page on the New Partition Type GUID for Linux data partitions
- System Rescue CD's page on GPT
- Wikipedia page on BIOS Boot Partition
- Make the most of large drives with GPT and Linux - IBM Developer Works
- Microsoft's Windows and GPT FAQ