LoginSignup
8
12

More than 5 years have passed since last update.

ArchLinuxをGPTなUEFIのGRUBで起動する

Last updated at Posted at 2017-04-08

みんなやってるのに、つまづいた

今まで、あまりに古い、BIOSのPCばかりだった。
初めてUEFIにArchLinuxを入れた時に、つまづいたことを思い出して、メモ。

つまづいたポイント

ArchLinux Wikiには、UEFIESPGPTGRUBパーティショニングインストールガイドも、情報が盛りだくさんだが、

  • 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手順

個人的には、これがいちばんはまった。今見ると、単にインストールガイドの通り。

  1. (ESPとルートの)パーティションを切る
  2. (ESPとルートの)フォーマットをする
  3. ルートパーティションをmountする
  4. ルートパーティション上に、マウントポイント/bootをmkdirで作る
  5. ルートパーティションの/bootに、ESPをmountする
  6. pacstrapする
  7. ルートパーティションにarch-chrootする
  8. pacmanでGRUBとefibootmgrをインストールする
  9. grub-installgrub-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"を追記
  • VirtualBoxで仮想マシンをUEFIにして、GRUBから起動する
    • UEFIにするのは、GUI操作で簡単
    • ブートローダーの設定は、何種類か方法があるが、grubx64.efiの場所(区切りは¥)を書いたstartup.nshを、ESP直下に置く
  • 素のext4からLVMに引っ越して起動する ←UEFIは関係ないが、ちょーはまった!

参考文献

こちらにほとんど同じ環境でもっと詳しい手順が!

8
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
12