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なら hdXY
,SSDなら sdXX
,仮想環境なら vdXX
みたいな感じでプレフィクスも変化します.
この指定を間違えるとうまくブートはしないのですが,OSの簡易版のシェルが立ち上がります.
デバイス名がわからないときにはこのシェルで ls /dev
とかしてあげるとデバイス一覧が出るので,それらしいデバイス名を探すと良いです.
grab.cfgを元に戻す
壊したgrab.cfgを元に戻します.
正しくブートができてログインまでできてしまえば簡単です.
grub2-mkconfig -o /boot/grub/grub.cfg
のように,出力先を指定してmkconfigするだけです.
mkconfigしてリブートしてみて正しく立ち上がるようになっていれば復元成功.
というわけで,今回はこのへんで ノ
まるさ