Ubuntuを2104にアップデートしたらGforceのドライバを更新する際にUEFIのパスワードを求められるようになった。
UEFIでセキュアブートする際に署名が無いドライバを読み込む際はこの手続きが必要になったらしい。(最初の1回だけ)
めんどくさいので考えないようにしていたBIOSとUEFIの違い。そろそろ勉強しないとな〜
ということでメモ
BIOSとUEIFてそもそも何ぞ
電源ボタンを押したあと最初に動くプログラム
そこから?って話ではあるけど初めて聞く人もいると思うので一応書いておきます。
ズバリ、どちらもパソコンの電源を入れたあとOSを起動するまでにいろいろやってくれるプログラム。
何が違うの?
目的は同じ。
BIOSは大昔に作られたもの。制約が多く扱いづらい。
UEFIは最近作られたもの。マルチブートやらネットブートやら器用なことがいろいろできる。
今はUEFIが主流だけど互換性を保つためにUEFIがBIOSっぽい動きをできる設計になっている。
WindowsとかLinuxとどういう関係があるの?
WindowsとかLinuxを起動するためのプログラムがBIOSやUEFI。
オフィスビルでいう1Fの受付窓口がBIOS/UEFIで、テナントがOS。
使ったこと無いんだけど、うちのPCにも入ってる?
間違いなく入ってます。無いとOSが起動しません。
通常はPCにはWindowsしか入っていないので、電源を起動すると勝手にWindowsを呼び出してくれる。
なので通常はBIOS/UEFIの存在に気づかない。
OSを起動する仕組み
その前に基本的な話
PCはマザーボードという基盤に電源やらCPUやらディスクやらが接続されている。これはPCのスペック表に記載があるので知っている人も多いはず。
スペック表に載っていない部品に"BIOS/UEFIチップ"というのがあって、BIOS/UEFIのプログラムはここに入っている。
PCの電源を入れるとBIOS/UEFIはディスプレイやキーボードに問題が無いかチェックして、ディスクからOSを探して起動する。
この、「ディスクからOSを探して起動する」際の動きがBIOSとUEFIでは異なる。というだけの話。
BIOSの場合

- 電源を起動するとBIOSチップ内にある”ハードウェアをチェックするプログラム"が実行され、次にディスクの先頭ブロックにあるMBRと呼ばれるプログラムを探す。
- ハードウェアをチェックするプログラム(またはチェック自体)はPOSTと呼ばれている。
- 複数のディスクがある場合は検索する順番を予め決めておき、一番最初に見つけたMBRが実行される。
- MBRには第1ブートローダと呼ばれるプログラムが入っており、第1ブートローダはディスク内のどのパーティションにOSが入っているかを探す。
- 第1ブートローダはブートストラップローダと呼ばれている。仕様はPC/ATの仕様で決まっている。
- パーティションは4つまで。
- 基本パーティションと拡張(論理)パーティションの2種類があり、OSは基本パーティションに入れておくこと。
- 第1ブートローダはMBRのパーティション情報テーブルの中から"基本パーティションかつ起動フラグが立っているパーティション"を探し、そこにOSが入っていると判断する。
- ちなみにFDDやUSBの場合はMBRにいきなり次の第2ブートローダが格納されている。
- OSが入っているパーティションの先頭ブロックにある第2ブートローダを実行する。
- 第2ブートローダはブートローダと呼ばれている。通常はOSがメーカーが提供する。
- 起動フラグがたった基本パーティションが複数ある場合は最初に見つけた第2ブートローダが実行される。ただ、最近の第2ブートローダは「自分以外にもOSが無いか探し、もし見つけたらどちらを起動するかユーザーに選択させる」という動作をするのが一般的。したがって起動したいOSが「最初に見つかる」必要性はなくなった。
- 第2ブートローダはファイルシステムの中からOSの最小部分(カーネルと呼ぶ)を探して起動する。
- 以降、カーネルがOSの本体を呼び出して実行する。
この様にBIOSは小さいプログラムが次のプログラムを起動し、そこから次のプログラムを起動して、さらにそこから次のプログラムを....
という順番でOSを少しづつ起動していく。
昔はメモリもディスク容量が小さかったのでこうするしかなかった。
UEFIの場合

UEFIの場合も起動の仕組みはほぼ同じだが、以下の通り細かいところが少しづつ違う。
- UEFIチップにはセキュアブートと呼ばれるオプションがあり、このオプションが有効だとパスワードや証明書などで認証されたドライバしか読み込まれなくなる。
- 物理ディスクの先頭にあるGPTというテーブルが読み込まれる。
- BIOSではMBRと呼んでいたが、UEFIではGPTと呼んでいる。
- MBRはここに第1ブートローダとパーティション情報が入っていたが、GPTには第1ブートローダは含まれていない。第1ブートローダに相当する機能はUEFIチップ内のUEFIファームに記載されている。
- GPTが破損した場合に備えて、第2GPTというバックアップがある。
- UEFIファームはOSが入っているパーティション(UEFIシステムパーティション)を探し、その中にあるOSのブートプログラムを起動する。
- UEFIファームはGPT内のパーティションエントリーを検索し、「UEFIシステムパーティション」を探す。
- UEFIシステムパーティションにはOSパーティションのブートプログラム(MBRの第2ブートローダ相当)が格納されている。
- MBRの第2ブートローダは512byteのブロックであったためマシン語のプログラムが必要だった。UEFIシステムパーティションはファイルシステム(FAT32)を使えるため大規模で扱いやすくなった。
- OSのブートプログラムがOSの本体を読み込み、実行する。
BIOSでは小さいプログラムを何度も読み直していたが、UEFIでは1回だけで済むのがポイント。