【Windows】MBRをUEFIに変換と、回復パーティションの作り直し

# 経緯
仮想OSがこんな環境だった。 
 
 - 第1世代で作成している。
 - vhd で作成している。
 - Windows 10 である。( Windows 7 からのアップグレード)

上記を、これにしたい。

 - 第2世代にする。
 - vhdx にする。
 - Windows 11 にする。

まぁつまり、Windows 10 ではなく、Windows 11 にしたいということ。

手順と、その都度食らった問題の解決を時系列で下記に説明しよう！

# 事前に注意すべきこと
主に仮想OSで起こりうることとして注意すべき点がある。
それは

<font color="#ff0000">Windows 7 からアップグレードしたWindows 10 を、この手順で操作できたとしてもライセンスが外れる</font>  

ということである。  

これは、手順的には仮想OSを作り直す必要がある。  
仮想OSを作り直すと、別なハードウェアである認識になる。  

Windows 10 への無償アップグレード期間は終了しているため、妥当な動作としてライセンスが外れてしまう。

また、Windows 10 自体も 2025年10月14日 にサポートが終了し、それ以降は Windows 11 への無償アップグレードも終了すると言われている。  
そのため、第1世代 で Windows 10 環境を用意していた場合、同じことが起こってしまう。  

よって、Windows 10 もしくは Windows 11 の正規ライセンスが別途必要となることは予め理解しておく必要がある。

# MBRからUEFI へ変換する
## 手順
 1. vhd ファイルを右クリックメニューでマウントする。
 2. コマンドプロンプト（管理者として実行）から下記を実行する。

    ```
    diskpart
    list disk
    ```

 3. マウントした vhd ファイルのディスク番号を覚えて、更に下記を実行する。  
     （2 の部分が、ディスク番号）

    ```
    select disk 2
    ```

 4.  Ctrl+C を押して DISKPART から離れる。

 5. 下記を実行する。（2 の部分が、ディスク番号）

    ```
    mbr2gpt /convert /disk 2 /allowFullOS
    ```


これでうまく変換できればOK。  
変換できなかったら、下記のサブセクションを見ると幸せになれる場合がある。

## Cannot find room for the EFI system partition って出た
これは、対象 vhd ファイルのシステムドライブ（Cドライブ）の空き容量が足りなくて、EFIシステムパーティションで必要とする容量が確保できないときに出るらしい。  

回避策としては、とにかくなんとかしてシステムドライブの空き容量を増やすしかない。  
どのくらいあればいいのかは分からなかった。  

仮想OSなので vhd のディスク容量を増やしたが、それもまた回復パーティションの後ろに未割当のディスク領域が確保されるため、回復パーティションをずらさないとシステムドライブの容量を増やすことができなかった。  
その手順は下記の通り。  
仮想OS、つまり、ディスク容量を変更したいOS上で全部行う。

  1. PC -> 管理 -> 記憶域 -> ディスクの管理 を開いて、回復パーティションに割り当てられているMBの容量を覚える。（画面は閉じない！）

  2. コマンドプロンプト（管理者として実行）から、最終的に回復パーティションを作り直すために、Windows RE を無効化する。（画面は閉じない！）

    ```
    ReAgentc.exe /disable
    ```

  3. 続けてコマンドプロンプトから、diskpart で回復パーティションを削除する。（画面は閉じない！）  
      select disk 0 の部分は list disk で出てきたシステムドライブを有しているディスク番号。  
      select partition 3 の部分は list partition で出てきた『回復』のパーティション番号。

    ```
    diskpart
    list disk
    select disk 0
    list partition
    select partition 3
    delete partition override
    ```

  4. PC -> 管理 -> 記憶域 -> ディスクの管理 から、システムドライブを選んでボリュームの拡張を行い、一旦すべての未割当領域をシステムドライブにしちゃう。（画面は閉じてOK！）

  5. またコマンドプロンプトから、下記を実行してシステムドライブの領域を縮小する。  （画面は閉じない！）  
      select partition 2 の部分は list partition で出てきた『プライマリ』（システムドライブ）のパーティション番号。  
      shrink minimum=940 の部分は、 1. で覚えたMBの容量。

    ```
    list partition
    select partition 2
    shrink minimum=940
    ```

  6. またコマンドプロンプトから、下記を実行して回復パーティションを作成する。

    ```
    create partition primary
    format quick fs=ntfs
    set id=27
    ```

  7.  Ctrl+C を押して DISKPART から離れる。

  8. 下記を実行して、Windows RE を有効化する。（画面は閉じてOK！）

    ```
    ReAgentc.exe /enable
    ```

  ここまでやったら、仮想OSをシャットダウンして、再度最初の手順をチャレンジしてみる。

# vhd を vhdx に変換する
## 手順
  1. Hyper-V から 操作 -> ディスクの編集 を選ぶ。
  2. 変換したい vhd ファイルを選択する。
  3. 『変換』 を選択する。
  4. 『VHDX』を選択する。

これでＯＫ！

# 仮想OSを作り直す
Hyper-V から新しい仮想マシンを追加する。  
<span style="color: #ff0000">第2世代</span>で作り、以前と同じ設定をする。  
設定のセキュリティにある『<font color="#ff0000">セキュアブートを有効にする</font>』および『<font color="#ff0000">トラステッドプラットフォームモジュールを有効にする</font>』にチェックを入れる。  

ディスクには、先で変換した vhdx ファイルを指定して、ブート順序を一番上にする。  

個人的にはチェックポイントは無効にしている。


# 余談
Windows 11 の仮想OSを、別なホストに移そうとすると、エクスポート／インポートだけではTPMの関係上でうまく移行できなかった。  
下記ページの手順に倣って、証明書の移行も行ったら正しく起動することができた。  

https://www.fermata.mydns.jp/index.php/2023/10/25/dev-20220212/


# 余談2
この、めんどくさいMBR->UEFI 変換操作とトラブル回避を悩むくらいなら、下記ソフトウェアを購入すると楽にできる。  

https://jp.easeus.com/partition-manager-software/professional.html

今回は自力でやったけど、どうせ覚えてられないし、念のためにも近々買おうかなと思っとる。