回復パーティションが邪魔をしてディスクサイズを拡張できない問題を diskpart を使用して解決する

ページ更新日 :
ページ作成日 :

環境

Windows
  • Windows 10 20H2 64bit

※ 他のバージョンでも動作しますが未確認です。

注意点

  • 本 Tips の操作は手順を間違えるとデータ破壊を起こします。不安であれば「事前にバックアップを取る」「専用のツールを使う」「専門の人に頼む」などして対応してください。
  • 本 Tips の現象は PC の環境や Windows のバージョンによっては発生しない場合があります。
  • Windows の Pro エディション以上、ローカル PC の管理者権限が必要です。
  • これらの操作において何らかの障害が発生した場合でも責任は負えませんのでご注意ください。
  • 環境によっては手順を正しく操作してもうまくいかない場合があります。

現象

本 Tips は Hyper-V の仮想マシンに Windows 10 20H2 をインストールしたものです。

ディスクサイズは図のように 127GB としています。

Windows のインストール時にディスク構成を以下のように作成しています。 ちなみにこれは新規で割り当てた直後の状態であり、それ以外は特に変更していません。

Windows インストール後、ディスクの管理を開くと C ドライブの右側に回復パーティションがあります。

ここで仮想マシンのディスクを拡張します。

ディスクの未割り当てが追加され C ドライブを拡張しようとしましたが、間に回復パーティションがあり拡張できません。

現在の回復パーティションが正常に動作しているかの確認方法

回復パーティションを明示的に削除していなければ通常は機能しているので確認する必要はないのですが、確認したい場合は以下の手順で確認できます。

コマンドで確認する方法もありますが、GUI の方が安全ですのでここでは GUI で確認します。 Windows の再起動前提ですので、全てのアプリケーションを終了しておいてください。

スタートメニューから「設定」を開きます。

「更新とセキュリティ」を選択します。

「回復」を選択します。

「PC の起動をカスタマイズする」にある「今すぐ再起動」ボタンをクリックします。 確認メッセージなどは出ませんので注意してください。

ちなみにこのボタンがない場合は、PowerShell を管理者コマンドで起動し、以下のコマンドを実行した後に Windows を再起動してください。(環境状態によってこのボタンがあったり無かったりします)

reagentc /boottore

Windows 再起動後以下の画面が表示されると思います。ここで「トラブルシューティング」を選択します。

「この PC を初期状態に戻す」のメニューが表示されていれば、回復環境が有効になっています。

回復環境が有効でない場合はそのまま「詳細オプション」が表示されます。 ちなみにこれらのメニューは Windows のバージョンや使用している PC によって変わる場合があります。 回復に関連したそれらしいメニューがあれば回復が有効になっていると思ってください。

通常の Windows の起動に戻る場合は、左上の「←」ボタンを押して最初の画面に戻り「続行」メニューを選択してください。

対応

これらの操作を行う場合は、入念に入力確認を行って下さい。 また、「2つの PowerShell のウィンドウ」を行き来しているので注意してください。 シェルコマンドの前に [DISKPART] とついているものは DISKPART を使用中のウィンドウでの操作です。

確認

この項目の操作はほとんど確認の処理なので、入力ミスがなければシステムを壊すことはありません。

スタートメニューを右クリックして「Windows PowerShell (管理者)」を選択します。

以下のコマンドを入力すると回復環境の状態を表示できます。

reagentc /info

今回ディスクのメインの操作を行うのがこの「DiskPart」となります。以下のコマンドを入力すると DiskPart が起動します。 DiskPart 自体はコマンドラインのツールです。

diskpart

以下のコマンドを入力するとディスクの一覧が表示されます。この一覧は「ディスクの管理」ウィンドウで表示される一覧と同じものです。 ドライブの種類とは異なりますので注意してください。 本 Tips では仮想マシンにディスクをひとつしか付けていないのでひとつだけ表示されています。

[DISKPART]

list disk

操作対象のディスクを選択します。ディスク一覧の「ディスク 0」の部分が番号です。 使用している PC によってディスクの数などが違いますので、回復パーティションのあるディスクを選択してください。

[DISKPART]

select disk [ディスク番号]

select disk 0

以下のコマンドを入力すると、選択しているディスクのパーティションの一覧が表示されます。 ここに回復のパーティションがあることを確認できます。

[DISKPART]

list partition

上記の図では番号が「4」となっていますので、以下のコマンドで回復パーティションを選択します。

[DISKPART]

select partition [回復パーティション番号]

select partition 4

以下のコマンドを入力すると、選択しているパーティションの情報が表示されます。

[DISKPART]

detail partition

移動準備

この項目の操作はバックアップ関連なので入力ミスがなければシステムを壊すことはありませんがシステムディスクを操作します。

ちなみに回復環境を削除だけしたいのであれば、この項目の作業は必要ありません。

ここの操作では PowerShell の DISKPART の画面ですでに回復パーティションを選択しているものとします。

まず、回復パーティションにドライブレターをつけてファイルとしてアクセスできるようにします。 例では「Zドライブ」として割り当てていますが、空いていない場合は他のドライブを指定してください。 今後の操作もそのドライブレターを使います。

[DISKPART]

assign letter [空いているドライブレター]

assign letter z

エクスプローラーでも見えるようになります。ただし、中のファイルは隠しファイルになっているため見えません。

DiskPart 実行中の PowerShell はそのままにしつつ、もう一つ管理者権限で PowerShell を起動します。

Z ドライブに移動します。

z:

隠しフォルダになっていてエクスプローラーでは見えませんが、フォルダはあるので以下の場所に移動します。

cd Recovery\WindowsRE

以下のコマンドを入力すると中のファイルが表示されます。 以下のコマンドは PowerShell 専用のコマンドですので、コマンドプロンプトを使用している場合は別のコマンドで表示させてください。

Get-ChildItem -force

回復パーティションにあるファイルをいったん C ドライブにコピーするためにバックアップ用のフォルダを作成します。

mkdir C:\Backup\WindowsRE

以下の場所にファイルがあるのでバックアップフォルダにファイルをコピーします。

xcopy /h Z:\Recovery\WindowsRE C:\Backup\WindowsRE

元が隠しファイルなのでコピーしてもエクスプローラーからは見えません。

一応以下のコマンドを入力すればファイルがあることは確認できます。

Get-ChildItem C:\Backup\WindowsRE -force

ファイルをコピーしたので DiskPart の PowerShell に戻りドライブレターを削除します。

[DISKPART]

remove letter [先ほど設定したドライブレター]

remove letter z

ドライブが消えたことを確認できます。

ディスク移動操作

ここからは実際にディスクを操作しますので、間違えずに入力してください。

diskpart でない方の PowerShell から以下のコマンドを実行して回復環境を停止します。

reagentc /disable

diskpart の方の PowerShell から 回復パーティションを選択している状態 で以下のコマンドを実行します。 この操作は瞬時にパーティションが削除されますので、誤って C ドライブなどを選択している状態で実行するとデータが吹き飛びます。

[DISKPART]

delete partition override

ディスクの管理画面を開くと回復パーティションが消えていることが確認できます。 これにより C ドライブが拡張できるようになります。

後は必要なサイズだけ C ドライブを拡張します。 もし回復環境が不要なのであれば、残りのディスクはすべて埋めてもらって構いません。ディスクを拡張して終わりとなります。

回復環境を再度作成する場合は 1GB 程度残しておいてください。

1GB 程度残して拡張した後の状態です。

ここでいったん Windows を再起動します (しなくても問題ない場合もあります)。再起動しないと先ほど使用したドライブレターが使えないためです。(代わりに他のドライブレターで代用してもいいですが)

再起動したら再度ディスクの管理を開きます。

続いて回復パーティション用のボリュームを作成します。 一応コマンドでも作成できますが、ディスクのサイズの手計算が面倒なので、作成は GUI で行い GUI でできないものをコマンドで行います。

残りのサイズを割り当てます。

ファイルを戻す作業があるので Z ドライブを指定します。

見た目をもとに戻したい場合は「ボリューム ラベル」を削除します。

作成後の状態です。この時点では普通のファイルボリュームです。

エクスプローラーでも見えます。

ここでバックアップした回復環境のファイルを戻します。PowerShell を管理者権限で起動します。

Z ドライブにフォルダを作成します。エクスプローラーでも見える状態ですが問題はありません。

mkdir Z:\Recovery\WindowsRE

ファイルを戻します。

xcopy /h C:\Backup\WindowsRE Z:\Recovery\WindowsRE

以下のコマンドでファイルが戻ったことを確認します。

Get-ChildItem Z:\Recovery\WindowsRE -force

再び別な PowerShell を管理者権限で開き DiskPart を起動します。

diskpart

回復パーティションに戻す番号を調べてパーティションを選択します。

[DISKPART]

list disk
select disk 0
list partition
select partition 4

以下の2つのコマンドで回復パーティションであることを示す属性をセットします。

[DISKPART]

set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"

[DISKPART]

gpt attributes=0x8000000000000001

DiskPart でない PowerShell に戻り、以下のコマンドを入力して回復環境に必要なファイルを展開します。(/target C:\Windows はなくても問題ないです。)

reagentc /setreimage /path Z:\Recovery\WindowsRE /target C:\Windows

回復環境を有効にします。

reagentc /enable

回復環境が有効になったか確認します。状態が Enabled になっていればとりあえずは OK です。

reagentc /info

DiskPart 側 でドライブレターを削除します。

[DISKPART]

remove letter z

ちなみに Windows を再起動した後にドライブが復活するようであれば DiskPart で以下のコマンドを入力して削除してください。 再起動後にドライブが復活する状態だと、ドライブを再度削除した後に回復環境が disabled になってしまう場合があります。 可能な限り Windows を再起動した後にドライブが復活しないようにしてください。

[DISKPART]

list volume
select volume z
remove letter=z

どうしてもドライブが復活する場合は以下のサイトを参考にレジストリを削除します。

これで完了です。

最終確認

最後にいくつか確認して終わりにします。DiskPart がまだ使用中ならパーティションの一覧を確認します。

[DISKPART]

list partition

ディスクの管理を確認します。

コマンドでも確認します。状態が Enabled になっていれば OK です。

reagentc /info

手間でなければ起動時のオプションも確認します。

reagentc /boottore

コピーしたバックアップ用の回復ファイルは削除します。

Remove-Item C:\Backup -Recurse -Force

参考