てっくらのーとは、触れた技術のメモと日常の記録が少し合わさった個人のサイトです。
コンソールにgrub rescueと表示されたときの対処
表題の時のようになったときのメモです。
背景
このエントリを書いている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 辺りに置き換えるか、色々考えてしまう出来事だった。