|||||||||||||||||||||

なんぶ電子

- 更新: 

BIOSとUEFI

GPT

ここ何年も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桁で区切ります。

3a81278d-236b-4be7-a780-e1ceda618b41

ちなみに、この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形式では次のような構成となります。

  1. Protective MBR

    誤ってMBR形式で読みだされないようにするための互換領域です。0x55で終わります。

  2. Primary GUID Partition Table Header
  3. GUID Partition Table Entry

    1~128までのパーテーションのエントリーが記述されます。

  4. UEFIブート用ファイルシステム
  5. 実際のデータ(パーテーション)
  6. Backup GUID Partition Table Header
  7. Backup GUID Partition Table Entry

    最後にパーテーションエントリーのバックアップがあります。

ちなみにWindowsではUEFIで構成すると、起動用のディスク領域が「EFIシステムパーテーション」として認識されます。これはESPと略されることもあります。

Windows10で、現在使っているPCのディスク構成がMBRなのかGPTなのかを確認するには、「コントロールパネル」、(「システムとセキュリティ」)、「コンピューターの管理」と進み開いたメニューの左側のペインで「ディスクの管理」を選択するとわかります。

ESPがあるかどうかを確認すればわかりますが、各ディスクのエントリーを右クリックしてディスクのプロパティを表示させ、「ボリューム」タブを表示させるとると記述してあります。

MBR

余談。拡張されて新しい技術に対応できるようになったのはいいのですが、メーカーごとにUEFIのUIが大きく違って逆に戸惑います。昔のシンプルなBIOSの方が好きなのは筆者だけでしょうか。

筆者紹介


自分の写真
がーふぁ、とか、ふぃんてっく、とか世の中すっかりハイテクになってしまいました。プログラムのコーディングに触れることもある筆者ですが、自分の作業は硯と筆で文字をかいているみたいな古臭いものだと思っています。 今やこんな風にブログを書くことすらAIにとって代わられそうなほど技術は進んでいます。 生活やビジネスでPCを活用しようとするとき、そんな第一線の技術と比べてしまうとやる気が失せてしまいがちですが、おいしいお惣菜をネットで注文できる時代でも、手作りの味はすたれていません。 提示されたもの(アプリ)に自分を合わせるのでなく、自分の活動にあったアプリを作る。それがPC活用の基本なんじゃなかと思います。 そんな意見に同調していただける方向けにLinuxのDebianOSをはじめとした基本無料のアプリの使い方を紹介できたらなと考えています。

広告