プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2016/06/18

デュアルブート環境でWindows10にアップグレードしたらOSが起動しなくなった

update2020/01/18 event_note2016/06/17 16:05

Windows 10 へのアップグレードどうしようか悩んでいたんですが、無償期間がもうすぐ終わってしまうし一念発起してやってみたら grub resque と表示され、OS が起動しなくなってしまいました orz

環境

  • Windows 8.1
  • Linux Mint

いろいろ調べてみると、Windows 10 へのアップグレードの際に自動的にパーティションが作られるらしく、そのせいで MBR のレコードの順番が変わってしまって起動できなくなったようです。

現状の確認

まずは以下のコマンドを入力します。

grub rescue > ls
(hd0) (hd0,msdos5) (hd0,msdos4) (hd0,msdos2) (hd0,msdos1)

パーティションの一覧が表示されます。
私の場合は上記のように表示されました。
ここで表示された各パーティションについて、以下のようにコマンドを打って中身を確認します。

grub rescue > ls (hd0,msdos1)/

すると、全てのパーティションで

error: unknown filesystem

と表示されてしまいました。
完全に予想外。
どこかのパーティションが Linux のはずなので、何かしら認識できると思ったんですが。

とりあえず今度は次のコマンドを打ってみます。

grub rescue > set
cmdpath=(hd0)
prefix=(hd0,msdos6)/boot/grub
root=hd0,msdos6

ふむ。
もともとは msdos6 に Linux が入っていて、そこから起動していたのね。
でも msdos6 がなくなってしまったと。
なんでや。
とりあえず、LiveCD を利用して Ubuntu を起動し、以下のコマンドを打ってみる。

$ sudo parted -l

Number  Start   End    Size    Type      File system     Flags
 1      32.3kB  199GB  199GB   primary   ntfs            boot
 2      199GB   199GB  471MB   primary   ntfs            diag
 3      199GB   377GB  178GB   extended
 5      369GB   377GB  7999MB  logical   linux-swap(v1)
 4      377GB   500GB  123GB   primary   fat32

3番目のファイルシステムが空欄になっています。
多分ここに Linux が入っていると思うのですが、壊れてしまったのかもしれません。
とりあえず修復を試みます。

sudo fsck /dev/sda3
fsck from util-linux 2.27.1
e2fsck 1.42.13 (17-May-2015)
fsck.ext2: Attempt to read block from filesystem resulted in short read while trying to open /dev/sda3
Could this be a zero-length partition?

やはい、これは本格的に壊れたかな?
今度は testdisk というツールを試してみました。
まずはインストールから行いますが、先に設定を行わないと、見つからないと言われてしまいます。

sudo apt-get install testdisk

インストールが完了したら実行します。

sudo testdisk

ここから先はもう必死だったので、メモを取らずにやってました。
ここのサイトを参考にしてやりました。
大体以下のようなことをやったと思います。

  • Create を選択
  • Disk /dev/sda を選択し、Proceed を選択
  • Intel を選択
  • Analyse を選択
  • 分析結果が表示されたが、復元した情報では前述の No3 のパーティションが * になっており、No1 と No2 のパーティションが削除されていたので、No1 を P(Primary) に変更し、Write を選択
  • 再起動

すると、再び grub rescue と表示されました。
ここで以下のコマンドを入力すると

grub rescue > ls (hd0,msdos2)/

今度はちゃんと Linux のフォルダの中身が見れました。
というわけで、以下のようにコマンドを打ち、grub を起動します。

grub rescue > set prefix=(hd0,msdos2)/boot/grub
grub rescue > insmod (hd0,msdos2)/boot/grub/i386-pc/normal.mod
grub rescue > normal

Linux 起動後、以下のコマンドを打ち、GRUB を再インストールします。

$ sudo grub-install /dev/sda

これでひとまず GRUB は OK です。
しかし気になるのは Windows のほう。
Windows 8.1 から Windows 10 へのアップグレード中の再起動処理でおかしくなったので、中途半端な状態です。
案の定 Windows を起動すると、Windows 10 へのアップグレードに失敗したというメッセージが表示されました。
そして、元の Windows 8.1 の復元処理に入ったんですが、なんとそこも失敗してしまいました。
というわけで Windows が起動できなくなってしまいました。
ただ、Linux を起動すれば Windows 側の領域は覗くことができ、データはちゃんと残っていたので、バックアップを取って Linux も Windows も両方クリーンインストールすることにしました。