2018年12月に突然使っていたwindows10 Insider Previewのマシンに0xc000000eエラーが起きて使えなくなりました。
私のコンピュータ環境は、windows10とubuntu16のマルチブートです。windowsが死んでもubunntuが生きているので、コンピューターを使うのに支障はありません。
しかしwindowsが使えないのは不便なので、すぐにwindows10 Insider previe版(以下windows10)のクリーンインストールを行いました。
windows10 Insider Previewのクリーンインストール
ディスクの不良も疑ったので、違うハードディスクにwindows10を入れなおしました。インストールに問題もなく、一番恐れていたプロダクトキー認証もwindowsログオンしただけで問題なくクリアしました。。
これで問題が解決すると思っていたのですが、むしろ悪夢の始まりでした。私の環境ではgrubというブートローダーで、OSの切り替えを行っていたのですが、これができなくなっていたからです。
マルチブートの悪夢。grub起動ができなくなった
grubでマルチブートの管理を行う場合、通常同じハードディスクに異なるOSをインストールしますが、私の環境では2つのハードディスクにwindows10とubuntu16をそれぞれインストールしてgrubで起動の管理をしていました。
2つのハードディスクにgrubを使ったマルチブートを実現させる方法は珍しく、インターネットで探してもこの方法で使っている人はいませんでした。
ディスク構成
uifiで「ディスク0」を優先して読み込む設定で、grubによってwindowsブートマネージャーかubuntu16のいずれかを起動させるようになっていました。
ディスク0
パーテーション1: windows boot manager(GPT) パーテーション 2:ubuntu16 パーテーション 3: linux swap
ディスク2
パーテーション 1. unknown(リカバリー領域) パーテーション 2. windows10
ディスク1 (ストレージ用)
パーテーション 1. fat16 パーテーション 2. ntfs
0xc000000eエラーの原因が特定できた
今回windows10のクリーンインストールという手段をとりましたが、そもそもwindowsの入っているディスクに障害はなく、0xc000000eエラーの原因は「ディスク0」に入れてあるwindows boot managerが壊れていたことにあったようです。
UIFIでディスク2(パーティション2.windows10)のハードディスクを指定した場合は問題なくwindows10が立ち上がります。
しかし「ディスク0」を指定してgrub経由でwindows10を立ち上げようとすると、依然として0xc000000eエラーがでます。
根本解決をするには、「ディスク0」にあるwindows bootmanagerを修復するしかありません。
何時間もネットで検索し、ようやく有効な情報にたどり着いたのが下記です。
GPTでインストールしたWindows boot managerの修復方法
要約すると、windows10のインストールDVDから修復用のコマンドプロンプトを立ち上げ、その後diskpartという対話式のコマンドを起動させwindows boot managerの入っているディスクとパーティションを選択し、ボリュームレターという番号が欠落している場合はそれを補い、ボリュームレター番号で指定したwindowsの入っているパーティションから壊れたwindows boot managerの入っているパーティションに必要な情報をコピーするという手順です。
>diskpart #DiskPartを起動します。 DISKPART>list disk #ディスクの一覧を表示 DISKPART>select disk 0 #windows boot managerの入っているパーティション番号を番号で指定 DISKPART>list volume 番号 #GPTの場合はパーティションはvolumeで指定するのでこのコマンドを使います。MBRの場合は別 DISKPART>assign letter b #windows boot managerの入っているボリュームに番号が付いていなかったので、Bを指定 DISKPART>list volume #ボリュームレターが設定されたかの確認 DISKPART>exit #DiskPartを抜けます。 >bcdboot f:\windows /s b: /f UEFI > #windowsの入っているパーティション(ボリュームレターF)から #windows boot manager(ボリュームレターB) にコピーする
私の場合、この手順でwindows boot managerが生き返りました。
今回使ったbcdbootというコマンドとは?
使い方
bcdboot <sorce> [コマンドオプション]
<sorce>
BCDファイルの入っているフォルダーをボリュームラベルを使って指定します。
f:(ボリュームラベル)\windows
コマンドオプション
/s
ブート環境ファイルのコピー先システムパーティションを指定(省略時、ファームウェアで認識されるシステムパーティションを自動選択)
パーティションはボリュームレターで指定
/f
省略可能です。ファームウェアの種類を指定します。有効な値は、UEFI、BIOS、ALL です。
使ってみた感想
ネットでbcdboot というコマンドは0xc000000eエラーに対して有効とありましたので使ってみましたが、意味も分からずネットに書いてあるとおりに使っても効果がありませんでした。
どうやら今回のbcdboot使い方は、windowsの入っているパーティションからブート領域へwindows boot manager の情報をコピーするという内容のようです。
Diskpartをつかってwindowsの入っているパーティションを指定してやらないとエラーが起きて意味を成しません。
最後にひとこと
なんとか私はこれで元の状態に回復しました。
シングルブートならwindows10のクリーンインストールでなにも問題ないはずがubuntuとのマルチブートなだけにとても苦しみました。
同じように苦しんでいる人がいらっしゃればコメントをください。お力になれれば幸いです。
コメント