まるさや

技術っぽいことかきます

grub.cfgをぶっ壊したのでgrubプロンプトから頑張ってブートして復元する

どうも,まるさ@maruuusa83です.

悲しいオペミスで grub.cfg を壊してしまってブートしなくなってしまったので,grubのプロンプトから頑張って復元しました.







grubが動かない

仮想環境でゲストOSの grub.cfg をいじろうと思って grub2-mkconfig したらホストOSの情報でconfigが生成されて壊れてしまいました.

かなしい.


とりあえずゲストOSを起動しようとしたら「デバイスが見つからない」と怒られてしまうので,grubプロンプトから手動でブートして grub.cfg を復元します.







とりあえずブートする

ルートファイルシステムのあるパーティションを探す

ls で認識しているパーティションを一覧表示します.


grub> ls
(hd0) (hd0,gpt2) (hd0,gpt1)


ls (hd0,2) とかすると中身が見れるので,どれがルートファイルシステムなのか探します.

gptとかはフォーマットの種類で,後ろの数字がパーティション番号なようです.フォーマットの種類の部分は省略できます.

まるさの環境では (hd0,2) がルートでした.




ブートしてみる

次に,ブートします.


grub> set root=(hd0,gpt2)
grub> linux /boot/vmlinuz-4.15.0-47-generic root=/dev/sda2
grub> initrd /boot/initrd.img-4.15.0-47-generic
grub> boot


  • 1行目:ルートFSのあるパーティションを指定します
  • 2行目:vmlinuz はTab補完しながら探してください.root= でルートFSを指定しますが,正しいデバイスを選んでください(後述)
  • 3行目:initrd もTab補完しながら探してください


(hd0,2) なら sda2,(hd1,1) なら sdb1 という風にデバイス名が決まります.

あと,HDDなら hdXYSSDなら sdXX,仮想環境なら vdXX みたいな感じでプレフィクスも変化します.

この指定を間違えるとうまくブートはしないのですが,OSの簡易版のシェルが立ち上がります.

バイス名がわからないときにはこのシェルで ls /dev とかしてあげるとデバイス一覧が出るので,それらしいデバイス名を探すと良いです.







grab.cfgを元に戻す

壊したgrab.cfgを元に戻します.

正しくブートができてログインまでできてしまえば簡単です.

grub2-mkconfig -o /boot/grub/grub.cfg のように,出力先を指定してmkconfigするだけです.


mkconfigしてリブートしてみて正しく立ち上がるようになっていれば復元成功.







というわけで,今回はこのへんで ノ

まるさ