# GUID Partition Table (日本語)

関連記事

- Arch Boot Process
- Master Boot Record
- Unified Extensible Firmware Interface
- パーティショニング

GUID Partition Table (GPT) は Unified Extensible Firmware Interface の仕様に含まれる新しいパーティションスタイルで、デバイスに globally unique identifier を使います。多くの面で Master Boot Record (一般的に使われるパーティションスタイル) と異なり様々な利点を持っています。

Warning: 同じドライブで Windows とのデュアルブートをする場合、Windows は BIOS モードでは GPT ディスクを起動できないことに注意してください。既に Windows を BIOS で起動する MBR ドライブにインストールしているのならば、ドライブを GPT に変換してはいけません。Windows のチェインロードにどのブートローダを使っているかに関係なく Windows が起動できなくなります。GPT ドライブから起動するためには Windows を UEFI モードでインストールし UEFI ブートローダのどれかを使う必要があります。これは Windows の制限です。

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 の欠点

1. 4つのプライマリパーティションか3つのプライマリ+1つの拡張パーティション (中には任意の数の論理パーティション) しか定義できません。3つのプライマリ+1つの拡張パーティションの場合、拡張パーティションの領域の外に空き容量がありますが、この空き容量を使って新しいパーティションを作ることはできません。
2. 拡張パーティションの中で、論理パーティションのメタデータは連結リスト構造で保存されます。リンクがひとつでも消失すると、メタデータに続く全ての論理パーティションが喪失されます。
3. MBR は1バイトのパーティションタイプしかサポートしていないのでタイプの重複が多数存在します。
4. 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 の利点

1. GUID (UUID) を使ってパーティションタイプを判別します - タイプの被りはありません。
2. ディスク固有の GUID とそれぞれのパーティションにパーティション固有の GUID を利用します - ファイルシステムから独立してパーティションやディスクを参照できます。
3. パーティションの数が任意 - パーティションテーブルに割り当てられた容量に依存します - 拡張・論理パーティションは必要ありません。デフォルトでは GPT テーブルは 128 個のパーティションが定義できるスペースを含みますが、より多くのパーティションを定義したい場合、パーティションテーブルにさらに多くのスペースを割り当てることができます (現在 gdisk だけがこの機能をサポートしています)。
4. セクタ番号の保存に64ビットの LBA を使います - 最大アドレスディスク容量は 2 ZiB です。
5. ディスクの最後にバックアップのヘッダとパーティションテーブルを保存して、第一ヘッダ・パーティションが破壊された時にリカバリを援助します。
6. CRC32 チェックサムによってヘッダやパーティションテーブルのエラーや破損を検知します。

### カーネルのサポート

カーネルコンフィグの `CONFIG_EFI_PARTITION` オプションがカーネルの GPT サポートを有効にします (名前は EFI PARTITION ですが)。このオプションはカーネルに組み込む必要がありローダブルモジュールとしてコンパイルしてはいけません。GPT ディスクをデータストレージとして使っていて起動には使わない場合でもこのオプションが必要です。[core] リポジトリにある Arch の linux と linux-lts カーネルはこのオプションをデフォルトで有効にしています。カスタムカーネルでこのオプションを有効にするには `CONFIG_EFI_PARTITION=y` を使って下さい。

## ブートローダーのサポート

### UEFI 環境

GPT は UEFI 仕様に含まれており UEFI ブートに必須なので全ての UEFI ブートローダーは GPT ディスクをサポートしています。詳しくは UEFI Bootloaders (日本語) を見て下さい。

### BIOS 環境

Note: Intel Desktop Board マザーボードなど、BIOS 環境によっては保護の MBR パーティションに Boot フラグを設定しないと GPT ディスクから起動できないことがあります。そのような時は、互換性維持のために GPT ではなく MBR (msdos パーティショニング) を使うことが推奨されています。詳細と回避方法は http://mjg59.dreamwidth.org/8035.html や http://rodsbooks.com/gdisk/bios.html を参照してください。

- 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 から起動するように設定する必要があります。

Note:

- GPT はディスクの最後に第二テーブルを保存することを覚えておいて下さい。このデータ構造はデフォルトで 33 512 バイトセクタが消費されます。MBR は同じようなデータ構造を最後に作らないので、MBR ディスク上の最後のパーティションがディスクの最後の最後まで使いきってしまい完全な変換ができなくなることがあります。こうなってしまったら、変換を一度止めて最後のパーティションのサイズを変更するか、最後のパーティションだけを変換から除いて下さい。
- ブートマネージャが GRUB の場合、BIOS Boot Partition が必要なことに注意してください。MBR のパーティションレイアウトが古くなっていないのなら、最初のパーティションをセクタ 2048 にする良い機会になります。最初に bios-boot パーティションを作成できるように 1007 KiB の空きスペースを作るためです。これを行うには、まず上述の通り gdisk で mbr->gpt の変換を行なって下さい。その後、gdisk で新しいパーティションを作成して手動で位置をセクタ 34 - 2047 に指定して、パーティションタイプ `EF02` を設定してください。

### 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 ラッパー (外部ツールを呼び出します) を使うことを推奨しています。

## 参照

1. Wikipedia のページ GPT と MBR
2. Homepage of Rod Smith's GPT fdisk tool and its Sourceforge.net Project page - gptfdisk
3. Rod Smith's page on Converting MBR to GPT and Booting OSes from GPT
4. Rod Smith's page on the New Partition Type GUID for Linux data partitions
5. System Rescue CD's page on GPT
6. Wikipedia page on BIOS Boot Partition
7. Make the most of large drives with GPT and Linux - IBM Developer Works
8. Microsoft's Windows and GPT FAQ

Category:

- File systems (日本語)