コンソールに grub rescue と表示されたときの対処

Posted on 2020-08-04 in zakki

表題の時のようになったときのメモです。

背景

このエントリを書いている PC では裏で仮想サーバを 1 台稼働させており RSS リーダーを動かしています。普通 RSS リーダーはサーバーを構築するよりも Web(InoReader とか ) や、Web ブラウザの拡張機能で賄うことも十分可能ですが、ローカルで管理したいとか Vagrant 使いたいとかまあ色々な欲求のもとに今の形が出来上がりました。

で、なんか?あの?Windows 特有の?突然来る?再起動みたいな?アレを食らってですね。再起動は夜中に気づいたけどそのまままた寝て。次の日の朝に意気揚々と Vagrant を使って起動しようしたら以下のメッセージが表示されまして。

> vagrant reload fd7
==> stdsv3: Stopping the machine...
==> stdsv3: Configuring the VM...
==> stdsv3: Starting the machine...
==> stdsv3: Waiting for the machine to report its IP address...
    stdsv3: Timeout: 120 seconds
Hyper-V failed to determine your machine's IP address within the
configured timeout. Please verify the machine properly booted and
the network works. To do this, open the Hyper-V manager, find your
virtual machine, and connect to it.

The most common cause for this error is that the running virtual
machine doesn't have the latest Hyper-V integration drivers. Please
research for your operating system how to install these in order
for the VM to properly communicate its IP address to Hyper-V.

えぇ … と思いつつ、provider である Hyper-V からアクセスしてみるとコンソールに表題の文字が表示されていたというわけです。

ちなみに、確認後そのまままた寝た理由は過去に 10 回以上同じことがあったのですが、特段何事もなかったことが理由です。加えて言うと、今回の表題メッセージの原因が確実に再起動かどうかは分かりません、が状況的に恐らくアイツだろとしかめっ面をしているわけでございます。

環境

  • Vagrant
    • 2.2.6
  • Hyper-V
    • 10.0.19041.1
  • 仮想サーバ OS
    • Debian 10

対応

初手

まず初めにこちらこちらを参考に対処しましたが修復は出来ませんでした。

grub rescue> insmod (hd0,msdos1)/boot/grub/i386-pc/normal.mod
error: symbol `grub_calloc' not found.
grub rescue>

となってしまい先に進めませんでした。

次手

こうなってしまう場合は、Linux のメディアから Live 起動して grub を修復することで回復出来る可能性があるようです。

を参考に進めます、というか上の記事通りに作業したことで無事回復しました。急ぎの方は上の記事を見に行ったほうが早いです。以下は私の作業記録となります。

というわけでいそいそと Ubuntu のイメージを DL しに行きます。今回は Ubuntu 20.04 desktop にしました。メディアに焼こうかなと思いましたが、Hyper-V では当然?iso ファイルを仮想ドライブでマウント出来るのでそちらで代用します。

起動しました。「Ubuntu を試す」を選択します。Live 起動します。

デスクトップ画面が表示されました。久しくデスクトップ環境を見ていなかったので新鮮です。端末を起動します。

sudo fdisk -l でパーティションを確認します。OS がインストールされているパーティションを確認します。( 今回は/dev/sda1)

# sudo mount /dev/sda0 /mnt
# sudo mount --bind /dev/ /mnt/dev
# sudo chroot /mnt
# sudo grub-install /dev/sda

と進めます。色々エラーが出ており若干怪しいですが、このまま電源を停止します。

Hyper-V 側で iso ファイルのマウントを外し、再度 Hyper-V から起動します。

OS のログイン画面が確認できました。お疲れさまでした。

補足

上の記事では Swap を再度有効化していますが、こちらでは Swap が動作していたため特に何もしていません。

$ top
top - 23:41:33 up 1 day, 37 min,  1 user,  load average: 0.00, 0.05, 0.02
Tasks: 107 total,   1 running, 106 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :    923.0 total,    111.8 free,    356.4 used,    454.7 buff/cache
MiB Swap:   1021.0 total,   1015.0 free,      6.0 used.    404.6 avail Mem

まとめ

Windows を投げ捨てるのか、サーバーを外部に持っていくのか、Docker 辺りに置き換えるか、色々考えてしまう出来事だった。

Vagrant Hyper-V grub