久方ぶりに、M/B及びCPUを新調したのを機に、この記事を参考に、Fedoraで動かしているメインの計算機の起動方法をBIOS/MBRから、GPT/UEFIに切り替えた際に行った(そして、ハマった)ことの記録。
概要
参考にした上記の記事は、「どうするために、何が必要なのか?」が纏まっておらず、また、計算機へ/からの入出力例(一番重要な、gdisk
等からの出力)が変なところで改行されていて、ちょっと読み難い。また、LVMを使っている、と言っているのに、図にはbtrfsとの表示があったりして(しかも、「btrfsだと、うまくいかんよ!」とかも言っている)、ヲイヲイ?、という部分もある。
必要となるのは、
- 起動するためのHDDに、約1MBのBIOS boot パーティション、約360MBのEFIシステム・パーティション(ESP)、及び、明確には述べられていないが、(後述の)GUID Partition Table(GPT)用のスペースを作ること、
- ESPにGNU GRUBのEFI起動に必要となるファイルを格納して、
grub2-install
するこ
と言ってしまって良いのではないかと思う。
起動HDD内でのスペースの捻出
うちの場合、起動HDDは、512GBのSSDで、その一部(約500MB)を/boot
に(ext4 FS)、残りをLVMに使っていた。
一方、上の記事を読むと、「最初にあった約1GBの/boot
を縮小して、約360MBのスペースをESPに使うよ。」ということらしいのだが、僕は、ケチって/boot
を約500MBにしていたんで(そのため、kernelsは2つしかインストールしないようにしていた)、これ以上縮小しようもない…
また、上の記事では、あとから新たにBIOS boot partitionや、ESPを切っていくため、どうもこれらのブートに使うパーティションがそれぞれ/dev/sda3
とか/dev/sda4
になっていて、僕の趣味(=bootに使うパーティションから順番に並んていて欲しい)に合わない…
そこで、LVMで使っていた部分を、pvmove
で別のHDDに移し、また/boot
の中身は、搭載したまま使っていない1TBのHDDにバックアップを取って、このSSDのパーティションを全面的に切り直してしまい、
-
/dev/sda1
: BIOS boot partition -
/dev/sda2
: EFI system partition -
/dev/sda3
:/boot
-
/dev/sda4
: LVM
とした。
bootしてくれない…
んで、パーティションを切り直した後、live systemを起動して、諸々のパーティションをマウントして、/boot
にあったファイルをリストアして、GRUBを再インストールして再起動すると… 素直にブートしてくれず、GRUBのコマンドラインに落ちてしまうんですね!
しようがないから、/boot
上の、及び root FS上の諸々のファイルがきちんと残っていることは確認できているので、GRUBのコマンドラインからカーネルやinitramfsのファイルを指定して起動しようとしたのですが… どうもよくわからんことに、起動は始まるのだけれど、途中でやめて、すぐhaltしてしまうのですね…
途方に暮れて、こんな電子書籍を買って読み、平日の勤務の後帰宅後にちょっとずつ試すもうまくいかず、ハマることほぼ丸々一週間…
何度も何度も「(/boot
以外は(別のHDD上に)手つかずで保存されているんだから)、もう再インストールして、ちょっとずつ設定を戻すことにするか?」と思いながらも、どうにか思い留まり、「1ステップずつbootの過程を確認していき、どこでhaltされてしまうか確認するしか無いよな?」と…
ってことで、kernel optionにsystemd.confirm_spwan=true
を足して起動していくと… どうも、dracut-cmdline
を起動するところでhaltされてしまっているようだ、とわかって…
「そういや、kernelの指定では、root FS の指定以外は何も書いていなかったな… でも、普通に起動して運用している時は、他にも、rd.lvm.lv=fedora/root
とか、rd.lvm.lv=fedora/swap
とか色々書かれていたよな… なんじゃ?このdracut-cmdline
というunitは… まさにinitramfsの展開に関わっている部分やんか!」と気づき、これらを書き足して(というか、grub.cfg
に書かれていた kernelopt
を全部書いて)起動させたら、きちんと起動してくれました!というオハナシ。
みなさん、GRUBのコマンドラインから起動するときでも、いつも起動している時に指定されているkernel optionは、サボらずにキチンと全て指定しましょう!
GPTについて
さて、もう一点、注意。
gdisk
を使って上記のような構成のパーティションを書き出そうとすると、
Warning! Secondary partition table overlaps the last partition by 33 blocks!
You will need to delete this partition or resize it in another utility.
と言われてしまう。
「なんで、the last partition???」とか思って調べてみると…
この記事にしっかり書かれておりました。HDDの先頭にしかパーティション・テーブルを書かないMBRとは違って、GPTの場合は、HDDの最初と最後にパーティション・テーブルを書くということみたいですね。
そこで、当初設定した、LVM用の/dev/sda4
の大きさを少々小さく(「33ブロック上書きしちゃうぞ!」と注意を受けたので、余裕を見て40ブロックほど小さく)すると、警告もなくgdisk
でテーブルを書き出すことが出来ました。
grub2-install
or dnf reinstall shim-* grub2-efi-*
?
これら一連の作業を行う際に参考にした記事では、Fedora 33の場合の作業が示されていて、で、「もっと新しいヴァージョンのGRUBを使っている場合は、grub2-install
ではなく、dnf reinstall shim-* grub2-efi-*
してね!」と言っているのだけれど、もっと新しいヴァージョンってのが、どういうヴァージョンなのか?は、明確にはされていないんですね。
んで、最初、パーティションを切り直して/boot
をリストアしてreboot
した際は、後者つまりdnf reinstall ...
したのです。
そうしたら、これまでのように普通には(GRUBのメニューが出てきて)起動してくれず、コマンドラインに落ちて苦労したもので、「じゃぁ、家のは、もっと新しいヴァージョンじゃぁないんだろうな?」と考えたわけです。
そこで、ESPを作ってマウントしてEFI用のファイルをコピーしたあとも、grub2-install
としようとすると、
# grub2-install --target=x86_64-efi /dev/sda
grub2-install: error: this utility cannot be used for EFI platforms because it does not support UEFI Secure Boot.
と怒られてしまうのです。
で、この場合は、dnf reinstall ...
すべきです。
その他
まぁ、あとは、参考にした記事に書かれている各作業手順通りにやるだけです。
ただ、新調したM/Bに載っている"AMI UEFI Legal BIOS"ってやつは、Legacy BIOS とUEFIとの切り替えが明確にされていないのが困りものです。せいぜい、ブート順のオプション設定で、各デバイスをAHCIにするかUEFIにするかの選択くらい?
あ、いや、僕がよく理解していないのかもしれません。と言うのも、ブート順の設定で、"Fedora(UEFI)"とかいうオプションも見えるようになったから… 勉強します。