プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

Windows 10 を 11 にアップグレードする際に EFI パーティションが邪魔になった話

仮想マシンの Windows 10 -> 11 の一連の記事になります。

こちらの記事で、 VirtualBox 上の仮想マシンを Windows 10 から 11 へのアップグレードする話をまとめました。

で、同じことを別の仮想マシン(こちらの記事で VMDK から VDI に変換していたやつ)についても、アップグレードをやってみると、あら不思議、 GPT ディスクに変更したタイミングで、 C ドライブがあるパーティションの後ろに EFI パーティションが作られていました。

何じゃこりゃ?

最初に Windows 11 へのアップグレードを試したやつ(こちらの記事参照)を確認すると、EFIパーティションが先頭に作られていました。

何が違うんだろうか?まあ、詳しい理由は不明ですが、 C ドライブのパーティションの後ろに、EFI パーティションが作られることがあるようですね。

でも、このままだとシステムパーティションが拡張できないので、いまのままだと容量不足で Windows 11 へのアップグレードができません。

ということで、 EFI パーティションを移動させて、 C ドライブを拡張したので、その顛末をメモっておきます。

EFI パーティションの移動

ネットを調べてみると、同じようなことに困っている人がたくさんいるようで、いろいろな記事を見つけることができました。中でも、わかりやすかったので、下記の記事を元に作業を行いました。

Moving EFI partition before C:

おおまかにいうと、 EFI パーティションを移動させるのではなく、新しい EFI パーティションを前方に作って、その後古い EFI パーティションを削除するという方法になります。

(参考)

なお、EFI パーティションの移動に関する記事は他にもいろいろありました。

ご自分のわかりやすいものを参考にしてください。

準備

まず、準備として GParted Live というツールを入手しておきます。名前に聞き覚えがあるなと思ったら、昔 Linux インストールするときとかにお世話になったやつですね。

GParted -- Live CD/USB/PXE/HD

とりあえず、 iso イメージをダウンロードしておきます。

次に、今回見つけた記事に注記として書いてあるように、今の EFI パーティションの後方にある空き領域にダミーのボリュームを作成しておきます。

とりあえず、これで準備完了です。

パーティションの操作

仮想マシンの Windows 10 を起動します。コマンドプロンプトを管理者権限で開いて、 diskpart コマンドで操作していきます。

まずは、 C ドライブの直後に空き領域を作ります。

DISKPART> select disk 0

ディスク 0 が選択されました。

DISKPART> list partition

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
  Partition 1    プライマリ               59 GB  1024 KB
  Partition 2    システム               100 MB    59 GB
  Partition 3    回復                 563 MB    59 GB
  Partition 4    プライマリ               20 GB    59 GB

DISKPART> select partition 1

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

DISKPART> shrink desired=100

ボリュームは、次の方法で正常に縮小されました:  100 MB

DISKPART>

今回の場合は、パーティション1というのがCドライブがあるパーティションになります。操作結果はこんな感じになります。

一度、シャットダウンして、次は GParted での操作になります。

GParted を起動

仮想マシンの CD ドライブとして、先ほどダウンロードした GParted Live の iso ファイルを割り当てます。

これで、起動してくれればいいんですが、 EFI の Windows の場合、VirtualBox のブート順が無視されるそうです。

How to Boot from ISO on VirtualBox EFI machine. - WinTips.org

このため、 CD にセットした iso イメージを立ち上げるためには、仮想マシンを立ち上げたら、 ECS キーを連打します。

うまくいくと、上のような画面が表示されるので、 Boot Manager を選択します。すると、下記のような、どのメディアから起動するかの選択画面が表示されるので、

VirtualBox の CD を選択します。すると、 GParted Live の起動メニューが表示されます。

特に問題なければ、一番上のデフォルト設定の GParted を起動します。

起動時にキーマップ、言語、 UI などを聞かれますが、言語以外はデフォルトにして、言語は日本語を選択して起動します。無事に起動すると下記のような画面が表示されます。

Cドライブのあるパーティションの移動

さきほど、 C ドライブの後ろに空き領域を作ったので、 GParted で Cドライブがあるパーティションを後ろに移動させて、前方に空き領域を作ります。

C ドライブのあるパーティション( /dev/sda1)を選択して、『リサイズ/移動』をクリックすると

のような画面が表示されます。

  • 前方の空き容量が 0 MB
  • 後方の空き容量が 101MB

となっているので、これを入れ替えるようにします。

『リサイズ/移動』ボタンを押してのち、実行をすると、

のような警告がでますが、そのまま続けます。最終的に、

のような形になれば終わりです。

GParted を終了し、CD の iso ファイル設定を解除後、再度 Windows を起動します。Windows 上でパーティションをみると

こんな感じなってました。

新しい EFI パーティションの作成

Windows が起動したら、再度コマンドプロンプトを管理者権限で立ち上げて、 diskpart で操作を行います。

DISKPART> select disk 0

ディスク 0 が選択されました。

DISKPART> list partition

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
  Partition 1    プライマリ               59 GB   102 MB
  Partition 2    システム               100 MB    59 GB
  Partition 3    回復                 563 MB    59 GB
  Partition 4    プライマリ               20 GB    59 GB

DISKPART> create partition efi

DiskPart は指定したパーティションの作成に成功しました。

DISKPART> list partition

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
* Partition 5    システム               101 MB  1024 KB
  Partition 1    プライマリ               59 GB   102 MB
  Partition 2    システム               100 MB    59 GB
  Partition 3    回復                 563 MB    59 GB
  Partition 4    プライマリ               20 GB    59 GB

DISKPART>

パーティションを作成する際に、容量を指定しない場合は最大のサイズで作成してくれるとのことです。次に、作成した EFI パーティションをフォーマットしておきます。

DISKPART> list partition

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
* Partition 5    システム               101 MB  1024 KB
  Partition 1    プライマリ               59 GB   102 MB
  Partition 2    システム               100 MB    59 GB
  Partition 3    回復                 563 MB    59 GB
  Partition 4    プライマリ               20 GB    59 GB

DISKPART> format quick fs=fat32

  100% 完了しました

DiskPart は、ボリュームのフォーマットを完了しました。

DISKPART> assign letter=x

DiskPart はドライブ文字またはマウント ポイントを正常に割り当てました。

DISKPART>

ここで EFI パーティションにドライブレター(上記では x: )を割り当てておきます。Windows で見ても EFI パーティションとして認識されてますね。

diskpart を終了し、最後に EFI パーティションに起動関連のファイルを作成します。

C:\WINDOWS\system32>bcdboot C:\Windows /s x:
ブート ファイルは正常に作成されました。

C:\WINDOWS\system32>

ここまでで、 EFI パーティションの作成は完了です。一度シャットダウンして、問題なく起動できることを確認します。

パーティションを整理

問題なく Windows が起動できれば、最後に古い EFI パーティションや不要なパーティションを削除しておきます。また、 C ドライブの容量も増やして、 Windows 11 のインストール要件を満たすようにします。

ここでも、コマンドプロンプトから diskpart を呼び出して実行します。

DISKPART> select disk 0

ディスク 0 が選択されました。

DISKPART> list partition

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
  Partition 1    システム               101 MB  1024 KB
  Partition 2    プライマリ               59 GB   102 MB
  Partition 3    システム               100 MB    59 GB
  Partition 4    回復                 563 MB    59 GB
  Partition 5    プライマリ               20 GB    59 GB

DISKPART> select partition 3

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

DISKPART> delete partition override

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

DISKPART> list partition

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
  Partition 1    システム               101 MB  1024 KB
  Partition 2    プライマリ               59 GB   102 MB
  Partition 4    回復                 563 MB    59 GB
  Partition 5    プライマリ               20 GB    59 GB

DISKPART> select partition 4

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

DISKPART> delete partition override

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

DISKPART> list partition

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
  Partition 1    システム               101 MB  1024 KB
  Partition 2    プライマリ               59 GB   102 MB
  Partition 5    プライマリ               20 GB    59 GB

DISKPART> select partition 5

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

DISKPART> delete partition

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

DISKPART> list partition

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
  Partition 1    システム               101 MB  1024 KB
  Partition 2    プライマリ               59 GB   102 MB

DISKPART> 

上記の操作は、

  • パーティション3は、古いEFIパーティション
  • パーティション4は、回復パーティション
  • パーティション5は、ダミーのパーティション

なので、これらをすべて削除するというものです(回復パーティションはこのあと Windows 11 をインストールする際に、 C ドライブの拡張が簡単にできるように消してしまいました)。

最後に C ドライブを拡張しておきます。

DISKPART> list partition

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
  Partition 1    システム               101 MB  1024 KB
* Partition 2    プライマリ               59 GB   102 MB

DISKPART> select partition 2

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

DISKPART> extend

DiskPart はボリュームを正常に拡張しました。

DISKPART>

こんな感じになりました。

まとめ

ここまで操作ができると、この仮想マシンの場合は、Windows11 が OK となりました。

あとは、前回の記事の通り、 Windows 11 をインストールしてやればOKです。なお、インストールの時、再起動がうまくいかないなど若干不安な点もありましたが、無事に立ち上がるようになりました。