UEFI, GPT

2011/12/03(Appeared First)
2015/05/11(Last Modified)
2017/10/02(Tiny Modification)
2018/12/26(Tiny Modification)

Windows 8の発売以来, UEFIに対応したPCが増加してきたので, 情報をまとめてみた. 

64ビット版がインストールされているのは大半がUEFIである.

BIOSからUEFIへ

BIOSはリアルモードで作成されねばならないため, 1MBのアドレスしか利用できないなど制約が多かった. 一方x86アーキテクチャ以外のIA64が出現してx86のBIOSからUEFIが必要となった(IA64ではx86のエミュレーション機能も必要とされたが) .

Intel版Mac OSでもOpen FirmwareからUEFIへと変更になった.

. また, ARMにも用意されている.

UEFIでは簡単な(fat, iso9660)ファイルシステムも理解できるようになっている. また, UEFI上のUtilityでEFIシェルなども利用できるようになっている.

UEFIの規格にはBoot Managerに相当する部分も含まれている.

UEFIの分類(裏をとっていない)

Class 1 歴史的なものItaniumで利用
Class 2 互換性を持たすために
  • CSM(Bios)の機能
  • Int 10のサポート
を行う
Class 3 Class 2でのサポート機能がなく純粋にUEFIのみ

MBRからGPTへ

ディスクのパーティション管理はMBR形式で行われてきたが, MBR形式ではLBAを用いても2TiBまでしか対応できない. また, パーティションの数もプライマリが4までと制限が強い.

2TiBより大きいディスクの出現により, GPT形式が必要になってきた. プライマリパーティションが128個まで利用できるようになる.

Linuxで用いられるfdiskはGPTに対応していないために, gdisk, partedなどを利用する必要がある(将来のfdiskではgptもサポートされるらしい.

UEFI, GPTを利用したOSのインストール

Windows編

利用しているWindowsがUEFI, GPTかどうかを調べる

クリーンインストールする場合

64bit版Windows 7, Windows Server 2008, 64bit版Windows8, Windows Server 2012が対応している. 手順は以下の通り.

  1. EFIモードでインストールメディアから起動する
    (EFIシェルから, ファイル名を指定しても良い)
    「Press any key to boot from CD or DVD」のメッセージのフォントが少し違うので, 慣れれば, どちらのモードで起動したかわかる.
  2. インストールに入る前に, コマンドプロンプトを呼び出し(WinPEで)以下の作業を行う(説明省略)
    1. diskpart
    2. select disk 0
    3. clean
    4. convert gpt
    5. create partition efi size=100
    6. create partition msr size=128
    7. create partition primary size=30720
    8. format fs=ntfs label=sys quick
    9. exit
  3. 再起動後, フツーにインストールする.

Linux編

インストールメディアにEFI/BOOT/*.efiがある場合には uefi+gptをサポートしている可能性が高い(Scientific Linux 6.3にはEFI/BOOTはあるが, 肝心の*.efiがない)

試してみてうまくいったのは, Ubuntu 11.10以降(64bit版), OpenSUSE 12.2(64bit版), Fedora17(64bit版), CentOS 6.4(64bit版), Debian7.0(64bit版). ほかにもArchlinuxのようにうまくいくものもあるが, きちんと評価できていないものについては述べない.

fatでフォーマットされたefiパーティションを作成し, /boot/efiへマウントする必要がある.

Windowsで利用する場合を含めたpartedを用いたパーティション設定の例を示す
partedで小数が利用できるので以下のような設定が可能である.

  1. parted /dev/sda
  2. mklabel gpt
  3. mkpartfs EFI fat32 1 0.2G
  4. mkpart MSR 0.2G 0.3G
  5. mkpart Windows 0.3G 30.3G
  6. mkpartfs swap linux-swap 30.3G 31G
  7. mkpart Linux 31G 41G
  8. set 1 boot on
  9. set 2 msftres on

まとめ?

新しい機械でUEFI BIOSでSecure BootがEnableになっている場合には Disableにしないと先に進めない

Windows10でsecure bootが強化されるかもしれない(New!! But Uncertain)

Note PCはDesktop? Mobile?

インストール時にマウントポイント指定のメニューに/boot/efiがある場合には, まず大丈夫そう.

ブートマネージャとして, 何が一般的になりそうかは, 現在不明?

Distro Boot Loader Remark
Ubuntu Grub2 efiパーティションを作ろうとするので, 既に存在しているときには, 存在しているパーティションを指定する. WindowsとのDual Boot設定は一番楽かもしれない.
11.04の時代からインストール可能なので, 最新版や派生物のMintも大丈夫そう.
OpenSUSE ELILO, Grub2 パーティションの指定で/boot/efiが指定できるので, efiパーティションがある場合には指定する. 
12.2ではELILOは/EFI/SuSEに, Grub2は/EFI/opensuseに作成される
Fedora Grub2 パーティションの指定で/boot/efiが指定できるので, efiパーティションがある場合には指定する.
Fedora18では手動で既存パーティションを割り当てるのに少し混乱するかもしれない(インストーラの悪口に相当するのかもしれない)
Fedora20ではMOK(Machine Owners Key)をサポートする?
Slackware Based ELILO こっちを参照 fatでフォーマットしたUSBメモリにファイルをコピーするだけなので, テストをするのには簡単. 起動に特殊な操作を必要としないので, 純粋にUEFIだけのシステムのテストができる
インストーラはGrubを使っているが, システムはELILOを利用.
.(The procedure in English is explained at http://xathrya.web.id/blog/2013/01/07/installing-slackware64-14-0-on-uefi-based-machine
installpkg -root /mnt [az]*/*should be read installpkg -root /mnt [a-z]*/*)
標準がgrub2に変更?
CentOS Grub2 6.4から対応. /EFI/redhatにefi bootが作られる. なぜかminimalだと失敗した.
派生版であるScientific Linuxでは, 無印およびCERN版はサポートしているが, FNAL版ではまだ?
Debian Grub2 Wheezyからサポート
Solaris x86 未テスト
Grub2
11.1からサポート?(2012/9/20に公開済み)
FreeBSD 詳細不明 10.1からサポート(2014/10/29リリース予定)

WindowsのEFIパーティションを大きめに作成し, インストール時に/boot/efiからリンクを張っておくと, EFIパーティション(システムパーティション)を共用できる. 特にELILOを利用する場合, EFIパーティションにカーネル等をおくので大きく取る必要がある.


UEFIではfat, iso9660位しかファイルシステムを認識しないので, インストー ルはすべてDVDから行っています. 確認をしていないのですが, fat以外のファ イルシステムのUSBメモリからのインストールはこけるかもしれない.

MBRのBoot Recordの代わりに, FATで作られたEFIシステムパーティションから起動すると考えると考えやすい. UEFI Boot Managerが見るファイルはEFIシステムパーティションのディレクトリEFIの下に作成され, それぞれのエントリーがフラッシュメモリに格納されている.

UEFIのインプリメンテーションがいろいろあるもよう.


UEFIの実現方法にもよるが, 起動エントリーが削除できなくなる場合がある。起動エントリーを整理する方法のひとつ。

  1. slack-uefi-minimal.zip(32,019,157Byte)を転送する.
  2. fat32でフォーマットしたUSBメモリに上記zipファイルを展開する.
  3. USBメモリで起動する(UEFIモードでしか起動しないはず)
  4. mkdir /src
  5. mount /dev/sdb1 /src
  6. installpkg /src/slackware64/gnuefi_tools-3.0r-sos-1210.txz
  7. modprobe efivars
  8. これでefibootmgrが利用できるので などで, nvram上のエントリを修正することができる.
  9. (気になること)Windows10ロゴマークを付けるには(2015/03/23位の記事) とある. また, Celeron N3xxx, Pentium N3700をark.intel.comで見てみると, Secure BootがYesになっている.
    これは, ノートPCにはLinuxを入れるのが難しくなるということか?

(2014/07/07)

GPTとは関係ないのですが, USB Memory(USB Stick)で

すると, 当然ですが, USBから起動するlinuxを作成できます. kernelはUSB関係をstaticで(moduleでなく)組み込む必要があるかもしれません.

boot loaderとしては単純なELILOで試してみました


(2017/10/02)

ARMも出てきそうなのでわかった分だけ追加


2018/12/26追加

UEFIセキュアブートにインストールメディアがどの程度対応しているか, Hyper-Vで試してみた

CentOS Microsoft UEFI 証明機関 o
debian 10以降 Microsoft UEFI 証明機関 o
Fedora Microsoft UEFI 証明機関 o
Manjaro   x
mint Microsoft UEFI 証明機関 o
openSUSE Microsoft UEFI 証明機関 o
Oracle Microsoft UEFI 証明機関 o
ubuntu Microsoft UEFI 証明機関 o

インストールメディアの中にEFI/Boot/bootx64.efiがあれば

でUEFI向きのインストールメディアができる(32GB以下にしたのは, fat32の上限のため)