2021年09月06日

grub(2)-mkconfig(update-grub)の振る舞いの違い、各ディストロでの。

いまメーンのディスク(efi-hdd)では、
grub2で、システム起動をコントロールしています。

起動に関して整備していて、ただ、ひとつの
ディストロから、ほかのディストロすべてを
起動できるようにしたい、ってことで、
やってみました。

efiのbios風画面で立ち上がるディストロを
切り替えるのが、いやでなければ、
必要のないことです。

ディスクに入っているのは、
sparky-6.0、debian10、ubuntu18.04.5lts
archbang、fedora34の5つです。

デフォルトの状態では、archbangとfedora34は、
ほかからは、起動できません。os-proberを
grub-mkconfigで効かせても、です。

fedora34の場合、BLSCFGのブート方法を
取っています。os-proberは未対応。
archbangの場合は、initrd amd-ucode.imgの
後ろに入っているinitramfs-linux.imgを
os-proberが見逃すためです。

debian、ubuntu系のgrubからは、
デフォルトの状態では、
foedoraやarchを起動できません。
厳密に言えば、40_customなどに記述すれば、
起動できますが、いちいちそんなことを
やっていられません。

ディストロがどれでもあっても、自分自身は
起動することから、archbangか、fodoraから
起動するれば、問題はあとひとつになります。
fedoraのBLSCFGの設定は簡単に外すことができます。
/etc/default/grubにある行、
GRUB_ENABLE_BLSCFG="true"
のtrueをfalseにして、
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
をすれば、ほかからのupdate-grub(os-prober)で
読み取れて、起動可能なgrub.cfgの記述になります。
結果、archbangですべてを
起動できるようにしようと思いました。

ところが、archbangの/etc/default/grubは、
気が利かない状態で、
fedoraの修正後に、archbangで、
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
をしましても、
Fedora (Workstation Edition)(on /dev/sda6)
のようなそっけないまったく同じ名前がずらっと並ぶだけで、
システム起動もしないんですね。エイントリーすべてで
リンクファイルの/boot/vmlinuzを指していました。

この点、debianは、お人好しでありまして、
カーネルの区別がわかるように、
update-grubが働きます。
archとdebianで、/etc/default/grubを見比べると、
archが
GRUB_DISTRIBUTOR="Arch"
であるのに対し、debianは、
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
となっていました。debianのほうの一行の
意味は、いまいち解らないのですが、
そのまんま、archにもってきて、
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
をしました。そうしたら!
os-proberの働きがおかしくなって、
本体の起動を記したあと、
update-grub rmdir: '/var/lib/os-prober/mount' を削除できません: デバイスもしくはリソースがビジー状態です
の記述が、残りのディストロの数、
つまり4行分出るようになりました。
何をやっても、しばらくこうでした。

これを修復するのがたいへんで、どうやって
なおったか、わかりません。最終的には、
思惑通りの起動選択画面になりました。
GRUB_DISTRIBUTOR=の記述は、上の通り、そのまま。

grub_os_select.jpg

fedoraは、カーネルの区別が付くようになり、システム起動も
問題なし。archbangもgrub本体による情報収集記述なので、
/boot/initramfs-linux.imgの読み取り記述忘れはなし。
システムの起動に問題ありません。残りのdebian、ubuntu系は、
推して知るべし、問題はなく起動できるでしょう。

正常化させるのに、grubやos-proberの再インストール、
os-proberのコマンド実行も行いました。
でも、何が正常化させたのか、確たるところは判りません。
最後の2モーションは、
$ os-prober
$ sudo grub-mkconfig -o /boot/grub/grub.cfg

だったような気がします。

おやりになる場合は、自己責任でお願いします。
本体が起動しなくなる恐れは少ないですが、
os-proberが正常に働かなくなる恐れがあります。

そして、archlinxu本家系が混ざるマルチブートなら、
archのgrubを使ってシステム起動の管理をするのが、
合理的かな、と思います。
虎穴に入らずんば、虎子を得ず、というか、
それ自身は、どれであっても起動できるので。
困難の数は少ないほうがいいでしょう。

manjaroは、この点を
工夫していて、子ディストロになったときでも、
manjaroが拾われるようにできている、と思います。
いま手元にmanjaroがなかったような。
仕組みは、まだ調べていません。


posted by ブログ開設者 at 12:29| Comment(0) | gentoo | このブログの読者になる | 更新情報をチェックする