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
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 の生成に Dracut を使用するユーザーのために開発されました。これは、Limine ブートローダーでのカーネルのインストールと削除を自動化することで、カーネルの管理をシンプルにします。
/etc/limine-entry-tool.conf
を以下のように編集してください:
KERNEL_CMDLINE
に所望のカーネルパラメータを設定する。
- ESP のスペースを節約するために、
DRACUT_FALLBACK
をno
に設定して initramfs フォールバックイメージの自動生成を無効化する。
設定ファイルを編集したら、以下のコマンドを root 権限で実行して initramfs を生成し、esp/limine.conf
を更新します。
# dracut-rebuild
あるいは、このコマンドのエイリアスを使ってもよいです:
# limine-update
その他の情報は limine-entry-tool の README と設定オプションを参照してください。
Btrfs の Snapper スナップショットとの統合
limine-snapper-syncAUR ツールは Snapper と Limine ブートローダーとを統合します。これは以下の点で便利です:
- ブートする Snapper スナップショットの選択をサポート。
- システムのスナップショットから復元する方法として rsync と btrfs の2つを提供しています。
- 読み取り専用スナップショットのテスト: overlayfs を使用してイミュータブルなシステムで実験を行い、システム上のオリジナルデータを変更せずに問題を再現することができます。
- スナップショットからの復元後、「バックアップ」エントリが Limine ブートローダーに追加されます。これにより、必要になったときにバックアップへの巻き戻しが容易になります。
- 新しいスナップショットが同じブータブルファイルで作成されている場合、破損したブータブルファイルを ESP 上の古いスナップショットを使って自動的に修復します。
- ブータブルファイルのハッシュ値が ESP 上にある同じファイルのハッシュ値と一致しない場合、ハードウェアの問題が疑われるエラーメッセージを自動的に記録します。
セットアップ
1. Snapper にルートサブボリュームの構成が存在することを確認してください。
2. 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
3. 次に、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 レイアウトはサポート外です。
- ツールがインストールされた時よりも前に作成された古いスナップショットのブータブルスナップショットエントリは生成できません。そのようなスナップショットには、対応するカーネルバージョンがたいてい記録されていないからです。