Windows10を更新したら画面真っ黒になってgrub rescueが出た
2016-10-23
- PC
Windows10を更新したらgrubで起動しなくなった件。なんかよくわからんが、Windowsが勝手にパーティション切ったらしい。
grub rescue出現
自作PCはUbuntuとWindows10のデュアルブートで、今回Windows10を起動しようとしたらログイン前に更新し始めたので待った。この更新は結構長かったので、Anniversary Updateというやつだったのかもしれない。とにかくこの更新中に何回か再起動するのだが、再起動するとブートローダのgrubがおかしくなっていた。いつもは紫色の画面(Ubuntuで入れたから)になって起動するOSを選択させてくれるのに、真っ黒な画面でgrub rescue>
という味も素っ気もないプロンプトを出すようになった。exit
もquit
もshutdown
も、補完すら利かないパンクなシェル。
起動方法(その場しのぎ)
grubのシェルはほとんどいじったことがない(いじりたくない)ので焦った。調べるとWindows10の更新でこうなる人は多いようで、情報はそれなりにあった。ありがたい。 結局対処法は簡単で
ls
とやって出たパーティションたちのどれにbootがあるか、一つ一つ調べていけばいい。例えば(hd0,msdos3)がbootを持つか調べたいときは
ls (hd0,msdos3)/boot
みたいな感じだ。これでなにやらごちゃごちゃ出るものがbootのあるパーティション。補完ができないので面倒なこと甚だしいが、やるしかない。 (ただし、人によってはこのコマンドで何も出てこないこともあるようだ。そのときはLiveUSBとか作ってLinuxを起動して調べないといけないっぽい。)
さてbootのあるパーティション(ここでは(hd0,msdos3)とする)が見つかったら、grubがそこを見るようにすればいい。これはset
というコマンドがあり、引数なしで入力すると現在の値が見れる。今回大事なのはprefixで
set prefix=(hd0,msdos3)/boot/grub
のようにして設定できる。これでgrubに正しいブート位置を教えることができた。あとは
insmod normal
normal
と打って、grubをノーマルモードにする。これでいつものgrubの画面に戻る。そしてOS選択して、ちゃんと起動できるようになる。
修正方法
上の方法でやっても、次回起動時にはまた同じことが起きる。set
してもgrubの設定はその1回限り変わるだけだからだ。設定を恒久的に変えるにはgrubの設定ファイルを更新し、インストールし直さないといけない。grubの設定ファイルは/boot/grub/grub.cfg
で、たしかにファイル内にはhd0がどうこうという部分があり、ここでbootを指定しているようだ。だがファイルの冒頭に"DO NOT EDIT THIS FILE"と素敵なことが書いてある。このファイルは直接編集するものではなく、/etc/default/grub
から生成するものだからだ。実は今回は何も編集しなくていい。
# update-grub
とすれば勝手にbootがどこにあるか探して、/boot/grub/grub.cfg
を適切に変更してくれる。あとは
# grub-install /dev/sda
でその設定が反映される。/dev/sda
のところはブートローダを入れたいストレージを入れる。(lsblkとかgpartedとかで調べられる。)
なお、update-grub
がないディストリビューションもある。そもそもupdate-grub
は特別なものではなく、
$ cat $(which update-grub)
とすれば
#!/bin/sh
set -e
exec grub-mkconfig -o /boot/grub/grub.cfg "$@"
となり、grub-mkconfig
しているだけだとわかる。なのでそうすればいいんじゃないかな……実際に試してないのでよくわからん。
参考
windows10アップデートでデュアルブートマシンが起動不能になった話 boot - Windows 10 upgrade lead into grub rescue - Ask Ubuntu