Limine
Limine は、先進的で、ポータブルな、マルチプロトコルのブートローダーです。元は Limine ブートプロトコルのリファレンス実装として開発されましたが、Linux のブートや他のブートローダのチェインロードもサポートしています。
サポートされているファイルシステム
Limine は FAT12、FAT16、FAT32、ISO9660 をサポートしています。これらに加えて、ext2 から ext4 までの試験的なサポートも存在していますが、上流でのサポートは限られています。サポートされているファイルシステムは、Limine の設計理念に基づいて意図的に制限されています。
インストール
limine をインストールしてください。
Limine ブートローダーをインストールする
BIOS システム
MBR と GPT は両方ともサポートされており、インストール手順は非常に似ています。
デプロイ
コアのブートローダーファイルは /usr/share/limine
にあります。BIOS システムにインストールする際に最も重要なのは limine-bios.sys
ファイルです。このファイルには、Limine が起動するのに必要なステージ3のコードが含まれています。このファイルは、Limine を導入するディスク上の任意のパーティション上のルートディレクトリか、/boot
、/limine
、/boot/limine
ディレクトリのどれかに置く必要があります。さらに、そのファイルシステムがサポートされている必要があります。
例:
# cp /usr/share/limine/limine-bios.sys /boot/
次に、ステージ1とステージ2をディスクにデプロイする必要があります。Limine は使用されているスキームを自動検出して適切にインストールするので、MBR と GPT のどちらが使用されていようとインストール方法は同じです:
# limine bios-install /dev/sdX
/dev/sdX
の部分は、Limine をインストールするディスク(パーティションではありません)に書き換えてください。例えば、/dev/sda
や /dev/nvme0n1
です。ブロックデバイス名のスキームについては デバイスファイル#ブロックデバイスの名前 を見てください。
UEFI システム
UEFI システム上に Limine をデプロイするには、/usr/share/limine/BOOTX64.EFI
ファイルを EFI システムパーティションにコピーします。通常 esp/EFI/BOOT/BOOTX64.EFI
にコピーしますが、別のファイル名を使用することもできます。ただし、UEFI BIOS がそのファイルを検出できる必要があります。GRUB とは異なり、Limine は NVRAM に Limine のブートローダーエントリを追加しません。Limine のエントリをセットアップするには efibootmgr を使用してください。
UEFI+BIOS 起動可能ドライブ
ドライブが GPT でフォーマットされていて、かつ EFI システムパーティション を含んでいる場合、BIOS と UEFI の両方のデプロイ手順を行うことにより、そのドライブをレガシー BIOS と UEFI の両方のシステムで起動できるようになります。これは、例えば、UEFI に対応/非対応の複数のシステム上で使用する USB フラッシュドライブにオペレーティングシステムをインストールする場合や、システムをまたいでハードドライブを使用しやすくする場合に便利です。
設定
limine にはデフォルトの設定ファイルが同梱されていません。なので、作成する必要があります。このファイルは、どのオペレーティングシステムが起動できるかを Limine に指示するために必要です。Limine はカスタマイズ性が高いので、設定ファイルには多くのオプションがあります。設定ファイルのフォーマットやオプションに関する詳細なドキュメントはここで見られます。
設定ファイルは、(limine-bios.sys
と同じように) Limine がデプロイされたドライブ上の任意のパーティションにあるルートディレクトリか /boot
、/limine
、/boot/limine
ディレクトリのどれかに置く必要があります。ただし、そのパーティションのファイルシステムがサポートされている必要があります。設定ファイルは limine.conf
という名前でなければなりません。
以下は、典型的な Arch Linux カーネルと initramfs の1つのブートメニューエントリを含む設定の例です:
limine.conf
timeout: 5 /Arch Linux protocol: linux kernel_path: boot():/vmlinuz-linux kernel_cmdline: root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw module_path: boot():/initramfs-linux.img
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
はルートファイルシステムの UUID です。
Windows エントリ
Windows を起動できるようにするには、ESP 内の bootmgfw.efi
へのパスを知る必要があります。ESP 内に移動して、以下のコマンドを使用することで可能です:
$ find -name "bootmgfw.efi"
./EFI/Microsoft/Boot/bootmgfw.efi
次にするべきことは、以下の内容を設定に追加することだけです:
limine.conf
/Windows protocol: efi_chainload image_path: boot():/EFI/Microsoft/Boot/bootmgfw.efi
他のディスクから起動する
efi_chainload
プロトコルを使って UKI をロードし、uuid(partition UUID):
でディスクのパスを指定します。UKI#Limine を参照してください。
pacman フック
必須ではありませんが、Limine がアップデートされるたびに Limine をデプロイする pacman フック を設定すれば便利です。
以下は単なる例です。システム構成に合うようにパスやデバイスを編集してください。
BIOS
/etc/pacman.d/hooks/liminedeploy.hook
[Trigger] Operation = Install Operation = Upgrade Type = Package Target = limine [Action] Description = Deploying Limine after upgrade... When = PostTransaction Exec = /bin/sh -c "/usr/bin/limine bios-install /dev/sdX && /usr/bin/cp /usr/share/limine/limine-bios.sys /boot/"
UEFI
/etc/pacman.d/hooks/liminedeploy.hook
[Trigger] Operation = Install Operation = Upgrade Type = Package Target = limine [Action] Description = Deploying Limine after upgrade... When = PostTransaction Exec = /usr/bin/cp /usr/share/limine/BOOTX64.EFI /boot/EFI/BOOT/
ヒントとテクニック
ブートエントリの自動化
Dracut サポート
limine-dracut-supportAUR は、initramfs や UKI の生成に Dracut を使用するユーザーのために開発されました。これは、Limine ブートローダーでのカーネルの追加と削除を自動化することで、カーネルの管理をシンプルにします。
設定:
/etc/limine-entry-tool.conf
ではなく /etc/default/limine
を変更してください。このファイルは /etc/limine-entry-tool.conf
よりも優先されます。
1. /etc/default/limine
を編集する
ESP_PATH
に ESP へのパスを設定する。(bootctl
が ESP を自動的に検出する場合は、ESP_PATH
を設定する必要はありません)KERNEL_CMDLINE[default]=
に所望のカーネルパラメータを設定する。
- ESP の領域を節約するには、
DRACUT_FALLBACK
をno
に設定することで、initramfs あるいは UKI のフォールバックイメージの自動生成を無効化することができます。 - UKI でブートさせたい場合は、
DRACUT_UKI
をyes
に設定してください。
FIND_BOOTLOADERS
をyes
に設定すると、systemd-boot や rEFInd、デフォルトの EFI ローダーが同じ ESP 内に存在する場合、それらを検出し、Limine に追加するようになります。
2. 以下のコマンドを実行して initramfs や UKI を生成し、esp/limine.conf
を更新します:
# limine-update
その他の設定オプションについては、the configuration of limine-entry-tool を参照してください。
mkinitcpio や他の initramfs ツール
limine-entry-tool-gitAUR には、initramfs ツールも、カーネルの追加と削除を自動化させるための pacman フックも含まれていません。
1. /etc/limine-entry-tool.conf
の設定を上書きするには /etc/default/limine
を代わりに編集してください。
ESP_PATH
に ESP へのパスを設定してください。(bootctl
が自動的に ESP を検出する場合は、ESP_PATH
を設定する必要はありません。)KERNEL_CMDLINE[default]=
に所望のカーネルパラメータを設定してください。
2. 所望の initramfs ツール (例: mkinitcpio、dracut、booster など) をインストールしてください。
3. Limine ブートメニュー内のブートエントリを管理するためにスクリプトを作成してください。例えば、limine-entry-tool
コマンドを使ってカーネルの追加と削除を自動化する pacman フックなどです。
詳細は limine-entry-tool の README を参照してください。
Btrfs の Snapper スナップショットとの統合
limine-snapper-syncAUR ツールは Snapper と Limine ブートローダーとを統合します。これは以下の点で便利です:
- ブートする Snapper スナップショットの選択をサポート。
- システムのスナップショットから復元する方法として rsync と btrfs の2つを提供しています。
- スナップショットからの復元後、「バックアップ」エントリが Limine ブートローダーに追加されます。これにより、必要になったときにバックアップへの巻き戻しが容易になります。
- 新しいスナップショットが同じブータブルファイルで作成されている場合、破損したブータブルファイルを ESP 上の古いスナップショットを使って自動的に修復します。
- ブータブルファイルのハッシュ値が ESP 上にある同じファイルのハッシュ値と一致しない場合、ハードウェアの問題が疑われるエラーメッセージを自動的に記録します。
- 読み取り専用のスナップショットをテストできる: overlayfs を使って、イミュータブルのようなシステム上で元のデータを変更することなく、インストールされたパッケージをテストします。これは、ブートパーティションや分離されたホームサブボリューム/パーティションのテストを意図しているものではないことに注意してください。
設定
1. esp/limine.conf
に //Snapshots
か /Snapshots
キーワードを加えてください。これは、自動生成されるスナップショットエントリに対応します。
例:
limine.conf
/+Arch Linux comment: Any comment comment: machine-id=yyyyyyyyyyyyyyyyyy //Linux protocol: linux kernel_path: boot():/vmlinuz-linux kernel_cmdline: root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw rootflags=subvol=/@ module_path: boot():/initramfs-linux.img //Snapshots
2. /etc/default/limine
を編集してください。このファイルに記述された設定は /etc/limine-snapper-sync.conf
を上書きします:
ESP_PATH
に ESP へのパスを設定してください。(bootctl
が ESP を自動的に検出する場合は、ESP_PATH
を設定する必要はありません。)LIMIT_NUMBER
にスナップショットエントリの最大数を設定してください。デフォルトは 8 です。LIMIT_USAGE_PERCENT
には、新しいスナップショットエントリの作成を許可する ESP 使用率の最大値を設定してください。デフォルトは 80 です。
- カスタムの Snapper レイアウトを使用する場合は、以下を設定してください:
ROOT_SUBVOLUME_PATH
にルートサブボリュームへのパスを設定する。殆どの場合、デフォルトは/@
です。ROOT_SNAPSHOTS_PATH
にルートスナップショットへのパスを設定する。デフォルトは/@/.snapshots
です (これは、ルートサブボリューム/@
に対する標準的な Snapper レイアウトです)。
3. 以下のコマンドを実行して、成功するかエラーメッセージが表示されるか確かめてください:
# limine-snapper-sync
4. うまく行ったら、systemd サービス limine-snapper-watcher.service
を有効化してください。このサービスは、Snapper のリストに変更が生じた際にスナップショットエントリをブートメニューに自動的に生成します。
詳細は limine-snapper-sync README やその他の設定オプションを参照してください。
コマンド
limine-snapper-sync
: Limine のスナップショットエントリを Snapper のリストと同期させます。limine-snapper-list
: 現在の Limine スナップショットエントリを表示します。limine-snapper-info
: バージョンとブータブルスナップショットの総数を表示し、ブータブルファイルの検証を行います。limine-snapper-restore
: 選択したスナップショットから、一致するカーネルのバージョンを含めて、システムを復元します。
既知の制限
- サポートは Snapper レイアウトのみで、Snapper ではない任意の Btrfs レイアウトはサポート外です。
- ツールがインストールされた時よりも前に作成された古いスナップショットのブータブルスナップショットエントリは生成できません。そのようなスナップショットには、対応するカーネルバージョンがたいてい記録されていないからです。