Windows10 MBR2GPT変換のトラブル対策まとめ

PC / Linux

Windows11からUEFI(GPT)のみのサポートになり、自作PCを使っておられる方はMBRからGPTへの変換を試みている方も多いと思います。

以前、このブログにおいてMBR2GPT変換を記事にしておりWindows8以降ではトラブルレスでしたが、Windows7から使っているシステムディスクはエラーが続出したので対策方法をまとめました。

なお、この記事の対象は自作PCを作られている方を想定して記載しています。市販PCはWindows10登場時よりUEFI(GPT)になっていると思われるので、このような変換作業は必要は無いと思います。

また、本記事では筆者の環境で生じた次の3つのエラーのみの対策方法を記載します。その他エラーは運よく遭遇しておりませんので、あらかじめご了承ください。

  1. Disk layout validation failed for disk 0
  2. Cannot find OS partition(s) for disk 0
  3. Cannot find room for the EFI system partition

作業を行う前の注意事項

これらのエラーが出た場合は、ブート領域やパーティション構成が部分的に不適正な状態となっていますので、修正作業といえどもシステムディスクを壊す可能性があります

実際、筆者もパーティション変更ソフトの操作を誤って、Windowsのシステムディスクでブート領域の修復をする作業を追加したので、SSD/HDDのクローンを作ってから作業するようにしたほうが良さそうです。

また、この記事を作成するまでに現象の発生するディスクをクローンして3回のコンバートを実施したのですがエラーにならない場合もありました。システムディスクの内容が少しずつ変わっているのが要因と思いますが、この記事通りに作業して必ずしも同じ結果になるとは限らないので、あらかじめご了承ください。

Disk layout validation failed for disk 0 の修復

mbr2gptでvalidationを行うと最初に下図のエラーが出ました。

このエラーはDiskのパーティションが4以上あることが原因です。

このシステムは回復ドライブが2つ存在しており、どうもWindows7時代にSSDへ換装するときのクローン操作失敗、もしくは、Windows10の無償アップデート時に回復ドライブが作られたと思われます。

この自作PCはシステム復旧用起動システムディスク(USBメモリ)はいつでも作れるので、回復ドライブを使う作業は実施しません。そのため、あっさりと重複している回復ドライブを削除することにしました。

DISKPART> select partition 3

パーティション 3 が選択されました。

DISKPART> list partition

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
  Partition 1    プライマリ               70 MB    31 KB
  Partition 2    プライマリ              222 GB    70 MB
* Partition 3    回復                 560 MB   222 GB
  Partition 4    回復                 611 MB   222 GB

DISKPART> delete partition override

DiskPart は選択されたパーティションを正常に削除しました。

DISKPART>
-----------------------------------
DISKPART> exit

削除後、ディスクの管理を開いて状態を確認し、mbr2gptのvalidationをパスすれば、このエラーの修正は完了です。

Cannot find OS partition(s) for disk 0の修復

次に、mbr2gptでvalidateをすると以下のようなエラーが発生しました。

PS C:\WINDOWS> mbr2gpt /validate /disk:0 /allowFULLOS
MBR2GPT: Attempting to validate disk 0
MBR2GPT: Retrieving layout of disk
MBR2GPT: Validating layout, disk sector size is: 512 bytes
Cannot find OS partition(s) for disk 0

このエラーはWindowsのブート領域になんらかの障害が発生しており、OS側がWindowsのパーティション領域を見つけられなくなっている状態のようです。

このPCは、Windowsのupdateで自動再起動となった場合、必ずディスクが見つからないとなっており、一度電源を切って再起動する必要がある状態でした。

原因としては、windowsアップデートにおいてブート領域に改修が入ったときに、何らかの原因でMBR領域を見つけるフラグ類を壊しているのだと想定していますが、HDD時代から10年近くも使い続けているシステムディスクなので、どのような経緯で障害になったのかははっきりしません。

インストールメディアで起動してコマンドで修正

復旧方法はいろいろあるようですが、Microsoftからメディアクリエーションツールをダウンロードして、WindowsのUSBブートディスクを作成し、そこからコマンドを入力する方法が確実だと思います。

USBからWindows10のインストールUSBを起動して、[コンピューターを修復する] → [トラブルシューティング] → [コマンド プロンプト]に進み、コマンドプロンプトを出します。

コマンドプロンプトが出たら、bootrecコマンドを入力します。

X:> bootrec /fixmbr (マスターブートレコードの修正)
X:> bootrec /rebuildbcd(ブート構成データの再構築)

bootrec /rebuildbcdコマンドを入力して、ブート領域が見つかれば、Yを入力して修正は完了です。

Windowsのインストールのスキャンは成功しました。
Windowsのインストールとして認識された合計数:1
[1] E:\Windows
インストールをブート一覧に追加しますか?Yes<Y>/No<N>/All<A>: Y (Enter)

Yを入力して「エラー」や「認識された合計数:0」となる場合

「書き込みできない等のエラー」や、「Windowsのインストールとして認識された合計数:0」が発生した場合は、ブート領域の再構築が必要で少々手間がかかります

再度、USBよりWindowsのインストールOSを起動して、以下のコマンドを入力して、ブート領域の再構築を行います。

X:> bcdedit /export c:\bcdbackup (元のBCDをバックアップする)
X:> attrib c:\boot\bcd -r -h -s (BCDファイルのリードオンリー、隠しファイル、システムファイル属性を解除する)
X:> ren c:\boot\bcd bcd.old (BCDの名前を変更する)
X:> bootrec /rebuildbcd

筆者の場合は、これで「Windowsのインストールとして認識された合計数:1」となったので、Yを入力すれば修正は完了です。

Windowsを再起動して、正常に立ち上がることを確認します。

Cannot find room for the EFI system partitionの対策

ブート領域を修復、mbr2gpt のverificationも成功して、いざ変換をかけると...またエラーがでました。

> mbr2gpt /convert /disk:0 /allowFULLOS
Cannot find room for the EFI system partition

このエラーは、EFIシステムを保存に必要な100Mbytes程度のパーティションが確保できない場合に発生するようです。

通常はWindowsシステムパーティションの末尾100Mbytesを自動的にフォーマットして確保してくれるようなのですが、パーティションの構成やフォーマット状態によって、自動で確保出来ない場合に発生するようです。

この問題が発生した場合は、Windowsシステムパーティションを拡大するなどの、パーティション構成の修正で対処します。

ただし、Windows付属の管理ツールのdiskpartコマンドは隣接したパーティションでないと編集操作が出来ないなどの制約があるため、フリーのツールを使う必要があります。

筆者はパーティション編集ツールに minitool partition Wizardを使いました。以前はEaseUS partition masterを使っていたのですが、システムディスクへの作業が有償版でしかできなくなり、やりたい作業ができなくなったのでminitoolに切り替えました。

minitool partition wizardをインストールして起動すると、ディスクの管理と同じような画面になりますので、以下の構成になるように編集します。

  • システムで予約済み 350MB程度
  • Windowsシステム ディスク残量全部を割り当て
  • 回復パーティション 500MB程度

この状態にして、mbr2gpt /convert /disk:0 /allowFULLOSとすると、今度は成功しました。

PS C:\Windows\system32> mbr2gpt /convert /allowFULLOS

MBR2GPT will now attempt to convert the default book disk.
If conversion is successful the disk can only be booted in GPT mode.
These changes cannot be undone!

MBR2GPT: Attempting to convert disk 0
MBR2GPT: Retrieving layout of disk
MBR2GPT: Validating layout, disk sector size is: 512 bytes
MBR2GPT: Trying to shrink the OS partition
MBR2GPT: Creating the EFI system partition
MBR2GPT: Installing the new boot files
MBR2GPT: Performing the layout conversion
MBR2GPT: Migrating default boot entry
MBR2GPT: Fixing drive letter mapping
MBR2GPT: Conversion completed successfully
Call WinReReapir to repair WinRE
MBR2GPT: Failed to update ReAgent.xml, please try to  manually disable and enable WinRE.
MBR2GPT: Before the new system can boot properly you need to switch the firmware to boot to UEFI mode!
PS C:\Windows\system32>

ReAgent.xmlエラーは回復パーティションの紐づけを行うファイルですが、今回は回復パーティションを削除したため、修復は困難(というより消したので不可能)でした。

しかし、SSDが登場してから突然故障がほぼ発生しなくなり、USBブートで容易に復旧が出来るようになったので、自作PCをしている方にとっては、このエラーを無視しても実害はほとんどないと思います。

同時にパーティションの再構築も行っておくと良い

変換が無事にできれば、未割り当てになっているパーティションをWindowsシステムに割当てなおしをして、ディスクの容量に無駄が出ないよう再構築をしておきます。

以下が再構築前のディスクの状態です。

移動/サイズ変更、拡張、結合などの機能を使いパーティションを整理してから、「適用」をクリックすると以下のように整理できました。

システムディスクが500Mbytesくらい増えました。

作業としては簡単なのですが、パーティション操作はミスをするとデータが消える可能性があるので、ディスク容量が切迫している状況でなければ無理に実施しなくても良いかもしれません。

BIOSのUEFIモード設定を忘れずに

これでGPTへの変換が完了しました。以降の起動はUEFIモードでしか立ち上がらないので、マザーボードのBIOSを設定変更するのを忘れないようにしましょう。

CSMという共用モードだとMBR、GPT関係なく立ち上がりますが、MBRはサポートされなくなる方向であり、将来の更新で不適合が発生する可能性もあるので、CSMはdisableにしたほうが良いと思います。

Windows7時代から使い込んだシステムディスクのGPT変換は、エラー続出で修復が結構大変でした。

Windows8から作ったPCを3つ持っているのですが、いずれもエラーが全く出なかったので、クリーンインストールという手段も検討の余地があるように思います。

Windows7無償アップグレードでもWindows10でのサポートが受けることができますので、データのバックアップだけとってクリーンインストールとしても手間と時間は同じくらいかもしれませんね。