2016/05/13 14:10:02

windows10アップデートでデュアルブートマシンが起動不能になった話


Warning: Attempt to read property "post_excerpt" on null in /home/kpkyvkzp/public_html/unskilled.site/wp-content/themes/unskilled2/content-header-eyecatch.php on line 5
目次(クリックするとジャンプします)
  • 1:デュアルブートで起動不能
  • 2:状況の整理
  • 3:windows10の半強制アップデートの恐怖
  • 4:無慈悲なgrub rescue
  • 4.1:パーティションを確認する
  • 4.2:ブート用USBメモリを用意して更に詳しく情報を得る
  • 5:windows10アップデートではどうやらパーティションを作るらしい
  • 6:復旧作業
  • 7:補足・ハマったポイント
  • 7.1:焦らない・慌てない
  • 7.2:grubの頼れる日本語情報
  • 8:まとめ

デュアルブートで起動不能

@MINOのノートはLinuxとWindowsのデュアルブートにしています

そのせいでwindows10アップデートのよってLinux、windowsともに起動不能になりました。

状況の整理

当初@MINOのハードディスクは全部で7つのパーティションが存在していました。

Device         Start        End   Sectors   Size Type
/dev/sda1       2048     616447    614400   300M Windows recovery environment
/dev/sda2     616448     821247    204800   100M EFI System
/dev/sda3     821248    1083391    262144   128M Microsoft reserved
/dev/sda4    1083392  309612543 308529152 147.1G Microsoft basic data
/dev/sda5  310534144  701159423 390625280 186.3G Linux filesystem
/dev/sda6  701159424  712878079  11718656   5.6G Linux swap
/dev/sda7  712880128 1103505127 390625000 186.3G Microsoft basic data

このノートパソコンのHDDの容量は750GB。windowsプリインストール機でリカバリディスク無しでした。UEFI/GPTフォーマットです。

工場出荷時にリカバリ用のパーティションがあり、システム(windows)用のパーティーション、データのパーティーションに分かれていました。

Linux導入時にデュアルブートにするべく空き容量を更にパーティーション分けしています。パーティーションの順番がいまいち整理されていないのは、デュアルブートシステム構築時にいろいろトラブルがありつつ作業を進めた結果です。

Linuxはsda5、windowsはsda4に入っています。

ブートローダはgrub2を使用しています。

一応この構成でデュアルブート機として問題なく動いていたのですが、先日@MINOにもwindows10アップデートの時限タイマーが発動しやがりました。

windows10の半強制アップデートの恐怖

あんまり10のアップデートのことを気にしていなかったので、「8時間後にアップデートします」的なメッセージを見逃していました。

運が悪いことに用事があり、windowsを立ち上げたまま放置してしまったのです。

用事から返ってくると、ノートが再起動してLinuxが立ち上がっていました。@MINOのgrubの設定では再起動後10秒経つと自動的にLinuxが立ち上がるようになっています

やべえwindows10アップデートはじまっちゃったぽい…

まだ先延ばしにするつもり(なんならアップデートしないつもり)だったのですが、始まったものはしょうがないと思い、windows10アップデートを受け入れることにしたのです。

windows10アップデートは何段階かに分かれていて数回再起動がされるようです。

無慈悲なgrub rescue

そして最初の再起動の時、事態は発生しました。

error: no such partition. 
grub rescue> 

あえ?grub rescue画面になっちゃたぞ?どうしたんだ?

grub rescueはブートローダが何らかの理由でOSを立ち上げる(準備する)ことができなかった場合に現れる無慈悲な画面です。

ブートローダ系のトラブルはそれほど体験していないので知識が浅く、どう対処していいかこの時点ではわかりませんでした。

パーティションを確認する

とりあえずggrkということでいろいろ調べたところ、まずは落ち着いてパーティション・ファイルシステムを確認しろとのことでした。

まずlsコマンドで構成を確認します。@MINOの場合トラブル直後は以下のような出力がありました

grub rescue> ls
(hd0) (hd0, gpt8) (hd0, gpt7) (hd0, gpt6) (hd0, gpt5) (hd0, gpt4) (hd0, gpt3) (hd0, gpt2) (hd0, gpt1)

Linuxはsda5つまり(hd0, gpt5)に入っているはずです。とりあえずLinuxでも起動できればいいのですが…。

grub rescue> ls (hd0, gpt5)/
error : unkown filesystem 

あれ?ファイルシステムがunkownになっているぞ?

ファイルシステムが壊れたのか?

もしHDDが物理的損傷を受けたりしているとどうしようもありませんが、おそらく今回はwindows10アップデートに端を発する不具合のはずで物理的な損傷ではないだろうと踏んでいました。

論理的損傷であれば復旧はできる可能性が高いかもしれない…。

ブート用USBメモリを用意して更に詳しく情報を得る

しかしこの知識不足の段階でいろいろいじり回すのはまずかろうと思い、まずは情報収集に努めてみることにしました。

HDDの中身を見たりするにはLinuxを何らかの方法で立ち上げる必要がありますので、この時点で別PCにてUSBメモリにubuntuをインストール、復旧用USBとしてノートを起動することができるようにしました。

USBからたちあげたubuntuでHDDを確認してみると、ディレクトリやファイルは普通に存在しており、アクセスも可能です。どうやらデータが失われた訳ではなさそうなので、少し安堵しました。

マウントできておりファイルも見えているとなるとファイルシステムも問題ないように思えます。

コマンドからも確認します。

sudo parted -l

この時ある異変に気が付きました。

windows10アップデートではどうやらパーティションを作るらしい

パーティーション7個だったはずなのに8個あるぞ?

Device         Start        End   Sectors   Size Type
/dev/sda1       2048     616447    614400   300M Windows recovery environment
/dev/sda2     616448     821247    204800   100M EFI System
/dev/sda3     821248    1083391    262144   128M Microsoft reserved
/dev/sda4    1083392  309612543 308529152 147.1G Microsoft basic data
/dev/sda5  309612544  310534143    921600   450M Windows recovery environment
/dev/sda6  310534144  701159423 390625280 186.3G Linux filesystem
/dev/sda7  701159424  712878079  11718656   5.6G Linux swap
/dev/sda8  712880128 1103505127 390625000 186.3G Microsoft basic data

ああ!!sda5Windows recovery environmentになっている!!

今まではLInuxがsda5だったはずです…。

どうやらwindows10のアップデートではリカバリ領域を作るようです。当たり前といえば当たり前かもしれないけど。

今回の運の悪いところは、Linuxをwindowsの後ろのパーティーションに入れていたこと。

windows10のアップデートはwindowsが入っているパーティーションの直後にリカバリパーティーションをつくるようなので、windowsパーティーションより後ろのパーティーションは順番がずれることになります。

順番がずれればgrubもパーティションを探すことができなくなる道理で。

復旧作業

事前の情報収集からsda6にlinuxが入っていることがわかったので、またgrub rescueに戻り、sda6の中身を見ます。

grub rescue> ls (hd0, sda6)/

コマンドの出力結果の中に/bootがあるかと思います。その中身にgrubのモジュールがあるのですが、そのモジュールを念の為確認します。

/boot内のディレクトリ構成はシステムによって異なる可能性がありますが、.modという拡張子のファイルが大量に存在するディレクトリがあるかと思います。

@MINOの環境では以下のパスにモジュールが入っていました

grub rescue> ls (hd0, sda6)/boot/grub/x86_64-efi

その中に

normal.mod

があるのを確認します。

このnormal.modはgrubのノーマルシェルを立ち上げるモジュールです。このモジュールを立ち上げられるとLinux、windowsを起動できる可能性が高いです。

normal.modを読み込みには以下のようにします。@MINOの環境での例です。各位の環境に読み替えてください。

grub rescue> set prefix=(hd0,sda6)/boot/grub
grub rescue> insmod (hd0,sda6)/boot/grub/x86_64-efi/normal.mod
grub rescue> normal

このコマンドでgrubのノーマルシェルが起動するはずです。多くの場合はOS選択画面が起動されるかと思います。

この状態で電源を切るとこのコマンドをまた打たないといけなくなります。

なので起動出来ている間にgrubを修正します。

立ち上げたLinuxで(usbブートではなく復旧した方のLinux)以下のコマンドを実行します。(デバイス名は@MINOの場合のものです)

sudo grub-install /dev/sda/

これで次回の起動からはまたgrubノーマルシェルでの起動になります。

補足・ハマったポイント

焦らない・慌てない

grub rescue> ls (目的のパーティション)/ 

でどうしてもunkownになる場合、ファイルシステムが壊れている可能性もあります。この場合、fsckコマンドでファイルシステムを復旧できる可能性(ブートメディアから立ち上げたLinuxから行う)がありますが、データが飛ぶ可能性もあります。

もし存在するパーティションのすべてがunkownになる場合は、ブートメディア等から立ち上げてストレージの状況やパーティション、ファイルシステムの調査をちゃんと行ったほうが良いかと思います。

焦って不可逆的な操作をして取り返しがつかないことになりかねません。

ストレージが物理的に逝っていない限り、データを救える可能性は高いですので焦らず対処しましょう。

grubの頼れる日本語情報

grubは@MINOのような初心者には難しい領域です。あまり日本語の情報が無いのもそれに拍車をかけている気がします。

@MINOが頼っている日本語情報の1つにArchLinuxのwikiがあります。膨大な量の情報があるwikiですがgrubについても詳しく書かれています。ちょっと理解するのはむずかしいですが…。

grubに触るならオススメです。

GRUB https://wiki.archlinuxjp.org/index.php/GRUB

まとめ

  • windows10のアップデートはパーティションを新設する
  • そのパーティションはwindowsシステムパーティションの真後ろにできる
  • そのためその以降のパーティションはズレる
  • マルチ・デュアルブートをしている場合に不具合になる可能性がある
  • 復旧は落ち着いて