2018年12月15日

Gentooをgrub-staticからgrub2へ

家のgentoo boxのemergeで、grub-staticが30日以内に削除されるというメッセージが出ていた。
一度やろうとはしたけど、めんどくさくて放っておいたが、ついにやらないといけなくなったかと、やり始める。

設定自体は、ネットの記事を見てサクッとやる。
ただ、grub-staticがgrub:2をBlockしているというエラーが出るので、grub-staticを削除したにもかかわらず、参考にしていた資料がgrub:0からgrub:2への移行だったので、ハマった。
ハマったところは、既存のgrubから、grub2をChain loadingさせる所。

再起動させると、上がってこない。
grub-staticのパッケージを削除しているので、起動しないのはそのとおりなのだが、必要なファイルはbootloaderに入っているだろうと(入っていて欲しい)と思って、手を抜いたのがいけなかった。

仕方がなく、急遽、gentooのインストールイメージを用意して、そこから起動。
よく考えると、以前、電源が飛んだ時に同じようにしようとしたが、RAIDが邪魔をしてディスクが読めなかったのを思い出した。
今回は、運良く、grub.confのカーネルパラメータを見ていたので、domdadmやdolvmが必要というのを知っていたので、インストールメディアからの起動時にgentoo domdadm dolvmとして引き渡してやった。

/dev/sdaと/dev/sdbは認識されており、その下に必要なブロックデバイスは作成されていた。
RAIDとしては認識されていないだろうけど、/dev/sda1を直接mountしたらどうなるか試してみた。


mount: unknown filesystem type 'linux_raid_member'

RAIDのデバイス名で呼ばないといけないか。言い換えると、RAIDが読み込まれているじゃん。


cat /proc/mdstat

でみると、ちゃんとRAIDとして認識されている!
そのデバイス名でマウントも出来た。

後は、必要なファイルシステムをマウントして、chroot。


mount --types proc /proc /mnt/gentoo/proc
--rbind /sys /mnt/gentoo/sys
--rbind /dev /mnt/gentoo/dev
chroot /mnt/gentoo /bin/bash

途中やめになっていたgrub2のブートローダへのインストールを続ける。


#grub-install /dev/sda
grub-install: warning: this GPT partition label contains no BIOS Boot Partition; embedding won't be possible.
grub-install: error: embedding is not possible, but this is required when the root device is on a RAID array or LVM volume.

またRAIDか。と思いつつ、以前、grub2にしようとした時、やめた原因を思い出した。
BIOS Boot Partitionがいるんだ。
ディスクはすでにいっぱいいっぱいでパーティションを切っているので、切り直すとデータが飛ぶ。と思っていた。
調べると、別にディスクの先頭になくても良さそうだ。
ということで、スワップ領域から少しいただこう、というアイデアでやることに。
スワップ領域だったところしかいじらなかったので、gdiskで書き込んでも他のパーティションは影響を受けないでいて欲しいと思いつつ、書き込む。
幸いなことに、他のパーティションは影響を受けず、データはそのまま残っていた。

再度grub-installをすると、正常にインストールされた。

再起動すると、今度はroot blockが無いというエラー


!! Could not find the root block device in UUID=xxxxxxx-xxxxxxx-.....
!! Please specify another volume or:
!! - press Enter for the same
!! - type "shell" for a shell
!! - type "q" to skip...
root block device(UUID=xxxxxxx-xxxxxxx-.....) :: 

このUUIDは、mdadm.confには出てこない。gdiskをやったので変わったのかと思ったが、変わっていなかった。

grub.cfgでもraidモジュールはインストールされているっぽいし、このUUIDはなんだ???と思って探していて、ヒントを見つけた。


lsblk -f

で見ると、RAIDとして認識される前の、/パーティションのUUIDだった。
ということは、RAIDが読み込まれていない?
と気付き、kernel parameterとしてdomdadmを入れないといけないことがわかる。
grub2の起動時の画面で、コマンドラインを編集して加えてやると起動できる。

最終的に/etc/default/grubに
GRUB_CMDLINE_LINUX="domdadm dolvm"
を入れてgrub-mkconfigをしてgrub.cfgをアップデートしたら、起動できるようになった。

コメントする