2023-09-16 (Sa) [長年日記]
_ 続・/boot 分離
/boot と /efi の両方に grub ディレクトリがあることに気づいて悩み始めた。
ドキュメント読んだり試行錯誤したりした結果、
- /boot
- /boot/grub 全部, grub.cfg も含めて
- kernel, initrd
- /efi
- /efi/EFI/GRUB/grubx64.efi
こういう構成になるのね。
で、grubx64.efi には、/boot/grub がどのパーティションの どの path にあるかが書いてあって、 そこから grub.cfg なり module なりを読んでくる、と。
ただ、そうすると、/boot は zfs にあるので、zfs.mod が 必要だけど、それが /boot/ にあると読めない。 そういうのは、preload する、と。
preload は2種類あって、
- grub-install --modules=
あらかじめ grubx64.efi にモジュールを含めておく機能 - GRUB_PRELOAD_MODULES=
grub.cfg に列挙されてて、 grubx64.efi 起動後に grub.cfg の指示で読み込む機能
となってる。つまり zfs の場合は前者を使う、ということ。
で、やってみたところ、怪しい warning が…
https://wiki.archlinux.org/title/ZFS#GRUB-compatible_pool_creation
↑これらしい。GRUB が対応してない機能も有効にしてしまってる。 まぁそりゃそうだけど…。 今更作り直す気はせんなぁ...
まぁいいや、別パーティション作ろ。 swap を 1GB ほど削って新たなパーティションを捻出。 そこを /boot (ext4) として使う。
ま、容量が大きくなったので意味がなかったわけではないな。
で、やってみたけど、まだ起動できない。 zfs kernel module が load できてないらしい。 なんで…? もうアレしか思いつかない。 きっと kernel module のビルドに失敗してる。
試してみて、やっぱり失敗した。 LTS なら起動できた。
そして zfs-dkms を git 版にしたら通った。
luna:~ % sudo zpool set feature@multi_vdev_crash_dump=disabled zroot
cannot set property for 'zroot': property 'feature@multi_vdev_crash_dump' can only be set to 'disabled' at creation time
やっぱ作成時にしか設定できないみたい。 次に作成する時には思い出せるといいんだけど。
ついでに2点。
- Windows を os-prober に任せるようにした
- テーマを starfield でなく名前を付けた。
これで、grub-install しても上書きされないはず。