Windows 8.1 と Ubuntu のデュアルブートで Grub のエラーになったのを直した
Ubuntuを 14.04 にして少ししてから、Ubuntu の調子がおかしくなって、Unityが起動しなくなったので色々と入れ替えた挙句・・・。という近況。
時間空いてるけど、自分向けのメモとして環境系のトピック書いておくと良さそうなのでブログにしておくことにする。Evernote とかだと、後で読んでも意味がわからなそうだし。
最近、VAIOをまるごと入れなしてしまえ、と思っていじったら Bootloader(Grub)が起動しなくなって焦ったけどそれなりに綺麗に直ったのでメモしておく。
マークダウンで書くと楽そうだけど、そういうのもあるのかな?
やったこと。
- VAIOをリカバリ領域から初期化して、一度Windowsから入れなおす
(その前に、Ubuntuはパーティション初期化とかしてみた) - ホントは、Ubuntuのパーティションだけ初期化〜再インストールしたかったけどUbuntuのインストール時に不明なパーティションがどうの、と言われて失敗していた
(後で思うと、Win8.1のパーティションがLinux達から見るとイミフだったのかな。。) - いっそのこと、Windowを捨てて(確定申告とかあるので捨てれない)Ubuntu専用マシンにしてしまいたかった。
- とりえあず、ディスクが 128GB の SSD なので、Windowsのリカバリ領域をUSBに退避してディスクに少し余裕を持たせる。
- その前に、リカバリ領域からWindows8の再インストールしてたかも。(順番忘れた)
- で、その後に Ubuntu 用のパーティションを作成して、LiveUSBから Ubuntu14.04 をインストールする。Windows8 (8.1ではないのが良かったのかも) ではこの辺りは結構スムーズ(だったかな・・・)。
- いや、Ubuntu14.04 がうまく行かなくて、もっとミニマム構成のやつを入れたような気がする。(なんというやつか忘れたけど。忘れてばっかりだ・・・)あとは、Windowsで LiveUSBCreator だとかいう感じの名前のやつを使ってもUSBブートできなくて、別の Ubuntu でBootableUSB を作るツールとか使ったかも。
- ↑のミニマムっぽいやつの影響で、Wifi のドライバが無かったり Gnome のデスクトップでUnity が起動できないので、手動で入れたりした。
- (この時点で、一応 Ubuntu14.04 が動いている状態。でも Unity が使いたくて入れなおしたりしてるけど、起動時には Gnome で、起動後は Unity になる、というちょっとイマイチな状態。面倒だから別にいいけど)
- このあと、契約書類とか書かないととかで、Windowsを起動したりした。
というのが前置き。
問題は、そのあとで実施した Windows8.1 のインストールっぽい。(多分)
Windows8.1 のインストール前までは、Grub でブートローダが起動して Ubuntu が選べる状態になっていた。前の時は、BIOSを毎回いじらないと Win/Ubuntu でデュアルブートできなかったけど、なぜか上で書いた再インストール後は BIOS でディスクのタイプ(?的な設定。書きながらBIOSを起動したりできないのでとりあえず適当に書いておく。あとで修正するかも?)を Legacy にしても Grub が起動して、Ubuntu が起動できていた。前の時は、 UEFI にしないと起動できなかった。仕組みは全然分からない。
Windows8.1 をインストール(アップグレード)してから、Grub が起動しなくなって Grub Error とかのエラーが出ていて、 Unknown filesystem とか言っていた気がする。
どうやら、Windows8.1 になるときにパーティションテーブルがちょっと変更されて、Grub の知ってるやつからずれてしまうことが原因らしい。Grub が認識してる起動ファイル(?)が覚えてた場所になくて(ずれてて)Grub が起動できない様子。
この時は、一応プロンプトが出るので以下のようなことをするとなんか起動できたりする。
- ls
(パーティションのリストのようなものが出る) - ls (hd0,gpt1)
(パーティションを指定して ls とかすると、中が見えたりする。と思った。見れない場合は Unknown filesystem とか言われたような) - ls (hd0,gpt8)/boot/
(今回の場合 "(hd0,gpt8)" がUbuntuのパーティションだったので /boot/ 以下の ls 結果が見える。この辺りは普通の ls の雰囲気) - 対象のパーティションを探し当てたら、以下のコマンド実行
set root=(hd0,gpt8)
set prefix=(hd0,gpt8)/boot/grub
insmod (hd0,gpt8)/boot/grub/i386-pc/normal.mod
normal - insmod のところは、このようなファイルがあるようなので。なければパスが違いそう。環境とか Linux(Grub?) のバージョンによって状況が異なりそう
- normal を実行すると、Grub のブートローダが起動したら良い。
起動しなかったら他の手がかりを元にググり直すこと。 - 起動した場合、次回からはGrubが起動するようにしてあげる。
(以下が今回の本題) - /etc/fstab を見ると、(今回のVAIO/Ubuntu では) sda9 に / があるよ、とコメント書いてある。 df で見ると / は /dev/sda8 になってる。
なるほど、ずれた様子。 - 以下のコマンドで Grub をインストールし直しみたいなことができるらしい
sudo grub-install /dev/sda8
sudo grub-update
(エラー無いよ、と言われた) - その後、再起動すると Grub が起動した!
まとめ。
- 正確なところはわからないけど、Windows側の変更によってパーティションがずれて Grub が困ったらしい。(正確じゃない記事があるのはどうかと思うけど、自分の状況にピッタリの情報が見つからなかったのでそれなりに困ったので別にいいや。時間無いし)
- 最近の UEFI のマシン(Windows8以降?)では、デュアルブートが面倒。(というかWindows側が嫌がらせのような高速ブートの仕組みを導入して使いづらい)
- BIOS いじりながらデュアルブートしてるけど、正確に把握してないので書かない。
色々と面倒。でも、さくらのVPSで開発してたのであんまりそこには影響なし。良かった。。