UEFIマシン上のArchLinuxのブートローダをGRUB2からLimineに変更する
2024-09-22
ブートローダーを変更してみよう
こんにちは。今回はArch LinuxのブートローダーをGRUB2からLimineに変更してみます。筆者はこれまでGRUB2を使用してきましたが、新しいブートローダを試してみたくなり変更してみました。現在、正常に動作しているブートローダを変更するメリットというのは実利的な観点からは皆無なのですが、そこをいじって遊べるのがLinuxなどフリーOSの醍醐味だと思っています。今日もOSをカスタムして楽しみましょう。
作業前の注意
この作業ではOSを起動するためのブートローダーを交換する作業ですので、作業に失敗するとOSが起動できなくなる可能性があります。もしOSが起動できなくなった場合にはArch Linuxのインストールメディアを用いて復旧作業を行う必要があります。この復旧作業を行う自信のない方はブートローダーに手を加えることは避けるのが賢明です。この記事では筆者が実際に行った手順を公開しますが、お使いのシステムのパーティション構成、アーキテクチャによって作業内容が若干異なる場合があることをご了承ください。特にUEFIファームウェアによってはefibootmgr
によるNVRAMの変更が上手く行かない場合もあります。作業を行う際は必ずご自身の責任において行ってください。
今回の作業環境について
まず筆者の作業環境についてまとめておきます。今回はUEFIマシンにLimineを入れていきます。Legcy BIOSについてはArchWikiをご覧ください。
項目 | 値 |
---|---|
OS | Arch Linux |
BIOSシステム | UEFI |
ESP(EFI System Partition) | /boot |
Limineとは
Limineは軽量で高度でポータブルなブートローダです。multiboot1とmultiboot2の仕様に対応しています。Limine Boot Protocolのリファレンス実装として開発されました。
GRUB2のように肥大化することを避け、ブートローダの責任をシンプルに保とうとしています。興味のある方はLimine’s Design Philosophyをご覧ください。
LimineはLegcy BIOS, UEFIどちらのファームウェアにも対応しています。
Limineのインストール
まずはpacmanでlimineパッケージをインストールします。
pacman -S limine
次に/usr/share/limine/BOOTX64.efi
を/boot/EFI/limine/
以下にコピーします。
mkdir -p /boot/EFI/limine
cp /usr/share/limine/BOOTX64.efi /boot/EFI/limine/
次にefibootmgr
でNVRAMにLimineを登録しましょう。sdXはESPのディスク、Yはパーティション番号です。もしESPが/dev/sda1
の場合はsdX=sda, Y=1としてください。
efibootmgr \
--create \
--disk /dev/sdX \
--part Y \
--loader /EFI/limine/BOOTX64.efi \
--label "Limine"
次にefibootmgr
コマンドでefiファイルの呼び出し順がGRUBよりLmineが優先度が高いことを確認します。優先順位の確認はBootOrder
の値を確認します。ここでGRUBが0001、Limineが0002とすると
BootOrder: 0002, 0001, ...
のように表示されていればOKです。もしLimineの優先順位が低い場合はefibootmgr
コマンドで変更します。
補足しますと、BOOTX64.efiファイルをコピーする先を例えば/boot/EFI/BOOT/BOOTX64.efi
にした場合、efibootmgrで設定をしなくてもefiファームウェアが自動で探しにいくのでefibootmgr
による登録をしなくても起動できる場合があります。
Limineの設定
GRUB2の場合grub-mkconfig
コマンドで自動で設定ファイルを生成してくれますが、Limineは設定ファイルを手動で作成する必要があります。Limineはカスタマイズ性の高いブートローダなので自由度が高い分、設定できる項目数も多いです。ここでは最低限、Arch Linuxを起動するための設定を書きますが、その他の設定に関しては公式ドキュメントをご覧ください。
/boot/limine.configの設定例
TIMEOUT=5
:Arch Linux
PROTOCOL=linux
KERNEL_PATH=boot:///vmlinuz-linux
CMDLINE=root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw
MODULE_PATH=boot:///initramfs-linux.img
上記ではシンプルにArch Linuxを起動するためだけにTIMEOUT
の項目のみ設定しましたが、壁紙に画像を設定するなど細かいカスタマイズが可能です。壁紙画像にはBMP, PNG, JPEG画像が使用可能です。
起動試験
ではlimineを使用して起動できるか確認してみましょう。システムを再起動します。以下のようなが画面が出ればOKです。
GRUB2の削除(任意)
この作業はLimineで安定的にOSの起動ができるようになり、Grubが不要になった方のみ行ってください。もし再度Grubを使用する可能性のある方は残しておいた方が良いでしょう。まずはefibootmgr
でGRUB2の登録を削除しましょう。ここではGRUB2が0001で登録されていると仮定します。
efibootmgr -b 1 -B
次にGRUB2の関連ファイルがあるディレクトリを削除していきます。今回はgrubx64.efi
ファイルが/boot/EFI/grub/grubx64.efi
に存在すると仮定します。
rm -r /boot/grub
rm -r /boot/EFI/grub
まとめ
UEFI BIOSのマシンにインストールしたArch LinuxをLimineを使用して起動できるようにしました。Limineを使ってみて、GRUB2は他のOSを検出して(os-proberが必要)設定ファイルを自動生成してくれる非常に便利な反面、ブートローダーとしてのシンプルな機能以外にも多くの仕事をしていたんだなと改めて思いました。
Arch Linuxの公式リポジトリにある他のブートローダとしてはrEFIndがあります。UEFI専用のブートローダでありLegacy BIOSには非対応ですが、興味のある方はrEFIndも調べてみてください。