DiskPartのlist vdiskに削除済みVHD/VHDXが残る原因と消し方(再起動で履歴クリア)

DiskPart の list vdisk に、削除したはずの VHD/VHDX が残り続けて数千件になることがあります。原因は「切り離し」と「削除」の違いと、OS セッション内の記録にあります。再起動での解消や運用のコツをまとめます。

目次

起きている現象:detach vdisk しても list vdisk が増え続ける

DiskPart(ディスクパート)で差分ディスク(differencing disk)などの VHD/VHDX を大量に作成し、接続しては削除する運用をしていると、次のような状態に遭遇することがあります。

  • DiskPart で detach vdisk を実行すると、ディスクの管理(diskmgmt.msc)からは消える
  • 実体の VHD/VHDX ファイルも削除した
  • しかし DiskPart の list vdisk には、過去に接続した仮想ディスクが延々と残り続け、数千件に増える

この挙動は「ファイルが残っている」こととイコールではありません。見えているのは“いま接続中のディスク一覧”というより、OS の稼働セッション中に作られた仮想ディスク管理の痕跡が、DiskPart 側の一覧に残っているように見える状態です。

よくある表示例(イメージ)

DISKPART> list vdisk

VDisk ###  Disk ###  State      Type         File

---

VDisk 0    Disk 3    Detached   Expandable   C:\temp\test001.vhdx
VDisk 1    Disk 4    Detached   Differencing C:\temp\diff002.vhdx
...(削除済みのはずのパスが大量に続く)...

まず押さえる:detach vdisk は「切り離し」であって「削除」ではない

混乱の起点になりやすいのが、DiskPart の detach vdisk がやっていることです。これはあくまで “OS から仮想ディスクを切り離す(アンマウントする)” 操作であり、VHD/VHDX ファイル自体を削除する操作ではありません。

操作対象主な効果補足
detach vdisk仮想ディスクの接続状態OS から切り離す(見えなくする)ファイルは残る。削除は別途必要
Explorer で削除 / Remove-ItemVHD/VHDX ファイル物理ファイルを削除接続中だと失敗することが多い
Dismount-VHD(Hyper-V)仮想ディスクの接続状態PowerShell で切り離すHyper-V モジュールが必要な環境がある
Dismount-DiskImage(Storage)ディスクイメージISO/VHD などを切り離すWindows 標準の Storage 系 cmdlet
Remove-VirtualDiskStorage Spaces の仮想ディスク記憶域スペースの構成を削除VHD/VHDX の“マウント履歴”とは別物

つまり、運用としては次の順番が基本です。

  1. (必要なら)detach vdisk で切り離す
  2. VHD/VHDX ファイルを削除する(Explorer / PowerShell)

結論:list vdisk に残る“過去の接続”は、再起動でクリアされることが多い

質問の本丸である「ファイルは消えているのに list vdisk に残る」現象は、環境によって差はあるものの、再起動で一掃されるケースが非常に多いです。これは、一覧が永続ストレージに記録されているというより、OS の稼働セッション(起動してから再起動するまで)で保持される管理情報が表示されている挙動と整合します。

そのため、確実に一覧をきれいにしたい場合は、最も確実な解決策は OS の再起動です。大量に溜まってしまった場合でも、再起動後に list vdisk が正常な件数に戻るなら、実体ファイルの残骸が増え続けているわけではありません。

この情報はどこに保存されているのか

「どこかのフォルダやレジストリに履歴が溜まっているのでは?」と疑いたくなりますが、再起動で消える挙動から考えると、少なくとも “ユーザーが掃除できるファイルとして永続保存されている” 可能性は高くありません。

より実務的には、次のように整理しておくのが安全です。

  • VHD/VHDX の実体:ファイルシステム上の .vhd / .vhdx(ここは自分で削除できる)
  • 接続状態:OS が「この VHD/VHDX を仮想ディスクとして扱っている」状態(切り離しで消える)
  • list vdisk の残り:OS セッション中の管理情報が DiskPart の列挙対象として残っているように見える(再起動で消えることが多い)

なお、Windows にはドライブレターの割り当てなどを保持する仕組みがあり、これらはレジストリ(例:HKLM\SYSTEM\MountedDevices)に残ります。ただし、これは「どのボリュームにどのドライブレターを割り当てるか」という話で、今回の list vdisk の“過去接続の大量残り”を掃除する目的で触るべき場所ではありません。レジストリ編集は影響範囲が大きく、問題の切り分けを難しくします。

完全に消して list vdisk に出ないようにする手順

実務で困るのは「本当に削除できているのか」「一覧の残りは害があるのか」という不安です。ここでは “実体が消えている” ことを確実にし、必要なら一覧もリセットするまでの流れを、チェックポイント付きでまとめます。

手順:いま接続されていないことを確認する

まずは「まだどこかでマウント中」という事故を潰します。DiskPart でも PowerShell でも構いません。

DiskPart で確認

diskpart
list vdisk
select vdisk file="C:\path\to\target.vhdx"
detail vdisk
detach vdisk

detail vdisk で状態が Attached のままなら、まず切り離しが先です。切り離しに失敗する場合は、どこかのプロセスが VHD/VHDX を掴んでいる可能性があります(後述)。

PowerShell で確認(Storage モジュール)

# 接続状態の確認(VHD/VHDX でも使える)
Get-DiskImage -ImagePath "C:\path\to\target.vhdx" | Format-List *

# 切り離し

Dismount-DiskImage -ImagePath "C:\path\to\target.vhdx"

Hyper-V 管理用のモジュールが入っている環境なら、次の cmdlet も使えます。

# Hyper-V モジュールがある場合
Dismount-VHD -Path "C:\path\to\target.vhdx"

手順:VHD/VHDX の物理ファイルを削除する

切り離しができたら、実体ファイルを削除します。大量に作っては消す運用の場合、Explorer の手作業はミスが起きやすいので、PowerShell でログを残しながら消すのがおすすめです。

# 存在確認
Test-Path "C:\temp\target.vhdx"

# 削除(必要なら -Force)
Remove-Item "C:\temp\target.vhdx" -Force

差分ディスク(differencing disk)を扱っている場合は、親ディスク(ベース)を誤って消さないことが重要です。差分ディスクは親の内容を参照して成立しているため、親を消すと差分側が壊れたり、検証の再現性が崩れます。

手順:それでも list vdisk に残るなら再起動する

ファイルを削除し、接続も解除できているのに list vdisk にだけ残る――このパターンは、表示が “履歴のように残っている” だけの可能性が高いです。ここで一覧を完全に初期化したいなら、再起動が最短かつ確実です。

状態やるべきこと目的
ディスクの管理に見えている切り離し(DiskPart / PowerShell)接続中の解消
ファイルが残っているファイル削除(Explorer / Remove-Item)ストレージ消費の解消
どちらも消えたが list vdisk にだけ残る再起動セッション内の残り表示をリセット

Remove-VirtualDisk が効かない理由:Storage Spaces と VHD/VHDX は別物

PowerShell で「仮想ディスクを削除」と聞くと Remove-VirtualDisk を試したくなりますが、これは主に Storage Spaces(記憶域スペース)の “仮想ディスク” を消すためのコマンドです。VHD/VHDX の「マウント履歴」や DiskPart の一覧を掃除したい意図とは噛み合わないことが多いです。

用語何を指すか代表的な操作
VHD/VHDXファイルとして存在する仮想ハードディスクDiskPart / Mount-DiskImage / Mount-VHD
Storage Spaces の Virtual Disk物理ディスク群から論理的に切り出した領域Get-VirtualDisk / Remove-VirtualDisk

パフォーマンスへの影響はどの程度?

一番気になるのが「数千件に増えたら OS が重くなるのでは?」という点です。結論から言うと、多くのケースで、影響が出やすいのは管理系コマンドの操作感です。

  • 影響が出やすい:diskpart の list vdisk 実行が遅い、Disk 管理系ツールの列挙がもたつく、ログ収集が重い
  • 影響が出にくい:通常のファイル I/O、仮想マシンの稼働、ネットワークなど、日常の処理性能全般

理由は単純で、残っているのが「実体ディスクとして常に処理しているもの」ではなく、主に “列挙されるリスト” 側の問題だからです。もちろん、環境・バージョン・同時に動かしているソフトウェアによっては例外もありますが、少なくとも「表示が残っている=ストレージを食っている」という誤解は避けられます。

不安を減らすための確認ポイント

「影響がない」と言われても不安な場合は、次の観点で切り分けると納得しやすいです。

確認したいこと見方安心できる状態
本当に接続されていないかディスクの管理 / Get-DiskImage対象 VHD/VHDX が表示されない、Attached ではない
実体ファイルが消えているかTest-Path / エクスプローラーファイルが存在しない
“一覧だけ”の問題か再起動後の list vdisk再起動で件数が減る/消える

再起動できない場合の現実的な対策

本番サーバーや稼働中の検証環境など、「すぐ再起動」は難しいこともあります。その場合は “表示を消す” ことよりも、実体の削除と接続解除ができているか に焦点を当てるのが安全です。

優先順位:実体ファイル削除 > 接続解除 > 表示の掃除

  • まず VHD/VHDX ファイルが削除できていること(ストレージ消費の観点で最重要)
  • 次に、接続が残っていないこと(思わぬドライブレターやロックの原因になる)
  • list vdisk の残りは、上の2つが満たせていれば“表示上の問題”になりやすい

サービス再起動で改善する可能性はあるが、万能ではない

環境によっては、ディスク管理系のサービスを再起動すると列挙が整理されることがあります。ただし、ストレージ関連サービスの再起動は影響範囲が大きく、タイミングを誤ると別のトラブルを呼びます。実行するならメンテナンス時間帯で、影響を理解した上で行ってください。

# 例:Virtual Disk サービス(環境により存在しない/停止できない場合あり)
Restart-Service -Name vds

# 例:Storage Service
Restart-Service -Name StorSvc

これで必ず list vdisk が掃除されるとは限りません。表示が残るときは、やはり再起動が確実です。

大量に VHD/VHDX を作って消す人向け:増やさない運用のコツ

差分ディスクを「作る→接続→検証→切り離し→削除」を何千回も回す運用では、1回の漏れが雪だるま式に増えます。表示の問題に悩まされないために、次の設計にしておくとトラブルが激減します。

“必ず切り離す” をコードで保証する(try/finally)

手作業ではなくスクリプト化しているなら、途中でエラーが起きても必ず切り離すようにします。

$path = "C:\temp\work\test.vhdx"

try {
    # 例:接続
    Mount-DiskImage -ImagePath $path

    # ここで検証処理(例:ドライブの初期化やファイル操作など)
}
finally {
    # 例:切り離し(失敗しても次へ進めるため、必要に応じてエラー制御)
    Dismount-DiskImage -ImagePath $path -ErrorAction SilentlyContinue
}

この “最後は必ず切り離す” の設計だけで、不要な接続残りや削除失敗が大幅に減ります。

削除対象をフォルダ単位で隔離する

削除対象が散らばると消し漏れが増えます。実験1回ごとに作業フォルダを作り、最後にフォルダごと削除できる構成にすると安全です。

$workDir = "C:\temp\vhd-batch\run-20260101-120000"
New-Item -ItemType Directory -Path $workDir | Out-Null

# ここに差分ディスクを作成していく
# 最後に $workDir を丸ごと消せるようにする

差分ディスクの親(ベース)は“触らない”場所に固定する

親 VHD/VHDX を作業フォルダに置くと誤削除の危険が跳ね上がります。ベースは読み取り専用にしたり、別ボリュームに固定したりして、「消すもの」と「消さないもの」を物理的に分離するのが鉄則です。

トラブルシューティング:よくある詰まりどころ

症状ありがちな原因対処
削除しようとすると「使用中」で消せないどこかのプロセスが VHD/VHDX を掴んでいる/切り離し漏れ先に切り離し(DiskPart / PowerShell)。それでもダメなら、関連アプリ(Hyper-V、バックアップ、ウイルス対策、エクスプローラーのプレビューなど)を閉じる
detach vdisk したのに再接続すると差分ディスクが壊れる親ディスクの場所変更/親ディスクの誤削除/パス解決の問題親のパスを固定し、差分ディスク作成時の設計を見直す
ディスクの管理には出ないのに list vdisk に大量に残る表示がセッション内の列挙に残っている実体削除と接続解除ができているか確認し、必要なら再起動でクリア
再起動しても件数が減らない起動時に自動でマウントしている仕組みがある/常駐ソフトが再接続しているスタートアップやタスクスケジューラ、常駐製品の設定を確認。実際に接続中かを優先して切り分ける

まとめ:不安を最短で解消する考え方

DiskPart の list vdisk に過去の VHD/VHDX が残り続けると、「削除できていないのでは」「システムに悪影響があるのでは」と不安になります。しかし、ポイントは次の3つです。

  • detach vdisk は切り離しであり、削除ではない(実体の削除は別途必要)
  • ファイルを削除しても list vdisk に残ることがあるが、再起動でクリアされることが多い
  • 影響が出るとしても管理系コマンドの列挙が中心で、実体が消えていれば致命的になりにくい

まずは「接続されていない」「ファイルが消えている」を確認し、それでも一覧が気になる場合は再起動でリセットする――この順番で対応すれば、過剰に悩まずに運用を回せます。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次