twitter icon   twitter icon   rss icon

Linux.com Japan

Home Linux Jp チュートリアル GUID パーティション テーブルの扱い方 (古典的な MBR とはさよならしましょう)

GUID パーティション テーブルの扱い方 (古典的な MBR とはさよならしましょう)

原文はこちらです。

How to Upgrade Your Linux PC Hardware において、Linux が動作可能なハードウエアについて説明するとともに、筐体を開けずにハードウエアを確認するツールについて解説しました。今回は、GUID パーティション テーブル (GPT) について解説します。GPT は、古典的で機能的に不充分になった MS-DOS パーティション テーブルを置き換える新しいパーティション テーブルです。なぜ慣れ親しんだ MS-DOS パーティション テーブルを捨てて GPT を使うべきなのかを学びます。GPT は、UEFI 仕様の一部分です。Linux は、UEFI と旧来からの BIOS の両方を扱うことのできる新機能を有する本当の OS です。

消えゆく MBR

Globally Unique Identifiers Partition Table は、古典的な MS-DOS Master Boot Record (MBR) を置き換える新実装です。MBR は、10M バイト HDD 時代の IBM PC 用に 1980 年代初期に誕生しました。MBR は、記憶装置の先頭 512 バイトに位置し、ブートローダーとパーティション テーブルを持っています。ブートローダーは 446 バイトを占め、パーティション テーブルは 64 バイトを使用します。最後の 2 バイトは、ブート シグネチャを格納しています。MBR は最大 4 つの基本パーティションを保持し、各基本パーティションは 1 つの拡張パーティションを保持できます。各拡張パーティションは、複数の論理パーティションに分割されています。Linux は、理屈としては無限個の論理パーティションを管理できます。古い Linux では、カーネルが扱えるデバイス数に制限があったため、63 個の IDE パーティションと 15 個の SCSI パーティションに制限されていました。現在は、Udev がデバイス番号を動的に管理しているため、そのような制限はありません。

fig-1 GPT partitions

MBR は、小さく柔軟性に欠けるため、その制限を避けるさまざまなワークアラウンドが考えられました。Logical Block Addressing (LBA) もそのひとつで、もともとのシリンダー、ヘッド、セクター (CHS) を使用したアドレッシングの制限を越えるために考え出されました。昔のハードディスクはブロック サイズが 512 バイトであるため、パーティション サイズが 2T バイトに制限されていました。子パーティション サイズの制限を 16T バイトに拡張するため、セクター サイズを 4096 バイトに拡張する所謂ハックがサポートされたのです。

GUID Partition Table (GPT)

このようなハックによる拡張が行われてきましたが、最新のツールが、さらなる拡張を実現してくれました。GPT は Unified Extensible Firmware Interface (UEFI) 仕様の一部ですが、Linux を使う場合には、GPT パーティションからブートするために EFI BIOS は不要で、旧来の BIOS とともに使用できます。Mac OS X と Windows はさまざまな制限があり、私を悩ませてくれました。必要であれば、Microsoft FAQ か、アップルの Secrets of the GPT を参照すると良いでしょう。
GPT には、基本パーティションと論理パーティションの区別はなく、1 種類のパーティションがあるだけです。Gparted の出力を見て下さい (図 1)。
Gparted でハードディスクをフォーマットするときに、図 2 のように gpt オプションを指定すると、GPT 形式が使用されます。
fig-2 using-gparted

GPT は MBR と比較して、以下の点で進歩しています。

  • 64 ビット ディスク ポインター採用により、最大 264セクターを管理でき、512 バイト セクターのハードディスクの場合は 8Zi バイト、4096 バイト セクターの場合は 8 倍となります。
  • 標準で最大 128 個のパーティションをサポートし、オペレーティング システムがそれ以上のパーティションをサポートしていても問題ありません。
  • CHS や、基本、拡張、論理パーティションのようなワークアラウンドは不要です。Windows の場合、柔軟性に欠け、基本パーティションを必要としたため、よく問題となりました。
  • GPT は、パーティション テーブルのコピーをディスクの先頭と最終セクタに格納しておくため、破壊等に強くなっています。
  • GPT は、自分自身とパーティション テーブルの cyclic redundancy check (CRC) チェックサムを計算します。
  • ディスクとパーティションにユニークな ID を付加します。

ユニーク ID

GPT GUID (Globally unique identifiers) と Linux における UUIDs (Universally Unique Identifiers) は、ブロック デバイスにユニークな名称を付加するという似た目的をもっていますが、異なるものです。Linux の UUID はファイルシステムの機能であり、ファイルシステム作成時に生成されます。blkid コマンドで、Linux の UUID を確認できます。

# blkid 
/dev/sda1: LABEL="storage" UUID="60e97193-e9b2-495f-8db1
  -651f3a87d455" TYPE="ext4" 
/dev/sda2: LABEL="oldhome" UUID="e6494a9b-5fb6-4c35-ad4c-
   86e223040a70" TYPE="ext4" 

この例では、同時にファイルシステムのラベルも表示されています。ラベルは、作成者がブロック デバイスに任意に設定できます。以下のように、/etc/fstab に UUID を使うことができます。

# storage, /dev/sda1 data storage
UUID=60e97193-e9b2-495f-8db1-651f3a87d455 /home/carla/storage ext4 user,defaults 0 0

もしくは、ラベルを使って以下のようにもできます。

LABEL=storage /home/carla/storage ext4 user,defaults 0

gdisk コマンドを使うと、GUID を表示できます。

# gdisk /dev/sdc
GPT fdisk (gdisk) version 0.8.1
Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): 

これにより、次のことがわかります。このディスクが GPT を使用していること、保護モードの MBR を併用していることです。保護モードの MBR を使うことにより、従来の BIOS から起動することができ、GPT を扱えないツール (fdisk など) やオペレーティングシステムが GPT を破壊することを防ぎます。これらの古いコマンドでは MBR ディスクに空き領域がないように見えますが、gdisk を使えば正しく情報を見ることができます。全パーティションを見るには  p キーを押してください。

Command (? for help): p
Disk /dev/sdc: 3907029168 sectors, 1.8 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 058D39EE-5D06-409F-AA0C-298A3E6CC302
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 3907029134
Partitions will be aligned on 2048-sector boundaries
Total free space is 819142765 sectors (390.6 GiB)
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1953791   953.0 MiB   0700  
   2         1953792        80078847   37.3 GiB    0700  
   3        80078848      2033203199   931.3 GiB   0700  
   4      2033203200      3009765375   465.7 GiB   0700  
   5      3009765376      3048826879   18.6 GiB    0700  
   6      3048826880      3087888383   18.6 GiB    8200  

論理セクタが、512 バイトであることに注意してください。最近のハードディスクはすべて 4096 バイト セクターになっています。lsblk コマンドで確認してみましょう。

$ lsblk -t /dev/sdc
NAME   ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE
sdc            0   4096      0    4096     512    1 cfq       128
|--sdc1         0   4096      0    4096     512    1 cfq       128
|--sdc2         0   4096      0    4096     512    1 cfq       128
|--sdc3         0   4096      0    4096     512    1 cfq       128

これを見ると、物理セクターが 4096 バイトであることがわかります。4096 バイトは、大容量ハードディスクではいくつかの意味を持ちます。ストレージ容量を効率的に使用可能です。X86 のページ サイズが 4096 バイトです。そして、ext3/4 ファイルシステムでは、4K バイト クラスタが標準となっています。しかし、互換性(ディスク コントローラー、古いソフトウエア、オペレーティング システム用) を保つために、ハードディスク製造会社は、512 バイト セクターをエミュレートしています。
それでは、再び gdisk コマンドで個々のパーティションを見てみましょう。i キーを押し、続いてパーティション番号を入力します。

Command (? for help): i
Partition number (1-6): 3
Partition GUID code: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (Microsoft basic data)
Partition unique GUID: 8C208C30-4E8F-4096-ACF9-858959BABBAA
First sector: 80078848 (at 38.2 GiB)
Last sector: 2033203199 (at 969.5 GiB)
Partition size: 1953124352 sectors (931.3 GiB)
Attribute flags: 0000000000000000
Partition name: ''

パーティション GUID コードに注意してください。"Microsoft basic data." と書かれています。困ったものです。Windows からは、この EXT4 パーティションを読むことができず、未フォーマットのパーティションと認識されてしまいます。最近の gdisk は、この表示をしません。2011 年以前には、Linux ファイルシステム用の GUID がなかったからです。今は Linux 用の GUID があるので、私のように古い Linux (Mint 13) を使用しないかぎり、正しい GUID が表示されます (0FC63DAF-8483-4772-8E79-3D69D8477DE4)。
パーティションのユニークな GUID も fstab 内で使うことができます。

PARTUUID=8C208C30-4E8F-4096-ACF9-858959BABBAA /data ext4 user,defaults 0 0

Linux GPT サポート

当然、Linux は、この新しい機能を完全サポートしています。ツールとして、GRUB 2 (LILO が GPT でも動くと言う人もいますが)、gdisk、および GNU parted、あるいは GUI が必要ならば GParted が必要です。man ページと Wikipedia の GUID Partition Table (日本語の Wikipedia はこちら) を読んでください。有用な情報がたくさん含まれていて、GUID をサポートするオペレーティング システム一覧や GUID ラベル一覧もあります。

Linux Foundationメンバーシップ

30人のカーネル開発者

人気コンテンツ

  1. Today's Linux 2018/01/10 2018年 1月 09日
  2. Today's Linux 2018/01/12 2018年 1月 11日
  3. Today's Linux 2018/01/15 2018年 1月 14日
  4. Today's Linux 2018/01/16 2018年 1月 15日
  5. Today's Linux 2018/01/17 2018年 1月 16日

Linux Foundationについて

Linux Foundation はLinux の普及,保護,標準化を進めるためにオープンソース コミュニティに資源とサービスを提供しています

 

The Linux Foundation Japan

サイトマップ

問い合わせ先

サイトに関するお問い合わせはこちらまで

Linux Foundation Japan

Linux Foundation

Linux Training

提案、要望

Linux.com JAPANでは広く皆様の提案、要望、投稿を受け付ける予定です。

乞うご期待!