TPMを導入し、MBR2GPTを実行し、Windows10の仮想マシンをWindows11にするまでに行ったこと [Proxmox]
Proxmoxを導入して、TPMを追加しさえすれば、Windows11になると思っていました。
実際にはBIOSからUEFIに変更するために、MBR2GPTを実行する必要がありました。
その過程で、Cannot find room for the EFI system partition. や、Cannot find OS partition(s) for disk 0 などのエラーに遭遇し、2日程悩む期間が発生したので必要となった対象方法をまとめたいと思います。
Windowsの仮想マシンにTPMを追加する
これはとても簡単でした。ゲストVMの「ハードウェア」に「TPMの状態」を取り付けるだけでした。

TPMの追加
TPMを追加してもWindows11に対応していないと言われる
正直これは予想外でした。TPMだけが問題なのだと思っていました。
TPMを追加してもNGな理由としては、「UEFIが有効でない」とのことでした。心当たりあります。前回設定したハードウェアの中に、確かにあったんですよね「BIOS」の項目。
BIOSを、SeaBIOSからOVMF(UEFI)にしても起動ドライブがないと怒られるだけだったんでスルーしていたのですが、そうか必要かぁ・・・
ここ10年くらい自作でPCを構築していなかったとはいえ、10年ほど前はギリギリUEFIがでてきていました。
あまり意識していませんでしたが、今の仮想マシンはBIOSベースで構築していた模様で、それをそのまま移行してきた訳なので、起動ディスクであるマスター・ブート・レコード(MBR)をGUID パーティション テーブル(GPT)に変換しないといけない訳です。
なんだかんだでこのWindowsの仮想マシン、
- IntelのMacbookにBootcampでWindows7をインストール
- P2VでESXiに移設
- Windows7からWindows10に移設
- ESXiからOVF形式でProxmoxに移設
- Windows10からWindows11に移設
というなかなかの変遷だったはずです。何年使っているんだろう。ハードが交換されて続けているとはいえ、よく動いているな・・。
これが原因か、BIOSからUEFIに変換するためのツールである MBR2GPT の実行になかなかに難儀しましました。
Windowsの起動をBIOSからUEFIに変更する
まずは「Windows BIOS UEFI 変更」とかで適当に検索して調べました。
「ディスクユーティリティ」から、システム起動ディスクがどこのドライブに入っているかを確認します。
コマンドプロンプトを実行し
|
|
こちらでWindows(通常Cドライブ)ディスクがどこにあるかを確認します。
自分の構成では、Cドライブしかないのでディスクは1つでした。
そのため、ディスクは0を選択し、mbr2gpt
コマンドを利用してまずはUEFIへの変換ができるかのチェック(validate
)をします。
オプションのallowfullos
は自作PCなどの場合に必須のようです。
|
|
バリデーションはOKでした。
確認が取れ、validateが通ったら、
|
|
mbr2gpt /convert /disk:0 /allowfullow
を実行して変換は終了ですが・・・失敗しました。
エラーの内容は、**Cannot find room for the EFI system partition.**です。
なんでや、バリデーションチェック通ったやんけ!
原因は回復ディスクとMBRが同一のディスクに存在するから?
再度ググっていると、回復パーティションとMBRが同一のディスクに存在するとき、かつ、なんらかの要因で回復パーティションがパーティション上、システムドライブの後ろにある場合に発生する、といった情報を見つけました。
パーティションサイズは拡大縮小が可能ですが、回復パーティションが間にあるとできない時があるようです。
また、Windowsを新規にインストールした場合、
システム > 回復 > OS
といった形のパーティション構成になるようですが、私の場合
システム&OS > 回復
という構成になっているようでした。
試しに一度、回復パーティションを別ディスクに移動させ、戻してみる。
どうせ仮想マシンなのだしと、バックアップをとった上で、回復パーティションを削除し、現在のOSディスクを拡張した上で、回復パーティションを再度復旧させてみることにしました。
【Windows】回復パーティションを移動する方法を参考に、まずは回復パーティションの内容を別のディスクにバックアップします
まずは一度電源を切って、仮想マシンにハードディスクを追加します。
TPMと同じように、「追加」からハードディスクを追加し、電源を入れます。
電源を入れたら、「PC」>「管理」>「ディスクの管理」から新規のディスクに対して、ドライブ文字を設定します。今回は、「D」にしました。
また、16GBのUSBディスクを装着してこちらには別途回復ドライブを作成しておくことにします。
コマンドプロンプトを管理者モードで立ち上げ、diskpart
を起動します。
回復パーティションを調べます。回復パーティションはシステムディスクと同じディスクにあったとしましょう。
以下のようになります。
|
|

diskpartでディスクとパーティション状況を確認
新規に追加したハードディスクをEドライブとしてマウントしたとしましょう。
その場合、まずは先ほどの回復パーティションの中身をDからEにコピーした上、Dドライブの中身を消します。
その後、Cドライブを(ディスクの残り容量を2GBほど残して)拡張した後、残りの2GBに回復パーティションを戻します。
もしかしたら、ここで戻す必要はなかったかもしれません。(その時は思いつきませんでした。)
回復パーティションの中身をコピーするためのディレクトリを作る。
回復パーティションには不可視フォルダRecovery\WindowsRE
があるようです。
以下を実行することでDドライブにマウントした回復パーティションの中身を確認することができます。
|
|
全てのファイルをコピーしても良いのですが、全てはRecovery\WindowsRE
にまとまっているため、このディレクトリの中身をコピーすることにします。
まずは、コピー先のEドライブに同じディレクトリを作ります
|
|
回復パーティションの中身のコピー
xcopyというコマンドを利用してコピーします。隠しファイルも全てコピーするための/h
オプションもつけます
|
|
古い回復パーティションを削除する
回復パーティションはシステム的なセーフガードがかかっているのか、一度解除をしないといけないそうです。
解除をするために以下を実行します
|
|
解除後、delete partition override
を利用して古い回復パーティションを削除します。
ここで誤った場合、別のパーティションを消しかねないため、注意します。 以下は、ディスク0のパーティション2を削除する場合の方法です。
|
|
Cドライブを拡張し、パーティションを整理し再度、同じディスクに回復パーティションを持ってくる
ここで一旦Cドライブのハードディスクを拡張しました。
前述の通り、回復パーティションがあるとディスクが縮小できても拡張ができませんでしたが、回復パーティションがなくなったことで拡張できるようになっています。 (正確には同じディスクの中で「拡張したい」パーティションの後ろに別パーティションが存在しないため)
拡張時に、回復パーティションの再移設用のディスクとして2GBほど残しました。 これをFドライブとして再度マウントしておきます。
先ほど同様、xcopyを利用してEドライブの回復パーティションのバックアップからFドライブに回復パーティションを持ってきます。
|
|
Fドライブを再度回復パーティションとして設定
戻ってきたFドライブを回復パーティションとして設定します。
|
|
マウント時に設定したE,Fのドライブレターを削除する
diskpartで当該のパーティションを選択してremove
します
|
|
これでEやFでのマウントが外れるはずです。
回復パーティション用のIDを設定する
ここで少し詰まりました、多くのサイトではset id=de94bba4-06d1-4d40-a16a-bfd50179d6ac
を設定しているようですが、そんなIDはない、とエラーが戻ります。
そもそもset id=de94bba4-06d1-4d40-a16a-bfd50179d6ac
とはなんなのでしょうか。
答えはMSのサイトのRecovery tools partitionの章にありました。
回復パーティションのIDのようですが、そもそもこのページは、「UEFI/GPT-based hard drive partitions」です。
つまり、de94bba4-06d1-4d40-a16a-bfd50179d6acは、UFFIモードの時の回復パーティションのIDなのです
この先、UEFI/GPTに変更したいのであってまだこの時点では、BIOS/MBRの状態です。
MSのサイトの左側のツリーからBIOS(MBR)の項目を探し、回復パーティションに関する記載がないかを確かめます。
ありますね。set id=27
だそうです
先ほどまでFとしてマウントしていた、ディスク0のパーティション2をdiskpartで選択してset id=27
をします
|
|
これで回復パーティションとして認識されたはずです。
再度、MBR2GPTを試みるも、「Cannot find OS partition(s) for disk 0」がでてしまう。
さて、これでMBR2GPTで変換ができる・・・と思っていました。
試しにバリデーションチェックをしてみます。
|
|
結果として「Cannot find OS partition(s) for disk 0」が発生してしまいました。
さて、再度検索です。幸いこちらも同じような事例が見つかりました。
特に上記でも紹介されている