Przejdź do głównej zawartości

convert

Komenda compact vdisk w narzędziu DiskPart służy do zmniejszenia fizycznego rozmiaru dynamicznie rozwijanego pliku dysku wirtualnego (VHD/VHDX) po usunięciu z niego danych. Dynamicznie rozszerzane dyski rosną wraz z zapisem, ale nie zmniejszają się automatycznie; compact vdisk zwalnia nieużywaną przestrzeń i redukuje rozmiar pliku.

Okno terminala
diskpart
DISKPART> select vdisk file="<ścieżka_do_pliku.vhd>" [/noerr]
DISKPART> compact vdisk
  • select vdisk file="<ścieżka_do_pliku.vhd>" – wybiera dysk wirtualny, opcjonalnie z /noerr by kontynuować po błędzie.
  • compact vdisk – kompresuje wybrany dynamiczny dysk wirtualny.

Polecenie nie przyjmuje dodatkowych parametrów. Aby użyć compact vdisk, należy najpierw wybrać dysk przy pomocy select vdisk.

  1. Podstawowa kompresja dynamicznego VHD

    Okno terminala
    diskpart
    DISKPART> select vdisk file="C:\VHDs\Dysk.vhd"
    DISKPART> compact vdisk
    DISKPART> detach vdisk

    Plik VHD zostanie skompresowany, a następnie odłączony.

  2. Kompresja w skrypcie z ignorowaniem błędów CompactScript.txt:

    select vdisk file="D:\Test.vhd" noerr
    compact vdisk
    detach vdisk
    Okno terminala
    diskpart /s CompactScript.txt

    Skrypt kontynuuje działanie nawet po błędzie wyboru VHD.

  3. Kompresja VHDX używanego przez WSL2

    Okno terminala
    wsl --shutdown
    diskpart
    DISKPART> select vdisk file="D:\WSL\ext4.vhdx"
    DISKPART> attach vdisk readonly
    DISKPART> compact vdisk
    DISKPART> detach vdisk

    Przed kompresją należy wyłączyć instancję WSL i zamontować dysk w trybie tylko do odczytu.

  • Działa wyłącznie na dynamicznych VHD/VHDX; dyski stałe (fixed) nie zmieniają rozmiaru.
  • Wybrany dysk musi być odłączony lub zamontowany jako tylko do odczytu.
  • Po kompresji zaleca się ponowne odłączenie dysku przed użyciem go w Hyper-V lub innym narzędziu.
  • Komenda jest dostępna od Windows Server 2016 i w nowszych wersjach Windows 10/11.
Błąd / KomunikatPrzyczynaRozwiązanie
No VHD selected.Brak wcześniejszego select vdisk.Użyj select vdisk file="<ścieżka>" przed compact vdisk.
Virtual disk is not dynamically expandable.Próba kompresji dysku stałego (fixed).Upewnij się, że VHD jest dynamiczny; jeśli nie, utwórz nowy dynamiczny i skopiuj dane.
Access is denied.VHD jest montowany w trybie zapisu lub brak uprawnień administratora.Zamontuj jako readonly lub uruchom CMD jako administrator; odłącz VHD w Hyper-V.
The handle is invalid.Dysk używany przez inną usługę (np. WSL, Hyper-V).Wyłącz usługę korzystającą z VHD (wsl --shutdown) lub odłącz dysk z Hyper-V przed kompresją.
DiskPart has encountered an error: The system cannot find the file specified.Niepoprawna ścieżka pliku VHD.Sprawdź pełną ścieżkę i nazwę pliku; użyj cudzysłowów przy spacji.