BIOSとUEFI
ここ何年もBIOSを触っていなかったのですが、ふとディスクのブートシーケンスを変えようとして立ち上げてみたら見慣れないキレイな画面になっていました。これは本当にBIOSなのかと調べてみたら今はBIOSに代わってUEFIというものになっているそうです。
そこで、周辺の知識を整理してみました。
BIOS
そもそもBIOSとはBasic Input/Output Systemの略で、ハードウェアに一番近い(=低レベル)の入出力を行うファームウェアです。
電源ON時に読み込まれ、ハードウェアを初期化し記憶装置からブートローダを読み出す働きがあります。ファームウェアなので本来はOSとハードウェアの仲介をするものです。しかし近年のOSはロードされた後でBIOSを介さずハードウェアを直接制御するそうです。
基本的にBIOSのは次のように実行されます。
1.電源が入ると、決まった番地から実行されます。
2.そこにはBIOSが格納されているマザーボード上のROMがマップされていて、BIOSが起動します。
3.起動したBIOSはハードウェアを検出、初期化してディスクの先頭セクタにあるMBR(マスターブートレコード)よりブートローダーを起動します。
MBRには先頭にブートローダのプログラムコードが書かれています。次にパーテーション情報が記載されています。LBA(Logical Block Addressing)とよばれる方法でディスクのセクタ(ブロック)に番号を付けて、パーテーションの開始位置と終了位置を記憶しています。
しかし近年このLBAによる管理の限界が問題になっています。解決する手法が流通するようになったので、「なっていました」といった方が正しいかもしれません。LBAでは32ビットの数値を使いディスクを管理しているのですが、その上限値よりも製造されるディスクの容量が大きくなってしまったのです。
ディスクの1セクタは通常512バイトで、それが2の32乗個あったとき2TBとなります。つまりLBAでは2TB以上のディスク領域を管理できないということになります。
UEFI
そのような問題を解決するために用いられるようになったのがUEFI(Unified Extensible Firmware Interface)です。UEFIはMBR形式を互換しますが基本的には全く別のものです。また、UEFIはEFIという仕様を元に制定されました。
UEFIでは、問題のあるMBR方式にかえてGPT(GUID Partition Table)方式が用いられます。これは64bitの数値でディスクのセクタを管理します。
扱えるセクタ数に加え、プライマリパーテーションの数も増えています。MBR管理では4つのプライマリパーテーションまたは3つのプライマリパーテーション+1つの拡張パーテーションという形でパーテーション管理をしていましたが、GPTでは128個までのプライマリーパーテーションが持てるようになっています。
GUID(Globally Unique Identifier)
少し話がそれますが、GPTのGUID(Globally Unique Identifier)とは、128ビットの2進数値で、グローバルなネットワークで一意な識別子として扱うことができる符号です。よくWindowsのレジストリなどでは{}に入った形で見たことがあるかもしれません。
次のように16進数表記で、8-4-4-4-12桁で区切ります。
ちなみに、このGUIDでセクタを管理するわけでありません。
パーテーションテーブルとディスク構造の違い
GPTとMBRにおけるパーテーションの違いをもう少し詳しく見ていきます。
BIOSで用いられるMBR形式のブートでは、ディスクの一番先頭のセクタ(512byte)に「マスターブートレコード」と「パーテーションテーブル」を持ちます。
512バイトという制限があるためできることが限られています。そのため基本的に橋渡し役となるプログラムが記述されています。例えばLinuxのGRUB(v1)ではここにある「ステージ1」と呼ばれるコードを実行します。ステージ1は「ステージ1.5」を読み込んで実行します。この段階でファイルシステムを認識できるようになります。そのあとで「ステージ2」が実行されます。冗長と思えるかもしれませんが、以前のブートローダであるLILOよりもフレキシブルでグラフィカルな起動処理ができます。
ちなみに、GRUBのステージ1.5はMBRと最初のパーテーションの間に存在するそうです。ステージ2はファイルとして/bootディレクトリ等に存在していいます。
GRUBによるブートの話は「Linuxがブートするまで」を参考にさせていただきました。
このような話を持ち出したのは、MBRのマスターブートレコードはファイルではないということを説明するためです。
一方のUEFIのGPT形式では、UEFIブート用に確保されたFATフォーマットのファイルシステムにあるファイルを使ってブートします。
またパーテーションの構造も違います。MBR形式では、MBRの後にパーテーションの領域がつながるシンプルなものでしたが、GTP形式では次のような構成となります。
- Protective MBR
誤ってMBR形式で読みだされないようにするための互換領域です。0x55で終わります。
- Primary GUID Partition Table Header
- GUID Partition Table Entry
1~128までのパーテーションのエントリーが記述されます。
- UEFIブート用ファイルシステム
- 実際のデータ(パーテーション)
- Backup GUID Partition Table Header
- Backup GUID Partition Table Entry
最後にパーテーションエントリーのバックアップがあります。
ちなみにWindowsではUEFIで構成すると、起動用のディスク領域が「EFIシステムパーテーション」として認識されます。これはESPと略されることもあります。
Windows10で、現在使っているPCのディスク構成がMBRなのかGPTなのかを確認するには、「コントロールパネル」、(「システムとセキュリティ」)、「コンピューターの管理」と進み開いたメニューの左側のペインで「ディスクの管理」を選択するとわかります。
ESPがあるかどうかを確認すればわかりますが、各ディスクのエントリーを右クリックしてディスクのプロパティを表示させ、「ボリューム」タブを表示させるとると記述してあります。
余談。拡張されて新しい技術に対応できるようになったのはいいのですが、メーカーごとにUEFIのUIが大きく違って逆に戸惑います。昔のシンプルなBIOSの方が好きなのは筆者だけでしょうか。