Skip to content

Instantly share code, notes, and snippets.

@buzztaiki
Created November 14, 2025 11:22
Show Gist options
  • Select an option

  • Save buzztaiki/5ecb23b62eb89c6469ed3ea5d32ee6b5 to your computer and use it in GitHub Desktop.

Select an option

Save buzztaiki/5ecb23b62eb89c6469ed3ea5d32ee6b5 to your computer and use it in GitHub Desktop.
systemd-boot で esp と分離した /boot を ext4 にする

systemd-boot で esp と分離した /boot を ext4 にする

要約

efifs を入れて、ext2_x64.efi/efi/EFI/systemd/drivers/ に置くと ext4 の /boot を systemd-boot が読めるようになる

解決したい問題

systemd-boot では /boot で利用するパーティションのタイプを Extended Boot Loader (XBOOTLDR) Partition にする事で esp (EFI system pratiion) と /boot を分ける事ができる。

この場合、以下のような構成になる

  • /efi: esp。systemd-boot の UEFIアプリと loader.conf が置かれる。
  • /boot: カーネルイメージと systemd-boot のメニューエントリー (loader/entreis/*.conf) が置かれる。XBOOTLDR パーティションになっている必要がある。esp にある sytemd-boot は XBOOTLDR タイプのパーティションを探して、ここにあるメニューエントリを表示する。

/boot が FAT32 になっている場合はこれだけで問題ないのだけど、ext4 にすると systemd-boot がメニューを表示してくれない問題が起きる。実は UEFI アプリは通常 FAT しか読めないので、/boot が ext4 になってると systemd-boot が /boot を読めなくなる。その結果設定したメニューが表示されないという事になる。

これを何とかして /boot を ext4 で使えるようにしたい。

解決方法

解決方法はわりと単純で、ext4 を読める UEFI ドライバーを systemd-boot にロードさせれば良い。ArchLinux では efifs パッケージが提供されていて、これに含まれている ext2_x64.efi を使えば ext4 のファイルシステムを読む事ができる。systemd-boot は esp/EFI/systemd/drivers/ にあるファイルを自動で読み込んでくれるので、ext2_x64.efi をここに配備すれば良い。つまり以下のようにする:

% sudo cp /usr/lib/efifs-x64/ext2_x64.efi /efi/EFI/systemd/drivers/

これで /boot が ext4 でもメニューが表示されるようになる。btrfs や xfs もあるっぽいので、該当のドライバーを置いてあげれば、多分これらも読めるようになるはず。

あとは必要に応じて、pacman hook 等で自動更新されるようにとかしてあげれば良い。

参考

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment