サーバーを再起動したらgrub rescueの沼にハマった
昨日、借りているVPSのうち1つがめちゃくちゃ重かったんで、とりあえずバックアップを取って詳しく調べることにした。が、scpすらまともに動かないぐらい重くなっていたので仕方なく再起動した。
起動しない
すると・・・OS(Ubuntu Server 18.04 LTS)が起動せず、こんなエラーメッセージを出して止まってしまった。
grub rescue> symbol 'grub_calloc' not found
おそらくnormal.modが壊れている。この手のエラーはレスキューCDを使ってgrub-installしなおさなければ解決しない。
しかし、問題の起こったVPSには自前のISOファイルからブートする機能がなく・・・
もしかして詰んだ?\(^o^)/
原因はgrubパッケージの不具合
コミュニティを調べてみてると同様の症状で困っている人がいて、しかも最近の話だった。
どうやら直近のgrubパッケージのアップデートで壊れたようだ。アップデートプロセス中にgrub-installが実行されるが、何らかの理由で失敗した場合でもアップデートに成功したようにふるまうバグがある模様。セキュリティ重視でunattended-upgradesを有効にしている環境は要注意。
bugs.launchpad.net bugs.launchpad.net
そして復旧へ
grub rescueからでも復旧できる方法がないか調べたが、無い模様。AWSやAzureならVMのディスクイメージを個別管理できるので別VMからリカバリーできるのだが・・・。
仕方なくVPS(hostens)のサポートに事情を説明して泣きついたら、代わりにgrub-installしてくれた!神か!
hostensはまじ神!
神VPSはこちらです
このVPSのデータは今まで1週間おきにバックアップしてたけど、今後デイリーでやろうと思いました。