起動ドライブを MBR から GPT に変換して UEFI 環境に移行する方法

ThinkPad X1 Carbon 初代を Windows 10 に移行中なのですが、途中まで作業してはたと気づいた…「MBR のままやん…」。ということで、MBR 形式の起動ドライブ(システムドライブ)を GPT に変換してセキュアブートに移行する方法を紹介します。

ディスクの内容を保ったまま移行できるので、BIOS 起動で Windows 10 などをインストールした後に UEFI 起動に変更したい場合に使えます。今回まさにこのまんまの状況です。

おおまかな流れ

作業の大まかな流れは以下の通り。

  1. 【コンピューターの管理】で物理ディスク番号を確認
  2. gptgen を実行して MBR → GPT 変換
  3. diskpart で UEFI システムパーティションと MRP を作成
  4. bcdboot でブートローダーを設定

1. ~ 2. は、普通に起動した Windows 上での作業です。3. ~ 4. は、回復ドライブなどのメディアから起動させての作業です。あらかじめ回復ドライブを USB メモリなどに作成しておきます。僕の場合は Windows 10 のインストールメディア(USB メモリ)をそのまま使用しました。

Windows 10 を入手する

Windows 10 のインストールメディアは、上記リンク先のメディア作成ツールで簡単に作成できます。

物理ディスク番号を確認する

デスクトップ上とかエクスプローラーの左ペインとかにある【PC】を右クリックして【管理】をクリックし【コンピューターの管理】を起動します。

左ペインの【ディスクの管理】をクリックすると右ペインにディスク一覧が表示されますので、GPT に変換したいディスクの番号を確認します。

gpt-computer

今回の場合はディスク番号『0』で、ディスク先頭にある MBR のシステム予約領域は 500MB でした。(※この後はこの前提で説明します。)

gptgen で MBR → GPT 変換する

以下から gptgen をダウンロードします。

gptgen download | SourceForge.net

使用するファイルは gptgen.exe のみです。解凍して適当な場所に置きます。今回は C:\Windows\System32 に置きました。

管理者権限でコマンドプロンプトを起動し、以下のコマンドを実行します。先ほど確認したディスク番号を指定します。

C:\Windows\System32\>gptgen.exe -w \\.\physicaldrive0

実行は一瞬で終わります。

gpt-gptgen-exec

UEFI 起動用のパーティションを作成する

Windows 10 のインストールメディア(USB メモリ)から起動します。

この時点で BIOS のセキュアブートの設定項目を有効に変更します。まだ起動用のパーティションが無い C: ドライブからは起動せず、インストールメディアの USB メモリから起動するようになります。

起動したら【コンピューターを修復する】→【トラブルシューティング】→【詳細オプション】→【コマンド プロンプト】と選択してコマンドプロンプトを起動します。コマンドプロンプトで diskpart を起動して作業します。

まずディスク一覧を表示して、対象のディスクを選択します。

DISKPART>list disk
 ディスク      状態           サイズ   空き   ダイナ GPT
 ###                                          ミック
 ------------  -------------  -------  -------  ---  ---
 ディスク 0    オンライン      238 GB  2048 KB        *
 ディスク 1    オンライン     7647 MB      0 B
DISKPART>select disk 0

次に対象ディスクのパーティション一覧を表示して先頭にあるシステムの予約パーティションを選択して削除します。今回の場合は先頭の 500MB のパーティションです。これを削除した領域を使って、UEFI システムパーティションと MRP(Microsoft Reserved Partition=システム予約済みパーティション)を作成します。

DISKPART>list partition
  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
  Partition 1    プライマリ           500 MB  1024 KB
  Partition 2    プライマリ           100 GB   501 MB
  Partition 3    プライマリ           137 GB   100 GB
DISKPART>select patition 1
DISKPART>delete partition override

新しく UEFI システムパーティションを作成します。必ず 100MB 以上にします。今回は 100MB で作成しています。フォーマットしてドライブレターを適当に割り当てます(今回は I: を割り当て)。ドライブレターは後で実行するブートローダー設定で指定します。

DISKPART>create partition EFI size=100 offset=1
DISKPART>format quick fs=fat32
DISKPART>assign letter=I

続いて MRP を作成します。サイズは 500MB – 100MB なので 400MB、オフセットは 100MB(=102400KB)+ 1MB(=1024KB)なので 103424KB です。MRP は作成するだけなのでフォーマットとかしません。作成したらパーティションを確認します。

DISKPART>create partition msr size=400 offset=103424
DISKPART>list partition
  Partition ###  Type              Size     Offset
  -------------  ----------------  -------  -------
  Partition 1    システム           100 MB  1024 KB
  Partition 4    予約               400 MB   101 MB
  Partition 2    プライマリ         100 GB   501 MB
  Partition 3    プライマリ         137 GB   100 GB

だいたいこんな感じになっていればOK。今回はパーティション 1 が UEFI システムパーティション、パーティション 4 が MRP です。パーティション番号がずれてたりするけど気にしない。

最後に list volume でドライブレターを確認します。たいていの場合、システムドライブが C: から D: になってしまっているので修正します。ボリューム番号は各自の環境で違うので要確認。僕の場合は元々 D: ドライブもあって、E: になってしまっていたのでそれも修正しました。ドライブレターの修正が終わったら diskpart を終了します。

DISKPART>list volume
DISKPART>select volume 3
DISKPART>assign letter=C
DISKPART>select volume 4
DISKPART>assign letter=D
DISKPART>exit

ブートローダーを設定する

続いてコマンドプロンプトで bcdboot を使ってブートローダーを設定します。

X:\Sources>bcdboot C:\Windows /l ja-JP /s I: /f UEFI

/s オプションの引数として UEFI システムパーティションに割り当てたドライブレター(今回の場合は I:)を指定します。

あとは再起動すれば UEFI で起動するはずです。

上記が面倒な人にはコレ。

僕もフリー版にはお世話になってます。MBR → GPT 変換は Professional 版でしか出来ないみたいなので試せてないのですが、今回みたいにちまちまやるよりは簡単なはず。

スポンサーリンク
レクタングル(大)
レクタングル(大)

フォローする

コメント

  1. mifjpn より:

    いい記事をありがとうございます。ところで、
    create partition msr size=400 offset=10342
    ではなく
    create partition msr size=400 offset=103424
    ですよね。ちょっとTYPOでしょうか、
    ちょっとヒヤッとしました^^;

  2. ふじた より:

    mifjpnさん、コメントありがとうございます。
    ご指摘の通りTYPOです。大変失礼いたしました。
    今更ですが修正しました。

  3. […] こちらを参考にした。 まずLinuxを起動、fdiskから①既存のパーティション構成をメモ②パーティション削除③GPT変換後パーティション再作成を行った。 位置とフォーマットさえ合ってい […]

  4. しばば より:

    ブートファイルをコピーしようとして、エラーが発生しました。
    という結果になってしまったのですが、失敗してしまったということでしょうか?
    もしお時間がありましたら、ご返信いただけると幸いです。
    https://i.imgur.com/3AuopsI.jpg
    https://i.imgur.com/yE5kYUJ.jpg
    https://i.imgur.com/92kjtLC.jpg

  5. ふじた より:

    しばばさん、コメントありがとうございます。

    最初の画像を拝見すると、システムドライブ(起動ドライブ)ではない(ように思う) disk 1 を選択した上で、111GB もの大きなパーティションを削除しているように見受けられます。

    また、物理ドライブ数が多いため、この画像だけではなんとも言えません。
    (私の記事はノートPCで固定ドライブ 1ドライブのみの構成での例なので…)

    できれば操作前のバックアップを書き戻して、最初から実施してみることをお勧めします。
    またそれぞれの操作の意味を理解してから行なってみてください。

    あまりお力になれずすみません。

  6. しばば より:

    ご返信ありがとうございます。
    osそのものを削除してしまったらしく、起動しなくなってしまいました…
    結局ドライブをgptに変更後にOSを再インストールしました。
    お騒がせしました。

  7. 猫が好き より:

    はじめまして
    とてもわかり易く、コマンドもしっかり書かれていたので
    すんなりと移行が完了しました。
    かなり古い記事ですが、一言お礼をお伝えしたく思いコメントさせていただきました

    ありがとうございました
    m(_ _)m

  8. ふじた より:

    猫が好きさん、コメントありがとうございます。
    お役に立ててよかったです!

  9. mm より:

    Win7 professional 32bit版を使っています、これをwin10 64bitまで上げたいのですが
    BIOSからUEFIにしたいなといろいろサイトを探していてここにたどり着きました。
    別のサイトですとwin7 x64であること、がUEFIに上げる際の条件として表示されていたりました。
    このサイトに記載してある内容は32bit版からでも実行できますか?
    (いきなり試すのはちょっと、と思いまして、教えていただけるとありがたいです)

  10. ふじた より:

    mmさん、コメントありがとうございます。

    Windows7 にしろ Windows10 にしろ、クリーンインストールではなく、既存のインストールされたアプリやユーザーデータを引き継いだ上で 32bit版から 64bit版へ移行する方法を私は知りません…私の中では不可能、と捉えています。

    ということで、現在、Windows7 32bit版をお使いの場合は、このページに書いてある方法は残念ながら使えないと思われます。

  11. mm より:

    mmです、返信下さいましてありがとうございます。質問について補足です。
    現状のwin7 pro 32bit → win10 32bitに上げて、ここからwin10 64bitをクリーンインストールしようと試していました。64bitをクリーンインストールする際、MBRにはインストールできませんと表示が出たのでGPTにしたいな、と検索していました。
    そもそもの、win7 32bitのOSをインストールする時点でUEFIでブートできればいいのかな?と思いご質問しました。
    まずwin10 32bitまで上げてから、64bitをクリーンインストールする時点で上の手順でGPTに変更することは可能ですか??
    、、質問がとんちんかんでしたらすみません。

  12. ふじた より:

    mmさん
    この記事は「ディスクの内容を保ったまま移行できる」ことを重視して書きましたので、クリーンインストールとは別の話です。
    クリーンインストール(=ディスク内容が消えてよい)なら、この記事に書いてあるような面倒なことは不要で、
    Windows10 64bit版のインストール用 USB メディアを用意してそこからブートして、HDDの内容(パーティション)を全部削除してからインストールすれば GPT でインストールできると思いますよー。

  13. bigslope より:

    Windows7 64bit版でMBR→GPT移行をやってみて、手順を間違えなければうまく行くだろうと踏んでいたのですが、まあ色々とえらい目に遭って半日がかりでした。
    最終的にはどうにかうまく行ったのでメモを残しておきますが、最悪どうにもならないって可能性も否定出来ません。

    手順の最後のbcdbootの記述ですが、Windows7のインストールディスクのbcdbootには/fオプションが存在せず、そのまま入力するとbcdbootのヘルプメッセージが出るだけで、実際には実行されません。
    なので、/f UEFIを抜いた形で入力する必要があります。

    これでうまくいったかと思いきや、bcdboot実行時にエラー0xc0000034なるものが発生してしまい、そのまま再起動をかけてみると、UEFIシステムパーティションは認識するものの、何らかのファイルが足りずに起動出来ないという事態に。
    このエラーコードを調べてみると、他のサイトでbootrecコマンドを使った修復方法が載っており、その中の、
    bootrec /rebuildbcd
    というコマンドで修復してみたら、ようやく起動出来るようになりました。

    bcdbootは、UEFIシステムパーティションに起動用のシステムファイルを書き込むコマンドですが、ここで書き込まれたファイルの種類を確認しておく必要があるようです。
    前述のエラーが出た時は、少なくともこのパーティション内に、
    \EFI\Boot\BOOTX64.EFI
    \EFI\Microsoft\Boot\BOOTMGFW.EFI(同じフォルダ内に各国の言語設定フォルダ)
    がある事は確認出来たのですが、一体何が足りないのかと半日位ずっと悩んでいました。
    そしてbootrec /rebuildbcdを実行した結果、
    \EFI\Microsoft\Boot\BCD
    が追加されており、これが足りなかったんだとようやく理解しました。

    他にハマった点として、Windows7のインストールディスクを起動する際、BIOSモードでなくUEFIモードで起動しなければならないようです(検証不足ですが)。
    再起動時に何度かBIOSモードで起動してしまったのですが、この時bcdbootコマンドを入力しても、「正常に終了しました」と表示されているにも関わらず、ファイルが全くコピーされていません(数秒で終わってしまいます)。
    UEFIモードだとファイルがコピーされる(1分位かかります)ようなので、この辺り間違えないように気を付けた方が良さそうです。
    ちなみに、うちのマシン(UEFI 2.0.0という、UEFI本格移行前の古いマザボです)では、起動メニューでインストールディスクをUEFIモードで起動するか、BIOSモードで起動するかを選択するのですが、現在のマザボ(UEFI 2.3.1以降)だと、UEFI設定でCSMを無効にする(UEFIモード)、CSMを有効にする(BIOS互換モード)かも知れないので、マニュアルを読んで確認してみて下さい。

    それと、Windows7インストールディスクを起動後に【コンピューターを修復する】を選択しようとすると、どういう条件で発生するのか不明ですが、
    『このバージョンのシステム回復オプションは、修復しようとしているWindowsのバージョンと互換性がありません。このバージョンのWindowsと互換性のある回復ディスクを使用してください。』
    というダイアログが出て、そこから先に進めないという事がありました。
    「もしかして、パーティションを壊してしまった影響で、インストールされたWindowsの種類と違うと判断されてしまったのか…?ここから先に進めなかったらもう終わりだ…!」と目の前が真っ暗になりかけたのですが、何度か再起動を繰り返すとコマンドプロンプトに入れるようになり、ホッと胸をなで下ろしました。

    その後、Windows10のメディア作成ツールの存在に気付き、「Windows7しかインストールされていないマシンでも使えるのか?」と思って試してみた所、コマンドプロンプトに入れるという所までは確認出来ました。
    Windows10がインストールされていないのに修復なんて無理ですし、またさっきのようなダイアログが出るのではと疑心暗鬼になっていたのですが、意外とあっさり動くようで。
    こっちのbcdbootにはちゃんと/fオプションがあるので、最初からこっちの方を使っていれば、こんなトラブルに巻き込まれずに済んでいたのかも知れません。