みんなやってるのに、つまづいた
今まで、あまりに古い、BIOSのPCばかりだった。
初めてUEFIにArchLinuxを入れた時に、つまづいたことを思い出して、メモ。
つまづいたポイント
ArchLinux Wikiには、UEFIもESPもGPTもGRUBもパーティショニングもインストールガイドも、情報が盛りだくさんだが、
- GPTのパーティションツールに、何を使えばいいかわからない
- ESPと/bootが、何だかわからない
- ブートローダーに何を使えばいいかわからない
- インストール時のmount手順がわからない
いずれも、今思えば、なんでわからなかったんだろう…。
パーティションツール
パーティションユーティリティを読むと、fdiskに慣れているならgdiskか。
パーティションでは、UEFI用にはgdiskではなくGNU Partedが紹介されているが、gdiskでも特に困らなかった。
インストーラーisoには、gdiskもGNU Partedも両方入っていた。
ちなみに、GPartedはGUIで、GNU PartedがCUIなのか。混同。
ESPと/boot
ESP
ESPの説明そのまんま。
ブートローダーが含まれる、ファイルシステムがFAT32のパーティション。
ESPのサイズ
ArchLinuxでは512MiBが推奨とある。Windowsでは最小100MB、Ubuntuでは200MiBが推奨らしい。4Kセクタなら最小256MB?
どちらにせよ512MiBあれば十分ということだな。
ESPの場所
ESPはどの順番に置いてもよい。
パーティションのフォーマットの例では、ESPは/dev/sda2にあるが、最初に置きたくなるのが人情なので、/dev/sda1に置いた。
ESPのbootフラグ
GNU Partedではbootフラグの設定があるのに、gdiskにはないのが不安だった。
こちらによると、ESPはGUIDで識別されるようだ。
gdiskでは、Typeにef00を設定することで、ESP用のGUIDが設定されるものと思われる。
GNU Partedでは、GPTでbootフラグを設定すると、ESP用のGUIDが設定されるのかな。(未確認)
/boot
systemd-bootでは、ESPは/bootにmountされることが強く推奨されるそうだし、GRUBでも通常ESPは/bootだそうなので、ESPは/bootにmountすることにする。
バインドマウントで「ESPを自由に扱えるようにする」メリットがいまいちわからないが、他のディストリビューションでは/boot/efiなどにmountされたりするらしい。
ブートローダー
ブートローダーではUEFI用にsystemd-bootが紹介されているが、GRUBもUEFIで使える。
GRUBは、設定ファイルをgrub-mkconfig
で自動生成できるので、UUIDなどを手書きしなくてよく、個人的には楽だと思った。
UEFIでのGRUBは、あらかじめefibootmgrも入れておく必要があるようだ。
でないと、grub-install
の時に、grub-install: error: efibootmgr: not found.
と怒られる。
インストール時のmount手順
個人的には、これがいちばんはまった。今見ると、単にインストールガイドの通り。
- (ESPとルートの)パーティションを切る
- (ESPとルートの)フォーマットをする
- ルートパーティションをmountする
- ルートパーティション上に、マウントポイント/bootを
mkdir
で作る - ルートパーティションの/bootに、ESPをmountする
-
pacstrap
する - ルートパーティションに
arch-chroot
する -
pacman
でGRUBとefibootmgrをインストールする -
grub-install
とgrub-mkconfig
する
これでよさそうだが、インストールガイドのページそのものには、ESPのフォーマットが記載されていないので、ESPのフォーマットを見て、mkfs.fat -F32 /dev/sdxY
してからmount。
pacstrap
の前にESPが/bootにmountされているのもポイントで、後から/bootにmountしてしまうと、/bootにあるkernelが見えなくなり、GRUBがkernelを検知できないままgrub.cfgを作ることになり、起動できなくなる。
何でこんなことをしてしまったのかわからないが、わからない時は変なことをするものだ。(言い訳)
最後に、ちょっと実験
試しに、ESPを/bootでなく/espにmountして、grub-install --efi-directory=/esp
したら、ESPには/efi/EFI/grub/grubx64.efi
のみが生成され、grub.cfgなどは/boot/grub/
以下に生成された。
しかもext4上の/boot/grub/grub.cfg
が読まれて起動したので、ESP上のgrubx64.efiは、例えESPにgrub.cfgが無くても探すのかな。
これで、GRUBとESPと/bootの関係が分かった気がした。
その他
いずれもググればいくらでも出てくるが、どれもひと手間必要で、はまった。
- VMwareで仮想マシンをUEFIにする
- .vmxに
firmware = "efi"
を追記
- .vmxに
- VirtualBoxで仮想マシンをUEFIにして、GRUBから起動する
- UEFIにするのは、GUI操作で簡単
- ブートローダーの設定は、何種類か方法があるが、
grubx64.efi
の場所(区切りは¥
)を書いたstartup.nsh
を、ESP直下に置く
- 素のext4からLVMに引っ越して起動する ←UEFIは関係ないが、ちょーはまった!
参考文献
こちらにほとんど同じ環境でもっと詳しい手順が!