VMware Workstation: jak zmniejszyć maksymalny rozmiar pliku .vmdk

27

Mam plik dysku o pojemności 150 GB (.vmdk, nieprzydzielony wstępnie), w którym przechowywana jest moja maszyna wirtualna.

Plik ma obecnie 20 GB, ale rośnie każdego dnia, mimo że nie przechowuję niczego nowego w systemie plików gościa.

Godzinami szukałem sposobu na zmniejszenie maksymalnego rozmiaru tego dysku , aby nigdy nie osiągnął 150 GB (chciałbym ustawić limit na 30 GB i zobaczyć, co się stanie, gdy maszyna wirtualna osiągnie ten rozmiar) .

Co próbowałem:

  • Konwersja obrazu dysku za pomocą VMware Converter → to nie działa, narzędzie pozwala jedynie na utworzenie pełnej kopii lub „połączonego klonu”.
  • Tworzenie nowej pustej maszyny wirtualnej o pożądanym rozmiarze w celu skopiowania danych 20 GB na nowy plik .vmdk → Nie mogę znaleźć sposobu na wykonanie kopii, ani nawet podłączyć nowego dysku do mojej istniejącej maszyny wirtualnej (tak, aby wykonać kopię za pomocą system operacyjny gościa).
  • Przeszukanie pliku .vmx w celu sprawdzenia, czy maksymalny rozmiar nie został ustawiony zwykłym tekstem (nie jest).

Chociaż to zadanie wydaje się technicznie dość proste (nie wymaga skomplikowanego zmniejszania, wystarczy zmiana limitu wielkości), naprawdę nie mam tutaj pomysłów ...

Czy w ogóle jest jakieś rozwiązanie?

Sébastien
źródło
1
Ponieważ partycje na dysku wirtualnym są najprawdopodobniej tworzone w celu wypełnienia reklamowanej przestrzeni, rzeczywiście chodzi o „trudne zmniejszanie”.
Daniel B

Odpowiedzi:

25

Zwykłą procedurą zmniejszania rozmiaru dysku .vmdk jest:

  1. Defragmentuj dysk za pośrednictwem gościa, wybierając tryb defragmentacji, który konsoliduje puste miejsce na końcu dysku. W przypadku gościa systemu Windows należy opróżnić Kosz i wyłączyć hibernację i stronicowanie, zwracając je po zakończeniu defragmentacji.

  2. Zeruj wszystkie nieużywane miejsce na dysku.
    Dla Windows użytku sdelete : sdelete -c.
    Dla systemu Linux: dd if=/dev/zero of=/mytempfile && rm -f /mytempfile.

  3. Zmniejsz dysk (może to potrwać dość długo).
    VMware Workstation: Menu VM / Zarządzaj / Wyczyść dyski.
    Lub użyć: vmware-vdiskmanager.exe -k [VMDK PATH].
    dla ESX: vmkfstools --punchzero [VMDK PATH].

Konwersja dysku z rosnącego na wstępnie przydzielony może zatrzymać jego wzrost. Można to zrobić za pomocą vmware-vdiskmanager z -tparametrem, którego wartości to:

0 : single growable virtual disk
1 : growable virtual disk split in 2Gb files
2 : single preallocated virtual disk
3 : preallocated virtual disk split in 2Gb files

Następujące polecenie przekształci plik .vmdk z rozwijalnego do wstępnie przydzielonego:

vmware-vdiskmanager -r current_disk_name.vmdk -t 3 new_disk_name.vmdk

Jeśli chcesz zmienić rozmiar dysku, należy to zrobić, gdy dysk jest nadal w możliwym do rozszerzenia formacie (przykłady tutaj ).

Aby uzyskać więcej informacji, zobacz Podręcznik użytkownika programu Virtual Disk Manager .

harrymc
źródło
2
Nie zmniejsza to jednak wewnętrznie reklamowanego rozmiaru dysku.
Daniel B
@DanielB: Nie, nie zmniejsza maksymalnego rozmiaru, tylko rozmiar fizyczny. Zmniejszenie maksymalnego rozmiaru może być niebezpieczne, ponieważ niektóre systemy operacyjne nie mogą zostać uruchomione bez wolnego miejsca na dysku systemowym.
harrymc
3
Jest to przydatna technika, której użyłem, aby zmniejszyć przestrzeń zajmowaną przez VMDK. Jednak to nie rozwiązuje całkowicie mojego problemu, ponieważ jeśli chcę mieć VMDK zawsze pod, powiedzmy 30 GB, będę musiał okresowo powtarzać operację (co naprawdę zajmuje dużo czasu).
Sébastien
Jeśli dysk można zawsze zmniejszyć do pożądanego rozmiaru, co oznacza, że ​​powyższa procedura zawsze działa w celu zmniejszenia rozmiaru, wówczas można ograniczyć rozmiar w przyszłości, konwertując dysk na stały rozmiar.
harrymc
1
@harrymc Konwersja dysku na stały rozmiar odpowiada moim potrzebom. Po prostu nie znalazłem sposobu, aby to zrobić za pomocą VMWare Workstation lub Converter.
Sébastien
6

Plik ma obecnie 20 GB, ale rośnie każdego dnia, mimo że nie przechowuję niczego nowego w systemie plików gościa.

Ponieważ system operacyjny i jego aplikacje tymczasowo wykorzystują dużo miejsca na dysku na pliki tymczasowe, pliki stron, pliki hibernacji i pliki konfiguracji. Po ich usunięciu w zależności od zasad systemu operacyjnego następnym razem zostaną użyte nowe sektory na dysku. Maszyna wirtualna przydziela miejsce na dysku wirtualnym z dysku rzeczywistego za każdym razem, gdy na dysku wirtualnym używany jest nowy sektor. Ponieważ sektor na dysku wirtualnym nie zawsze jest ponownie wykorzystywany przez system operacyjny gościa, maszyna wirtualna uważa, że ​​jest to użycie dysku i daje miejsce na dysku rzeczywistym, co prowadzi do wzrostu obrazu dysku wirtualnego.

Twoje pytanie do pytania jest mniej prawdopodobne, ponieważ użycie takiego narzędzia bez kontroli obrazu może doprowadzić do całkowitej katastrofy. Możesz jednak zapobiec powiększaniu obrazu powyżej 30 GB. Istnieje wiele sposobów na osiągnięcie celu.

A. Użyj tylko 30 GB partycjonowanej i pozostaw wolną przestrzeń. Jeśli już podzieliłeś więcej miejsca na partycje, musisz je zmniejszyć / usunąć, utwórz nową partycję, a następnie zrzuć ją zerami i przebij ją zgodnie z opisem @harrymc. Ponieważ przestrzeń w obszarze niepodzielonym na partycje nie jest nigdy używana, dysk wirtualny nigdy nie wzrośnie powyżej 30 GB.

B. Utwórz migawkę i przywróć ją po użyciu. Po utworzeniu migawki VM przechowuj dane w nowym pliku obrazu. Jeśli przywrócisz go, bez zapisywania lub tworzenia nowych migawek, wszystkie zmienione dane zostaną usunięte, a zatem zwolnione zostanie miejsce.

C. Utwórz nowy dysk wirtualny o maksymalnej pojemności 30 GB, dodaj go jako nowy dysk do bieżącej maszyny wirtualnej, przenieś wszystkie dane na nowy dysk wirtualny za pomocą narzędzia do tworzenia kopii zapasowych. Do klonowania można użyć działającego systemu Linux.

Zalecana opcja to A.

Totti
źródło
2

Dlaczego nie po prostu ustawić rozmiar dysku na 30 GB ze 150 GB.

Musisz ustawić sumę wszystkich partycji na mniej niż 30 GB. Będziesz musiał zmniejszyć rozmiary partycji w miarę upływu czasu. Na tej stronie znajduje się DUŻO dokumentacji dotyczącej zmniejszania partycji, więc nie powtórzę tego tutaj PONOWNIE.

Dlaczego stworzyłeś 150 GB (cienką partycję), jeśli nie masz miejsca na jej obsługę w maksymalnym rozmiarze? Wygląda na to, że to tylko proszenie o kłopoty.

mdpc
źródło
5
Nie stworzyłem osobiście maszyny wirtualnej, dlatego właśnie.
Sébastien
Jak zmniejszyć sam dysk? Mam partycje na dysku zmniejszone, ale vdiskmanager.exe -k [VMDK PATH]jak sugeruje inna odpowiedź, nie zmniejsza dysku.
Aaron Franke,
Problemem, który nie jest jasno udokumentowany, jest zmiana rozmiaru urządzenia vmdk (oczywiście po zmianie rozmiaru partycji). Również @mdpc myślę, że twoja odpowiedź nie jest konstruktywna. W wielu przypadkach trzeba zmienić rozmiar danych w istniejącej maszynie wirtualnej, więc nie ma sensu wskazywać palcem, że maszyna wirtualna powinna zostać poprawnie utworzona.
basos
2

Istnieje okrągły sposób użycia VMWare Converter do utworzenia nowej maszyny wirtualnej i mniejszego rozmiaru VMDK, a następnie przekonwertowania oryginalnego VMDK na nowo utworzony, mniejszy VMDK.

Zmniejsz VMDK

Szczegółowe kroki tutaj .

Należy pamiętać, że wszelkie zmiany rozmiaru VMDK będą również wymagać odpowiedniej aktualizacji tabeli partycji .

Hanxue
źródło
Jest to VM VMWare Workstation i te zaawansowane opcje kopiowania nie są oferowane przez Converter dla tego typu VM. To po prostu nie pozwoli mi zmienić rozmiaru dysku.
Sébastien
2

Działa to tylko w przypadku rzadkiego VMDK (nieprzydzielone wstępnie) Defragmentacja jest wymagana przed zmniejszeniem, aby zapewnić ciągłość używanego miejsca

Defragmentacja w systemie Windows

Na maszynie wirtualnej z systemem Windows należy najpierw uruchomić defragmentację dysku z poziomu systemu Windows. Defragmentacja w systemie Windows zapewnia ciągłość wszystkich używanych przestrzeni. Następnie możesz zmniejszyć rozmiar dysku wirtualnego.

Zmniejszenie dysku wirtualnego

Aby zmniejszyć dysk wirtualny:

Otwórz panel sterowania / Przybornik VMware Tools:

W systemie Windows:

Kliknij dwukrotnie ikonę VMware Tools na pasku zadań lub kliknij Start> Panel sterowania> VMware Tools.

W systemie Linux:

Otwórz terminal i uruchom następujące polecenie:

vmware-toolbox

Uwaga: W stacji roboczej 9.x (Windows) i nowszej zmniejszanie odbywa się automatycznie podczas czyszczenia dysku. Dlatego ta opcja została usunięta z panelu narzędzi VMware. Przejdź do VM> Zarządzaj> Oczyść dyski. Nie jest to dostępne w wersji Linux VMware Workstation 9.xi późniejszych.

Kliknij kartę Zmniejsz. Wybierz dysk, który chcesz zmniejszyć. Kliknij opcję Przygotuj do zmniejszenia, a następnie postępuj zgodnie z instrukcjami wyświetlanymi na ekranie. Przestroga: Nie zamykaj maszyny wirtualnej ani maszyny hosta, gdy dysk się kurczy. Nie próbuj też anulować procesu. Przerwanie tego procesu może spowodować nieodwracalne uszkodzenie dysku wirtualnego i ponowne uruchomienie maszyny wirtualnej może być niemożliwe.

Z bazy wiedzy VMWare

Jalal Mostafa
źródło
Przeczytanie istniejących odpowiedzi w pierwszej kolejności pozwala uniknąć duplikatów odpowiedzi.
harrymc
1
Przepraszamy, zresztą opublikowałem go z pełną procedurą i źródłem. To może mu pomóc bardziej
Jalal Mostafa
Nie odpowiada też na operację. OP chce zmniejszyć maksymalny limit, a nie aktualny rozmiar.
Ryuu
2

Odpowiedź @harrym jest całkiem dobra, ale tak naprawdę nie odpowiada na pytanie. OP chce zmniejszyć maksymalny rozmiar . Problem polega na tym, że hiperwizor nie wie, ile z prezentowanego rozmiaru (czyli maksymalnego rozmiaru) faktycznie jest używane przez system operacyjny. Zagęszczanie (vmware-vdiskmakager -k) dotyczy dostępnego vmdk. To nic nie robi na wcześniej przydzielonych.

Kroki, aby zmniejszyć dysk to:

  1. Zmień rozmiar partycji na dysku za pomocą systemu operacyjnego lub odpowiedniej płyty CD na żywo
  2. Zmień rozmiar urządzenia vmdk, ostrożnie wybierając granicę, aby nie wycinać użytecznej przestrzeni partycji. Zawsze możesz zostawić trochę więcej miejsca na obrazie, niż jest to faktycznie potrzebne.

Pierwszy krok obejmuje procedurę z poziomu maszyny wirtualnej i różni się w zależności od systemu operacyjnego gościa. Drugi krok może być wspierany przez komendy vmware, ale nie znalazłem głębokiego sposobu na zrobienie tego. Tak hacky podejście.

Oto nie tak szybkie (ze względu na przenoszenie dużych danych) i brudne rozwiązanie, które załatwiło sprawę. Będziemy musieli mieć dostępną przestrzeń równą maksymalnemu rozmiarowi urządzenia .

OSTRZEŻENIE: Pamiętaj, aby wykonać kopię zapasową ważnych danych przed jakąkolwiek operacją !!

  1. Znajdź sposób zmiany rozmiaru partycji gościa i pozostaw nieprzydzielone miejsce na końcu urządzenia. Dwa przykłady:

    Z systemu gościa: Windows 7

    1. Możesz skorzystać z możliwości zmiany rozmiaru online. Warto najpierw zdefragmentować dysk z poziomu systemu operacyjnego zadania.
    2. Uruchom diskmgmt.msc, wybierz partycję (wolumin) na dysku, którego rozmiar chcesz zmienić, kliknij prawym przyciskiem myszy-> Zmniejsz wolumin. W wyświetlonym oknie dialogowym zmniejsz rozmiar zgodnie z wymaganiami. Pamiętaj, że ponieważ partycja jest w użyciu (jeśli jest to dysk systemowy lub jest mocno pofragmentowana), możesz nie być w stanie odzyskać większości wolnego miejsca. Zapewnij dodatkowe miejsce.
    3. Teraz chcemy poznać partycje kończące sektor dyskowy (lub bajt). Zakładając, że jest to jedyna partycja na urządzeniu, bierzemy rozmiar woluminu wyświetlanego na moim komputerze-> wybierz dysk-> kliknij prawym przyciskiem myszy-> właściwości-> Pojemność: zanotuj liczbę w bajtach. (np. w moim przykładzie 107371032576 dla 99,9 GB). Dodaj kilkaset megapikseli dla bezpieczeństwa (+204800) (np. 107371237376). Aby upewnić się, że nie musimy niczego dodawać, możemy użyć narzędzia cmd linii diskpart cmd, aby znaleźć przesunięcie partycji od początku urządzenia. uruchom diskpart następnie: wyświetl listę dysku, wybierz identyfikator dysku , wyświetl listę, wybierz identyfikator części , szczegóły. Przykład:

    DISKPART> część szczegółowa

    Partycja 1

    Przesunięcie w bajtach: 1048576

    Upewnij się, że dodajesz co najmniej ten numer do rozmiaru dysku. Teraz musimy przekonwertować bajty na sektory dzielące przez 512 i zaokrąglające w górę (pułap). Np. 209709448. Zanotuj ten numer dla kroku 3.

    Za pośrednictwem płyty CD na żywo: SystemResqueCD

    1. Alternatywnie możesz użyć resque cd, ( SystemResqueCD to moja propozycja), pobrać bootowalny ISO, zamontować go jako wirtualne urządzenie CD ROM na twoim VM, uruchomić z CD (naciskając klawisz Esc na ekranie startowym VMWare, być może trzeba spróbować czasami, jak się wydaje bardzo krótko). Po osiągnięciu wiersza polecenia wpisz: startx, mam nadzieję, że doprowadzi cię to do interfejsu graficznego.
    2. Na pulpicie systemresque uruchom gparted (np. Z terminala). Znajdź partycję, której rozmiar ma zostać zmieniony (musi być całkowicie odmontowany, w razie wątpliwości wykonaj scandisk z systemu operacyjnego gościa). Dokonaj zmiany rozmiaru, dokładnie planując swoje potrzeby dotyczące przestrzeni.
    3. Znów musimy znaleźć końcowe przesunięcie w sektorach (lub bajtach) partycji. Otwórz terminal i napisz podzielone [ urządzenie ], a następnie jednostki s, wydrukuj. Na przykład

Numer Początek Koniec Rozmiar Typ System plików Flagi

1 2048s 113455103s 113453056s boot podstawowy NTFS

Zanotuj końcowy sektor i dodaj 1. Np. 113455104. Zanotuj ten numer dla kroku 3.

  1. Ponieważ hack działa na vmdks z pojedynczym plikiem (typ 2) (nie próbowałem na wielu typach plików), najpierw przekonwertujemy plik growble na wstępnie przydzielony. Będziemy tymczasowo potrzebować partycji z przestrzenią fizyczną jako maksymalnym rozmiarem urządzenia. (np. 150 GB).

    vmware-vdiskmanager.exe -r sourcevmdk -t 2 destvmdk

  2. Teraz trudna część, dla wstępnie przydzielonego dysku powinny być 2 vmdks

    disk.vmdk disk-flat.vmdk

    pierwszy ma tylko KB długości, a drugi przechowuje dane. Otwórz pierwszą (disk.vmdk), gdy stacja robocza VMWare jest wyłączona , z edytorem tekstu (Notepad ++ jest moją sugestią). Znajdź linię

    RW 113455104 FLAT „Windows 7_x64-fl-flat.vmdk” 0

    Tak, rozumiesz, drugie pole to liczba sektorów przydzielonych dla urządzenia. Aby sprawdzić poprawność, pomnóż przez 512 i znajdź rozmiar w bajtach, a następnie podziel przez 1073741824 (1024 ** 3), aby znaleźć rozmiar w GB. Powinien to być rozmiar poprzedniego urządzenia.

    Teraz zamień ten numer na zanotowany numer z kroku pierwszego i zapisz plik. OSTRZEŻENIE : Błąd tutaj i możesz skończyć przycinanie rzeczywistych danych używanych w systemie plików. (Ale zmieniliśmy rozmiar fs na początku urządzenia i dokonaliśmy poprawnych i bezpiecznych obliczeń, prawda?)

  3. Do tej pory nie zostały jeszcze dotknięte żadne dane. Wykonaj ten ostatni krok, aby faktycznie przyciąć przedłużenia. Użyjemy funkcji zmiany nazwy programu vmware-vdiskmanager, aby odtworzyć vmdk z teraz zmniejszonym rozmiarem.

    vmware-vdiskmanager.exe -n destvmdk sourcevmdk

basos
źródło
0

W przypadku systemu-gościa vmware Linux należy uruchomić:

sudo vmware-toolbox-cmd disk shrinkonly

Tom Hale
źródło