😅

grub rescue モードから抜ける

2023/12/30に公開

自作PCが好きでいろいろいじっていたんですが久々に学びがあったのでメモ程度に投稿します。

僕の3代目の自作PCは貰い物で元々Windows11が入っていました。実験に使える重たいソースコード類が早く動かしたいなあと思ってLinuxデスクトップも使いたいと思って余剰帯域でdual bootとしていました。

しかし、Windowsが持っているメモリ帯域幅が大きすぎていらないなーと思っていました。そこで現在のLinuxを使いながらLive USB使ってGPartedからパーティションを直接的に拡大するというちょっと変態チックなことをやってみたくなりました。Liveでいったん経由しないと、使ってるパーティションを変更することになるので使用中のOSのGpartedでは不可能であるということに気をつけます。普通は(これは研究室同期にも言われたのだが)、消した帯域に新しく入れ直すというのが定石な気がしていましたが、あえて逆張りすることで面白いだろうと思ってやりました。さらに様々を再インストールする手間がなくなるのでそっちの方が嬉しいです。

手間取ったところとしてはLinux Swapが未割当領域と使用中のパーティションの間にあって(写真撮ってなくて残念)物理的に邪魔されていました。HDD/SSDがOS側で管理されてればいいものを、わざわざ物理的な管理をしているというのはかなり直感的で面白い学びになりました。管理されているので、そこをずらさないと並行的にメモリの帯域幅の移動はできないということに意外と気づかなかったです。

最終的にはこういうパーティション構成になりました。80GiBくらいなんかあった時のために確保することにしました。

(赤のlinux-swap帯域が開放した未割り当て領域と dev/nvme0n1p5 の間に挟まっていた。。。)

OSのブート優先処理をやってたりして、GRUBがぶっ壊れたままだったので以下の記事を参考に修復しました。

https://segakuin.com/linux/grub.html#google_vignette

grub rescue から抜け出すためには、まずはGRUBがブートプロセスを正常に開始できるようにする必要があります。僕の場合、ls (hd1,gpt5)filesystem is ext2 と返してきたので、このパーティションにはLinuxのファイルシステムが存在していることがわかりますね。

そうなれば、GRUBのブート設定を手動で設定すれば良いです。正しいパーティションが見つかったら、次のコマンドを実行してGRUBを手動で設定します。

set prefix=(hd1,gpt5)/boot/grub
set root=(hd1,gpt5)
insmod linux
insmod normal
normal

これでLinux側に入ることができるはずです。

システムを再起動して、GRUBを再インストールしましょう。システムが正常に起動したら、Linuxにログインし、ターミナルを開きます。次に、GRUBを再インストールするためのコマンドを実行します。

sudo update-grub
sudo grub-install dev/nvme0n1p5

⚠️ dev/nvme0n1p5 は、GRUBをインストールするドライブを指します。システムによって異なる場合があるので、適切なドライブを指定してください。

grubは基本的には lssetが使えればどうにかなります。

grub rescue > set

cmdpath=(hd1, gpt1)/EFI/KALI
prefix=(hd0, gpt5)/boot/grub
root=hd1, gpt5

こんな感じで正しい root と prefix を特定することが最初にやることです。次にGRUBの設定を更新してやれば大抵うまくいくと思います。ご参考になれば幸いです。

Discussion