この記事の対象読者
- PCを自作したことがある、または興味がある方
- OSインストール時に「UEFI」「レガシーBIOS」で迷ったことがある方
- Linuxのデュアルブート環境を構築したい方
- 「なんとなく」でBIOS設定をいじっている方
この記事で得られること
- BIOSとUEFIの根本的な違いの理解
- なぜ今UEFIへの移行が進んでいるのかの背景知識
- MBRとGPTの違いと、適切な選択基準
- 自分のPCがどちらを使っているかの確認方法
この記事で扱わないこと
- BIOSやUEFIの開発・カスタマイズ方法
- Secure Bootの詳細な設定手順
- 特定メーカーのBIOS/UEFI設定画面の操作方法
1. ある日のOS再インストール
「Windows cannot be installed to this disk. The selected disk is of the GPT partition style.」
自作PCにWindows 11を再インストールしようとしたとき、このエラーに遭遇した。GPT?何それ?MBRに変換すればいいの?でもそれだとデータ消える...?
調べていくうちに、これが単なるパーティション形式の問題ではなく、PCの起動方式そのものに関わる話だと気づいた。BIOSとUEFI、MBRとGPT。これらの関係性を理解していないと、OSインストールで詰むし、デュアルブートも正しく構成できない。
この記事では、PCの起動を支える2つのファームウェア「BIOS」と「UEFI」の違いを、歴史的背景から実践的な知識まで体系的に解説する。
ここまでで、なぜこの知識が必要かイメージできただろうか。次は、これらの用語を整理していこう。
2. 前提知識の確認
本題に入る前に、この記事で使う用語を整理しておく。
2.1 ファームウェアとは
ファームウェア(Firmware)とは、ハードウェアに組み込まれた低レベルのソフトウェアのこと。「ハード」と「ソフト」の中間という意味で「ファーム(firm = 固い)」と呼ばれる。PCの電源を入れてからOSが起動するまでの処理を担当する。
2.2 パーティションテーブルとは
パーティションテーブルとは、ストレージ(HDD/SSD)をどのように区切るかを記録したデータ構造のこと。「この領域はOSが入っている」「この領域はデータ用」といった情報を管理する。
2.3 ブートローダーとは
ブートローダー(Boot Loader)とは、ファームウェアから呼び出されてOSを起動するプログラムのこと。WindowsならWindows Boot Manager、LinuxならGRUBなどがこれに該当する。
これらの用語が押さえられたら、次に進もう。
3. BIOSとUEFIが生まれた背景
3.1 BIOSの誕生(1981年)
BIOSはBasic Input/Output Systemの略。1981年、IBMが初代IBM PC(Model 5150)を発売した際に搭載されたファームウェアだ。
当時のPCは8088プロセッサ(4.77MHz)、最大640KBのメモリという環境。BIOSは以下の役割を担っていた。
- POST(Power-On Self-Test): ハードウェアの初期化とテスト
- ブートローダーの呼び出し: ディスクの先頭セクタ(MBR)を読み込んで実行
- ランタイムサービス: キーボード入力やディスクアクセスのAPI提供
BIOSは16ビットリアルモードで動作し、アクセス可能なメモリは1MBに制限されていた。しかし、この仕様が40年以上にわたって互換性のために維持されてきた。
3.2 UEFIの誕生(2000年〜)
UEFIはUnified Extensible Firmware Interfaceの略。もともとはIntelが64ビットItaniumプロセッサ向けに開発した「EFI」が前身だ。
BIOSの限界が明らかになったのは2000年代半ば。
- 2TBを超えるHDDが登場(MBRの32ビットアドレッシングでは扱えない)
- 高速な起動への要求
- セキュアブートの必要性
2005年、IntelはEFIの開発をUEFI Forumに移管。AMD、Apple、Dell、HP、Microsoft、Lenovoなど140社以上が参加する業界標準として発展した。
最新の仕様: 2024年12月にUEFI 2.11、ACPI 6.5a、PI 1.9が同時リリースされている。
背景がわかったところで、次は具体的な違いを見ていこう。
4. BIOSとUEFIの決定的な違い
4.1 アーキテクチャの違い
| 項目 | BIOS | UEFI |
|---|---|---|
| 動作モード | 16ビット リアルモード | 32/64ビット プロテクトモード |
| アクセス可能メモリ | 1MB | 制限なし(64ビット空間) |
| ドライバ形式 | INT 13h割り込み | EFIドライバ(.efi) |
| 設定保存先 | CMOS RAM | NVRAM |
| ユーザーインターフェース | テキストベース | GUI対応(マウス操作可) |
4.2 起動プロセスの違い
BIOS + MBRの起動フロー
電源ON → POST → MBR読み込み → ブートローダー → OS
↑ ↑
16ビットモード 512バイトの制約
UEFI + GPTの起動フロー
電源ON → POST → ESP内の.efi検索 → ブートローダー → OS
↑ ↑
32/64ビットモード ファイルシステム認識
UEFIはFAT32ファイルシステムを直接認識できるため、ESP(EFI System Partition)から直接ブートローダーを読み込める。これが起動高速化の一因だ。
4.3 パーティションテーブルの違い
| 項目 | MBR | GPT |
|---|---|---|
| 最大ディスクサイズ | 2TB | 18EB(エクサバイト) |
| 最大パーティション数 | 4(拡張パーティション使用で制限緩和) | 128 |
| 冗長性 | なし | バックアップテーブルあり |
| 整合性チェック | なし | CRC32チェックサム |
GPTはディスクの末尾にバックアップテーブルを持つため、先頭が破損しても復旧の可能性がある。
4.4 セキュリティの違い
UEFIの最大の特徴の一つがSecure Boot。OSのブートローダーがデジタル署名されているか検証し、マルウェアによる起動プロセスの改ざんを防ぐ。
Secure Bootの信頼チェーン:
PK(Platform Key)
↓ 署名
KEK(Key Exchange Key)
↓ 署名
DB(Signature Database)
↓ 検証
OSブートローダー(.efi)
ただし、Secure Bootは完璧ではない。2024年には200以上のモデルで出荷時の鍵管理に問題がある「PKfail」脆弱性が発見されている。
基本的な違いが理解できたところで、実際に自分のPCを確認してみよう。
5. 実際に確認してみよう
5.1 Windowsでの確認方法
方法1: msinfo32コマンド
# PowerShellまたはコマンドプロンプトで実行
msinfo32
「システム情報」ウィンドウが開く。「BIOSモード」の項目を確認。
-
UEFI→ UEFI起動 -
レガシ→ BIOS起動
方法2: diskpartコマンド
# 管理者権限で実行
diskpart
list disk
「GPT」列に*があればGPTディスク。
5.2 Linuxでの確認方法
方法1: efivarsの存在確認
# このディレクトリが存在すればUEFI起動
ls /sys/firmware/efi/efivars
方法2: fdiskコマンド
sudo fdisk -l /dev/sda
出力に「Disklabel type: gpt」とあればGPTディスク。
5.3 設定ファイルテンプレート
GRUB設定(UEFI環境用): /etc/default/grub
# /etc/default/grub - UEFI環境での推奨設定
# タイムアウト設定
GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu
# デフォルトエントリ
GRUB_DEFAULT=0
# カーネルパラメータ
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
# UEFI固有の設定
GRUB_DISABLE_OS_PROBER=false
# 解像度設定(UEFI環境ではGOPを使用)
GRUB_GFXMODE=1920x1080
GRUB_GFXPAYLOAD_LINUX=keep
GRUB設定(レガシーBIOS環境用): /etc/default/grub
# /etc/default/grub - レガシーBIOS環境での設定
# タイムアウト設定
GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu
# デフォルトエントリ
GRUB_DEFAULT=0
# カーネルパラメータ
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
# レガシーBIOS固有の設定
# VGAモードを使用(GOPは使えない)
GRUB_GFXMODE=auto
GRUB_TERMINAL=console
GRUB設定(デュアルブート環境用): /etc/default/grub
# /etc/default/grub - Windows/Linuxデュアルブート環境
# タイムアウト(OS選択のため長めに)
GRUB_TIMEOUT=10
GRUB_TIMEOUT_STYLE=menu
# 最後に選択したOSを記憶
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
# カーネルパラメータ
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
# 重要: Windows検出を有効化
GRUB_DISABLE_OS_PROBER=false
# 解像度設定
GRUB_GFXMODE=1920x1080
GRUB_GFXPAYLOAD_LINUX=keep
設定変更後は必ず以下を実行。
sudo update-grub
5.4 よくあるエラーと対処法
| エラー | 原因 | 対処法 |
|---|---|---|
| Windows cannot be installed to this disk. The selected disk is of the GPT partition style. | UEFIモードで起動していない | BIOS設定でUEFIブートを有効化、またはCSMを無効化 |
| The selected disk has an MBR partition table. | BIOSモードで起動している | BIOS設定でレガシーブートを有効化、またはディスクをGPTに変換 |
| No bootable device found | ESPが見つからない | ESPの存在確認、ブート順序の確認 |
| Secure Boot violation | 署名されていないブートローダー | Secure Bootを一時無効化、またはMOKに署名を登録 |
| GRUB rescue > | GRUBが破損 | ライブUSBから起動してGRUB再インストール |
実際の確認方法がわかったところで、次はどのような状況でどちらを選ぶべきかを見ていこう。
6. ユースケース別ガイド
6.1 新規PCの構築(2020年以降のハードウェア)
推奨: UEFI + GPT
理由:
- 最新ハードウェアはUEFIのみ対応が増加(Intel、AMDともにCSM廃止の方向)
- Windows 11はUEFI + Secure Boot必須
- 高速起動、大容量ストレージ対応のメリット
確認コード(PowerShell):
# Windows 11互換性確認スクリプト
# UEFI/TPM/Secure Bootの状態を確認
# BIOSモード確認
$biosMode = (Get-WmiObject -Class Win32_ComputerSystem).BootupState
$firmwareType = (Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\State" -ErrorAction SilentlyContinue)
Write-Host "=== Windows 11 互換性チェック ===" -ForegroundColor Cyan
# UEFI確認
$uefiCheck = Confirm-SecureBootUEFI -ErrorAction SilentlyContinue
if ($uefiCheck) {
Write-Host "[OK] UEFI: 有効" -ForegroundColor Green
} else {
Write-Host "[NG] UEFI: 無効またはレガシーBIOS" -ForegroundColor Red
}
# Secure Boot確認
try {
$secureBootState = Confirm-SecureBootUEFI
Write-Host "[OK] Secure Boot: 有効" -ForegroundColor Green
} catch {
Write-Host "[NG] Secure Boot: 無効" -ForegroundColor Red
}
# TPM確認
$tpm = Get-Tpm
if ($tpm.TpmPresent -and $tpm.TpmEnabled) {
Write-Host "[OK] TPM: 有効(バージョン確認推奨)" -ForegroundColor Green
} else {
Write-Host "[NG] TPM: 無効または非搭載" -ForegroundColor Red
}
# ディスクパーティション確認
$systemDisk = Get-Disk | Where-Object { $_.IsBoot -eq $true }
Write-Host "`nシステムディスク情報:"
Write-Host " パーティションスタイル: $($systemDisk.PartitionStyle)"
Write-Host " サイズ: $([math]::Round($systemDisk.Size / 1GB, 2)) GB"
6.2 古いPCの延命(2012年以前のハードウェア)
推奨: BIOS + MBR
理由:
- UEFIに対応していない可能性
- 32ビットOSが必要な場合
- ドライバの互換性問題を回避
確認コード(Linux):
#!/bin/bash
# ハードウェア世代確認スクリプト
echo "=== システム情報 ==="
# CPU情報
echo "CPU:"
grep "model name" /proc/cpuinfo | head -1 | cut -d: -f2
# BIOSバージョン
echo -e "\nBIOS/UEFI情報:"
if [ -d /sys/firmware/efi ]; then
echo " 起動モード: UEFI"
cat /sys/firmware/efi/fw_platform_size 2>/dev/null && echo "bit モード"
else
echo " 起動モード: レガシーBIOS"
fi
# DMI情報
echo -e "\nDMI BIOS情報:"
sudo dmidecode -t bios | grep -E "Vendor|Version|Release Date" | head -3
# ディスク情報
echo -e "\nディスクパーティション:"
lsblk -o NAME,SIZE,TYPE,PTTYPE | head -10
6.3 デュアルブート環境の構築
推奨: UEFI + GPT(統一すること)
重要: Windows と Linux を同じ起動方式に揃えないと、ブートローダーの管理が複雑になる。
確認・設定コード(Linux):
#!/bin/bash
# デュアルブート環境セットアップ確認スクリプト
echo "=== デュアルブート環境チェック ==="
# ESP(EFI System Partition)の確認
echo -e "\n1. ESP(EFI System Partition)確認:"
esp_partition=$(lsblk -o NAME,PARTTYPE,MOUNTPOINT | grep -i "c12a7328-f81f-11d2-ba4b-00a0c93ec93b")
if [ -n "$esp_partition" ]; then
echo " [OK] ESP検出: $esp_partition"
else
echo " [NG] ESPが見つかりません"
fi
# ESPのマウント状態
echo -e "\n2. ESPマウント状態:"
if mountpoint -q /boot/efi 2>/dev/null; then
echo " [OK] /boot/efi にマウント済み"
ls -la /boot/efi/EFI/ 2>/dev/null
else
echo " [注意] /boot/efi 未マウント"
fi
# ブートエントリ確認
echo -e "\n3. UEFIブートエントリ:"
if command -v efibootmgr &> /dev/null; then
efibootmgr -v 2>/dev/null | grep -E "Boot[0-9]+"
else
echo " efibootmgrがインストールされていません"
echo " インストール: sudo apt install efibootmgr"
fi
# os-prober確認(Windows検出用)
echo -e "\n4. Windows検出:"
if command -v os-prober &> /dev/null; then
windows_detected=$(sudo os-prober 2>/dev/null | grep -i windows)
if [ -n "$windows_detected" ]; then
echo " [OK] Windows検出: $windows_detected"
else
echo " [注意] Windowsが検出されませんでした"
fi
else
echo " os-proberがインストールされていません"
echo " インストール: sudo apt install os-prober"
fi
echo -e "\n=== 推奨アクション ==="
echo "1. sudo update-grub を実行してGRUB設定を更新"
echo "2. /etc/default/grub で GRUB_DISABLE_OS_PROBER=false を確認"
ユースケースが把握できたところで、この記事を読んだ後の学習パスを確認しよう。
7. 学習ロードマップ
この記事を読んだ後、次のステップとして以下をおすすめする。
初級者向け(まずはここから)
中級者向け(実践に進む)
- UEFI Specification Version 2.11 - 公式仕様書
- Arch Wiki - UEFI - 実践的なガイド
- Microsoft Learn - UEFI firmware requirements
上級者向け(さらに深く)
- TianoCore EDK II - UEFIのリファレンス実装
- NSA - Guidance for Managing UEFI Secure Boot - セキュリティガイダンス
- ACPI Specification Version 6.6 - 電源管理の詳細
8. まとめ
この記事では、PCの起動を支えるBIOSとUEFIについて以下を解説した。
- BIOSは1981年から続くレガシー規格で、16ビットモード・2TB制限などの制約がある
- UEFIは2000年代に登場した後継規格で、大容量ストレージ・高速起動・Secure Bootに対応
- MBRとGPTはパーティションテーブルの形式で、それぞれBIOSとUEFIに対応
- 新規構築ではUEFI + GPT一択、レガシーハードウェアではBIOS + MBRを検討
私の所感
正直、最初にこのエラーに遭遇したときは「なんでこんなややこしい仕組みになってるんだ」と思った。でも歴史を辿ると、40年以上にわたる互換性維持の努力が見えてきて、少し見方が変わった。
レガシーBIOSは「枯れた技術」として安定している一方、UEFIは現在進行形で進化している。2024年12月にも仕様が更新され、RISC-Vアーキテクチャへの対応が強化された。
これからPCを組む人、OSをインストールする人は、まず自分のハードウェアがどちらに対応しているかを確認してほしい。それだけで、トラブルの半分は回避できるはずだ。
参考文献
- UEFI Forum - Specifications - UEFI 2.11, ACPI 6.5a, PI 1.9 公式仕様
- Wikipedia - BIOS - BIOSの歴史と技術詳細
- Wikipedia - UEFI - UEFIの概要と最新動向
- Microsoft Learn - UEFI firmware requirements - Windows向けUEFI要件
- IBM PC BIOS Source Code Reconstruction - 1981年オリジナルBIOSの復元プロジェクト
- NSA - Guidance for Managing UEFI Secure Boot (2025) - セキュリティガイダンス
関連記事