Jak zmienić VDI o stałym rozmiarze za pomocą polecenia edithd w systemie Windows?

70

Próbuję wymyślić, jak zmienić rozmiar pliku VDI. Jestem nowy w VirtualBox i muszę się wiele nauczyć. Ale myślę, że zrozumiałem podstawy. Zainstalowałem już system Windows 7 jako mojego pierwszego gościa. Hostem jest także system Windows 7. Nie byłem pewien, ile miejsca na dysku należy przeznaczyć, więc wybrałem rozmiar VDI 40 GB i stały rozmiar w celu zwiększenia wydajności. Ale teraz zmieniłem zdanie i chcę dodać kolejne 10 GB. Klikałem program i czytałem zawartość menu Pomoc, ale to nie pomaga. Wyjaśnia kontrolery dysków, SAS, SATA, SCSI, yada, yada, ale nie to, czego szukam.

Szukałem odpowiedzi w Internecie, forum VirtualBox mówi, że powinieneś używać Gparted, jeśli chcesz najłatwiejszej metody (niektóre mody opublikowały lepką). Niektórzy użytkownicy dyskutują za pomocą ddpolecenia. Ale to wszystko Linux. Ponadto w SU jest wiele pytań dotyczących zwiększania i zmniejszania rozmiarów plików VDI, ale wszystkie dotyczą używania Linuksa jako hosta, a Windows jako gościa.

Znalazłem ten fajny post na blogu, jak to zrobić za pomocą modifyhdkomendy VBoxManage. Ten facet robi to również w systemie Linux jako system operacyjny hosta. Chciał nawet tego samego rozmiaru (50 GB) dla swojego pliku VDI, jak ja dla mojego, co za zbieg okoliczności. Pomyślałem więc, że i tak spróbuję, albo to zrobię, albo ją zepsuję. Co może pójść nie tak? ... eh? To brzydka niespodzianka.

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd "%userprofile%\virtua
lbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi" --resize 51200
0%...
Progress state: VBOX_E_NOT_SUPPORTED
VBoxManage.exe: error: Resize hard disk operation for this format is not impleme
nted yet!

C:\Program Files\Oracle\VirtualBox>

za

Powiedz co teraz?! ... nie można zmienić rozmiaru wirtualnych dysków twardych w formacie VDI? Nie mówisz Nie obsługuje twojego formatu? A co powiesz na to ...

Czy naprawdę nie ma prostego sposobu na zmianę rozmiaru pliku VDI, najlepiej za pomocą kilku kliknięć w VirtualBox? Coś w toku?

Samir
źródło
4
Usunąłem nakaz jakości VirtualBox, który nie dodaje nic użytecznego do pytania.
śleske
1
Do wykorzystania w przyszłości modifyhdjest teraz znany jako, modifymediumale pozostaje kompatybilny wstecz - patrz virtualbox.org/manual/ch08.html#vboxmanage-modifyvdi
djule5

Odpowiedzi:

121

Podsumowanie:

  • VBoxManage.exe modifyhd --resize może zwiększyć (ale nie zmniejszyć) logiczny rozmiar obrazu dysku (rozmiar widziany przez system gościa).
  • VBoxManage.exe modifyhd inputfile.vdi --compactmoże zmniejszyć rozmiar obrazu dysku fizycznego (rozmiar pliku obrazu na dysku widzianego przez system operacyjny hosta). Nie zmienia to jednak rozmiaru dysku logicznego. Zauważ, że działa to tylko wtedy, gdy wolne miejsce zostało najpierw zerowane w systemie-gościu.
  • modifyhd działa tylko z wariantem formatu dynamicznego („obraz dynamicznie przydzielany”).
  • modifyhd działa tylko z formatami obrazów VDI i VHD.
  • Jeśli używasz migawek, będziesz musiał sklonować najnowszą migawkę VDI z podfolderu „Migawki”.

Aby uzyskać szczegółowe informacje, patrz sekcja 8.23. VBoxManage modyfikuj w instrukcji.


Powodem, dla którego zmniejszanie rozmiaru dysku logicznego VDI nie zostało jeszcze zaimplementowane, jest zapobieganie uszkodzeniu danych, które mogłoby się zdarzyć, a w wyniku tego powstałyby niedziałalne maszyny wirtualne. Dlatego gdy --resizeużywana jest ta opcja, nowy rozmiar dysku musi być większy niż bieżący. Nie wolno być mniejszym lub równym bieżącemu rozmiarowi. Innymi słowy, rozmiar dysku 40 GB można zmienić tylko na 41 GB lub więcej, nie można zmienić rozmiaru na 40 GB (to po prostu głupie) lub 39 GB lub mniej.

Stare wersje VirtualBox tworzyły pliki VDI jako „stały” format formatu. Nowe ustawienie domyślne ma teraz tworzyć warianty formatu „dynamicznego” podczas tworzenia nowych plików VDI (obraz dysku wirtualnego). (Zgaduję, że tak jest od czasu wprowadzenia wariantu formatu dynamicznego, niezależnie od wersji, która została wprowadzona.)

Zatem komunikat o błędzie „operacja dla tego formatu nie jest jeszcze zaimplementowana” oznacza to, że plik VDI używa wariantu formatu „ustalonego”. Aby obejść ten problem, będziesz musiał sklonować plik VDI za pomocą clonehdpolecenia. Aby wyświetlić wariant formatu pliku VDI, możesz użyć showhdinfopolecenia.

Przykład roboczy

Pokaż informacje VDI o bieżącym dysku.

Komenda wejściowa: vboxmanage.exe showhdinfo path\inputfile.vdi

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi"
UUID:           132e9af1-0428-49f4-bc45-4d84680e17f5
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       C:\Users\Name\VirtualBox VMs\sg2_win7_x64_lab\sg2_win7_x64_lab.
vdi
Storage format: VDI
Format variant: fixed default
Capacity:       40960 MBytes
Size on disk:   40962 MBytes
In use by VMs:  sg2_win7_x64_lab (UUID: dcd106b3-7ed6-4f19-ad94-820ab4dc10d3)

C:\Program Files\Oracle\VirtualBox>

Widzisz, gdzie jest napisane „naprawiono domyślne”? Właśnie dlatego wyrzuca powyższy błąd przy próbie zmiany jego rozmiaru.

Sklonuj stary plik VDI do nowego pliku VDI.

Komenda wejściowa: vboxmanage.exe clonehd path\inputfile.vdi path\outputfile.vdi

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe clonehd "%userprofile%\virtual
box vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi" "%userprofile%\virtualbox vms\sg2
_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: 34dafa68-3093-4946-926a-8237ea263
e5c

C:\Program Files\Oracle\VirtualBox>

Voilà! Stary plik został teraz sklonowany do nowego pliku. Ponieważ domyślnym ustawieniem w nowych wersjach VirtualBox jest stosowanie wariantu formatu „dynamicznego”, nie trzeba tego jawnie definiować. Chociaż, jeśli pracujesz ze starszą wersją VirtualBox, możesz chcieć ustawić opcję na „dynamiczną” (jeśli w ogóle dostępna), aby zapewnić lepszą kompatybilność i / lub elastyczność z przyszłymi wersjami VirtualBox.

Pokaż informacje VDI o sklonowanym dysku.

Komenda wejściowa: vboxmanage.exe showhdinfo path\inputfile_clone.vdi

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
UUID:           34dafa68-3093-4946-926a-8237ea263e5c
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       C:\Users\Name\virtualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_
clone.vdi
Storage format: VDI
Format variant: dynamic default
Capacity:       40960 MBytes
Size on disk:   7806 MBytes

C:\Program Files\Oracle\VirtualBox>

Widzisz, jak teraz mówi „dynamiczne domyślne”? Jak miło!

(Na marginesie! Podano tutaj 7806 MB jako fizyczny rozmiar, ponieważ użyłem --compactopcji oryginalnego pliku VDI, próbując wymusić konwersję do wariantu formatu dynamicznego. Po prostu coś, co czytałem na forum VirtualBox, podobno pracowałbym ze starszymi wersjami, więc pomyślałem, że równie dobrze mogę spróbować. Nie zadziałało).

Zmiana rozmiaru sklonowanego dysku.

Komenda wejściowa: vboxmanage.exe modifyhd path\inputfile.vdi --resize 51200

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd "%userprofile%\virtua
lbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi" --resize 51200
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

C:\Program Files\Oracle\VirtualBox>

Powodzenie! Żadnych bzdur w formacie, nie więcej. Pamiętaj tylko, aby zmienić rozmiar nowego, sklonowanego dysku, a nie oryginalnego. Pamiętaj, że rozmiar jest wyrażony w MB. Wierzę, że możesz użyć np. 51200Jak również 50G(lub „GB”). Istnieje również opcja, za pomocą --resizebytektórej można wyrazić rozmiar w bajtach.

Pokaż informacje VDI o sklonowanym dysku o zmienionym rozmiarze.

Komenda wejściowa: vboxmanage.exe showhdinfo path\inputfile_clone.vdi

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
UUID:           34dafa68-3093-4946-926a-8237ea263e5c
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       C:\Users\Name\virtualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_
clone.vdi
Storage format: VDI
Format variant: dynamic default
Capacity:       51200 MBytes
Size on disk:   7806 MBytes

C:\Program Files\Oracle\VirtualBox>

Otóż ​​to! Odtąd musisz dodać ten sklonowany dysk jako nowy VDI dla maszyny wirtualnej. Robisz to w VirtualBox. Nie wejdę w to. Jeśli do tej pory potrafiłeś to zrozumieć i zrozumieć, to prawdopodobnie nie potrzebujesz dalszych wskazówek. Możesz usunąć stary „naprawiony” plik lub pozostawić go jako kopię zapasową. Upewnij się, że przetestowałeś nowy plik VDI przed usunięciem oryginalnego pliku źródłowego.

Uwaga! Nie zobaczysz od razu nowego rozmiaru sklonowanego dysku. Musisz uruchomić maszynę wirtualną za jej pomocą, a następnie użyć narzędzia do zarządzania partycjami, aby rozwinąć partycję, aby wypełnić dysk wirtualny (lub utworzyć więcej partycji). W systemie Windows po prostu uruchom, diskmgmt.msca będziesz mógł tam rozwinąć partycję.

Zrzuty ekranu

za b do re mi fa sol

Odniesienie

Samir
źródło
1
superuser.com/review/suggested-edits/227029 (Próbowałem.)
Thirtydot
Dobre oko! Poprawiłem parametr edithd. Dziękuję za zwrócenie mi na to uwagi.
Samir
2
Naprawdę dobrze napisana odpowiedź! IMHO powinno uzyskać dużo głosów.
Johan Karlsson,
+1: To ludzie tacy jak ty i wiedza, którą dzielicie się swobodnie, sprawia, że ​​ekosystem StackExchange jest tak fantastycznym zasobem!
Homunculus Reticulli
1
Jeśli masz problemy, ponieważ używasz migawek , zajrzyj na virtualbox.org/ticket/9103 . Zasadniczo musisz zastosować operację modifymedium/ modifyhdna samym pliku migawki.
djule5
11

Oto dość prosty proces, który działał dla mnie, aby zmienić rozmiar dysku VirtualBox (wer. 4.3.16) na dysk dynamiczny 60 GB na moim komputerze Mac (OS X 10.9.4) z systemem Linux (Ubuntu 14.04) działającym jako system gościa:

W terminalu na komputerze Mac włóż dysk CD do katalogu z plikiem VDI i wpisz następujące polecenie:

VBoxManage showhdinfo mydisk.vdi  
VBoxManage clonehd mydisk.vdi mydiskClone.vdi  
VBoxManage modifyhd mydiskClone.vdi --resize 61440  
VBoxManage showhdinfo mydiskClone.vdi

W sekcji magazynu aplikacji VirtualBox dodaj plik mydiskClone.vdi jako drugi dysk HD, a następnie uruchom maszynę wirtualną normalnie.

W powłoce w systemie-gościu wpisz:

sudo fdisk /dev/sdb
- delete all partitions
- create new partition on full disk

Uruchom ponownie gościa. Kiedy wróci, ponownie przejdź do powłoki i wpisz:

sudo resize2fs /dev/sdb1

Zamknij system operacyjny gościa.

W sekcji Magazyn aplikacji VirtualBox ponownie ustaw mydiskClone.vdi na dysk rozruchowy. Następnie uruchom system operacyjny gościa i sprawdź nowy rozmiar dysku za pomocą właściwości „Komputer” w przeglądarce plików.

Grant Braught
źródło
Ta odpowiedź nie ma sensu. Najpierw tworzysz jedną dużą partycję na / dev / sdb, a następnie zmieniasz jej rozmiar, ale najpierw nie tworzysz na niej systemu plików. Czy może zapomniałeś o kroku kopiowania oryginalnej partycji?
śleske
5

Klonowanie jest w rzeczywistości lepszym rozwiązaniem i istnieje łatwiejszy sposób, aby to zrobić.

Z menu Plik wybierz Virtual Media Manager, a następnie kliknij Kopiuj. Źródłem będzie oryginalny twardy dysk vdi o stałym rozmiarze, a miejscem docelowym będzie coś nowego do wyboru (zawiera opcję nowego).

Taky Djarou
źródło
To jest część odpowiedzi od sammyg.
Efren
4

OK, więc sprawiłem, że stało się to bez klonowania .

Miałem plik VDI 100 GB (stały format) z Ubuntu. Pracować w porządku. Chciałem zwolnić trochę miejsca na hoście, zmniejszając maszynę wirtualną.

Kroki:

  1. Sprzątać

Usunięte niechciane pliki. 45 GB za darmo. Potrzebuję tylko 30 GB, aby zostać uwolnionym.

  1. Napraw system operacyjny gościa

Mam tylko jedną partycję, więc nie mogę nic zrobić z poziomu wewnętrznego systemu Ubuntu. Zainstalowano Ubuntu Live na maszynie wirtualnej i uruchomiono z niego.

Służy gparteddo zmniejszenia partycji do 70 GB. Utworzono nową partycję w nieużywanym miejscu w ext4.

  1. Wyczyść wolne miejsce

Wolne miejsce na nowej partycji (30 GB).

Postępowano zgodnie z tym przewodnikiem: zmniejsz wirtualny dysk twardy w systemie Ubuntu jako system operacyjny gościa i hosta, używając zerofree

Moja nowa partycja to /dev/sda3.

$ sudo apt-get install zerofree
$ sudo init 1

...

# mkdir /tmp3
# mount -o ro -t ext4 /dev/sda3 /tmp3
# zerofree -v /dev/sda3
  1. Kompaktuj VDI

    VBoxManage modyfikuj „ubuntu.vdi” kompaktowy

Minęło trochę czasu, ale zadziałało!

ATOzTOA
źródło
1
Jesteś pewien, że to zadziałało? Zgodnie z instrukcją VirtualBox --compactdziała tylko dla obrazów dynamicznie przydzielanych, a nie dla obrazów o stałym rozmiarze.
śleske
1
@ ATOzTOA: Jeśli plik obrazu dysku rośnie, to nie jest to obraz o „stałym formacie”, ale obraz „dynamicznie przydzielany”, co napisałeś w swojej odpowiedzi.
śleske,
3
Nie, to dynamicznie przydzielany obraz . Cytując instrukcję: „Jeśli utworzysz obraz o stałym rozmiarze, w systemie hosta zostanie utworzony plik obrazu, który ma mniej więcej taki sam rozmiar jak pojemność dysku wirtualnego.” Virtualbox.org/manual/ch05.html#vdidetails
śleske
1
„Obraz o stałym rozmiarze oznacza, że ​​nie może przekroczyć określonego rozmiaru”. NIE. „Stały rozmiar” oznacza, że ​​rozmiar jest stały, więc zawsze taki sam. Przeczytaj dokumenty.
sleske
1
Jeśli ktoś to czyta i nie jest pewien, kto ma rację. @sleske jest poprawny. Obrazy o stałym rozmiarze są dokładnie takie, jak mówią. Naprawiono rozmiar określony podczas tworzenia obrazu. W testach porównawczych zapewnia to znacznie większą wydajność w porównaniu z dynamicznie przydzielanymi obrazami, więc każdy, kto korzysta z VBox do zadań intensywnie HD, prawdopodobnie powinien rozważyć ten format pomimo jego ograniczeń.
Jack
2

Trochę późno na przyjęciu tutaj, ale dodam 2 centy. Najpierw powiem, że jest to skomplikowany proces, który doprowadzi najbardziej przypadkowych użytkowników do szaleństwa. Dlaczego Oracle nie umieściło tego w graficznym interfejsie VBox, jest tajemnicą.

Krok 1: Użyj wiersza polecenia systemu Windows (VBoxmanage), aby zwiększyć rozmiar dysku. Wskazówka polega na tym, aby używać identyfikatora napędu vdi zamiast bez końca próbować wprowadzić lokalizację pliku i otrzymywać komunikaty o błędach.

Krok 2: Następnie musisz rozwinąć partycję podstawową, aby skorzystać z nowej przestrzeni. Pobierz gparted iso i utwórz nową maszynę wirtualną w VBox, używając jej jako źródła IDE. Następnie użyj istniejącego napędu VDI jako dysku sata. Nie twórz wirtualnego dysku dla tego komputera. Uruchom nową maszynę, a uruchomione zostanie GUI w parterze. Może to potrwać kilka ponownych rozruchów, aby rozwiązać problem.

Po uruchomieniu gparted zobaczysz partycje dysku vdi, których rozmiar chcesz zmienić. WAŻNE: Będziesz musiał usunąć partycję rozszerzoną i zamienić przestrzeń plików, aby móc zwiększyć rozmiar partycji podstawowej, więc nie przydzielaj całej nowej przestrzeni dla PP. Gdy to zrobisz, będziesz musiał wyznaczyć pozostałą przestrzeń dla nowej partycji rozszerzonej i utworzyć w niej nową przestrzeń plików wymiany. Uznałem, że jest to o wiele łatwiejsze niż błąkanie się po linii poleceń.

Nie jest to bułka z masłem, ale jest wykonalne ... Zajęło mi około pół dnia badania sieci, aby to rozgryźć. Uruchamianie win8.1 / Ubuntu na VBox

Willie

Willie
źródło
2

Oto jak zmieniłem rozmiar / powiększyłem / rozszerzyłem stały obraz VDI (mój proces zmniejszenia ich jest w innej odpowiedzi):

  1. Użyj VirtualBox, aby utworzyć nowy dysk o pożądanym rozmiarze (rozmiar MUSI być co najmniej taki sam jak oryginalny). Zrób to, otwierając Ustawienia VirtualBox dla maszyny wirtualnej gościa, przejdź do Storage, kliknij Kontroler HDD (np. „SATA”), a następnie kliknij „+”, aby dodać dysk twardy. Następnie skonfiguruj nowy dysk zgodnie z potrzebami.
  2. Pobierz gparted ISO na żywo i skonfiguruj maszynę wirtualną gościa, aby uruchamiała się z niego (ponownie Ustawienia pamięci masowej).
  3. Wykonaj kopię zapasową bieżącej pamięci maszyny wirtualnej gościa.
  4. Uruchom maszynę wirtualną gościa (powinna zostać uruchomiona w środowisku na żywo z partycjami). Z wnętrza środowiska podzielonego na części:
    1. Użyj aplikacji gparted, aby sprawdzić, czy istniejący dysk to „/ dev / sda”, a nowy (większy) dysk to „/ dev / sdb” (menu rozwijane w prawym górnym rogu).
    2. Zamknij aplikację podzieloną na partycje.
    3. Otwórz terminal z uprawnieniami administratora (kliknij prawym przyciskiem myszy na pulpicie -> Terminale -> terminal z uprawnieniami administratora).
    4. Wpisz następujące polecenie: dd if=/dev/sda of=/dev/sdb status=progress bs=128Mi poczekaj na jego zakończenie. Spowoduje to skopiowanie oryginalnego dysku na nowy dysk bajt po bajcie, w tym MBR itp. (Uwaga: Wykonanie może zająć trochę czasu, w zależności od rozmiaru oryginalnego dysku, prędkości dysku na hoście itp.). (Uwaga: jeśli na maszynie wirtualnej gościa jest przydzielone> 1 GB pamięci RAM, możesz zmienić parametr „bs” na „bs = 256M”, co może nieco przyspieszyć kopiowanie).
    5. Ponownie otwórz aplikację podzieloną na partycje
    6. Wybierz nowy (większy) dysk (powinien być / dev / sdb) z menu rozwijanego w prawym górnym rogu.
    7. Rozwiń partycje zgodnie z potrzebami. Aby rozwinąć partycję, której nie ma na końcu, może być konieczne przeniesienie partycji następujących po tej, którą chcesz rozwinąć. W zależności od specyfiki schematu partycjonowania może być konieczne wykonanie kilku kroków, takich jak powiększanie ostatniej partycji do końca, a następnie zmniejszanie jej przez przenoszenie wszystkiego do końca. W moim przypadku moją ostatnią partycją była zamiana linuksa, więc po prostu ją usunąłem, w razie potrzeby rozszerzyłem partycję podstawową, a następnie odtworzyłem partycję wymiany na końcu (uważając, aby odtworzyć oryginalny schemat partycjonowania).
    8. Zatwierdź zmiany.
    9. W tym momencie powinieneś mieć nowy dysk o stałym rozmiarze z całą oryginalną zawartością i więcej miejsca niż oryginał. Możesz zamontować nowy dysk w uruchomionej na żywo środowisku enkartowej partycji i zweryfikować.
    10. Zamknij maszynę wirtualną gościa (gparted live) i usuń ISO z dysku maszyny wirtualnej.
  5. Przejdź do ustawień VBox dla maszyny wirtualnej gościa, przejdź do Storage i usuń oryginalny dysk z listy (kliknij prawym przyciskiem myszy i wybierz „Usuń załącznik”). To powinno pozostawić nowo utworzony dysk dla maszyny wirtualnej. Uwaga: Ten krok polega po prostu na usunięciu dysku z konfiguracji maszyny wirtualnej gościa - oryginalny dysk maszyny wirtualnej gościa (tj. Mały) jest nadal dostępny na komputerze hosta.
  6. Uruchom maszynę wirtualną i ciesz się!
  7. (Po potwierdzeniu, że wszystko działa zgodnie z oczekiwaniami, możesz usunąć oryginalny dysk maszyny wirtualnej).

Chociaż powyższe działało dla mnie świetnie wiele razy, wydaje się, że potrzeba kilku dodatkowych kroków, jeśli używa się LVM. (UWAGA: Jeśli używana jest LVM, możesz po prostu dodać nowy dysk o pożądanym rozmiarze, a następnie dodać ten dysk do grupy woluminów.) W CentOS 6.6, gdzie używana jest LVM, musiałem również zwiększyć przestrzeń w LVM. Więc po uruchomieniu nowego dysku utworzonego powyżej, zrobiłem coś w tym kierunku (różne części tego będą się różnić w zależności od nazw twojej instalacji):

  1. Uzyskaj informacje o konfiguracji LVM:

    # pvs
      PV         VG          Fmt  Attr PSize  PFree
      /dev/sda2  vg_rhel6bm1 lvm2 a--  31.51g    0 
    # vgs
      VG          #PV #LV #SN Attr   VSize  VFree
      vg_rhel6bm1   1   2   0 wz--n- 31.51g    0 
    # lvs
      LV      VG          Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lv_root vg_rhel6bm1 -wi-ao---- 28.31g
      lv_swap vg_rhel6bm1 -wi-ao----  3.20g
    
  2. Rozszerz objętość fizyczną (PV) (grupa objętości (VG) automatycznie odzwierciedli ten sam wzrost):

    # pvresize /dev/sda2
      Physical volume "/dev/sda2" changed
      1 physical volume(s) resized / 0 physical volume(s) not resized
    # pvs
      PV         VG          Fmt  Attr PSize  PFree
      /dev/sda2  vg_rhel6bm1 lvm2 a--  39.51g 8.00g
    # vgs
      VG          #PV #LV #SN Attr   VSize  VFree
      vg_rhel6bm1   1   2   0 wz--n- 39.51g 8.00g
    
  3. Rozszerz wolumin logiczny (LV):

    # lvextend /dev/vg_rhel6bm1/lv_root /dev/sda2
      Size of logical volume vg_rhel6bm1/lv_root changed from 28.31 GiB (7247 extents) to 36.31 GiB (9295 extents).
      Logical volume lv_root successfully resized
    # lvs
      LV      VG          Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lv_root vg_rhel6bm1 -wi-ao---- 36.31g
      lv_swap vg_rhel6bm1 -wi-ao----  3.20g
    
  4. Rozszerz system plików:

    Przed:

    # df -h
      Filesystem            Size  Used Avail Use% Mounted on
      /dev/mapper/vg_rhel6bm1-lv_root
                             28G   24G  3.1G  89% /
      tmpfs                 939M  232K  939M   1% /dev/shm
      /dev/sda1             477M   85M  368M  19% /boot
    

    Komenda:

    # resize2fs /dev/mapper/vg_rhel6bm1-lv_root
      resize2fs 1.41.12 (17-May-2010)
      Filesystem at /dev/mapper/vg_rhel6bm1-lv_root is mounted on /; on-line resizing required
      old desc_blocks = 2, new_desc_blocks = 3
      Performing an on-line resize of /dev/mapper/vg_rhel6bm1-lv_root to 9518080 (4k) blocks.
      The filesystem on /dev/mapper/vg_rhel6bm1-lv_root is now 9518080 blocks long.
    

    Po:

    # df -h
      Filesystem            Size  Used Avail Use% Mounted on
      /dev/mapper/vg_rhel6bm1-lv_root
                             36G   24G   11G  69% /
      tmpfs                 939M  232K  939M   1% /dev/shm
      /dev/sda1             477M   85M  368M  19% /boot
    
codniffer
źródło
Niezła odpowiedź! Witamy na stronie!
djsmiley2k - CoW
1

Oto jak zmieniłem rozmiar / zmniejszyłem / zmniejszyłem stały obraz VDI (mój proces jego rozszerzenia znajduje się w innej odpowiedzi w tym samym temacie):

Najpierw krótkie tło na temat tego, dlaczego tego potrzebowałem (ponieważ istnieje wiele scenariuszy zmniejszania VDI, z których niektóre mogą być niewykonalne przy takim podejściu): Wiele lat temu stworzyłem stały VDI dla gościa Windows Server i zmieniłem go na 600 GB. Nie pamiętam, dlaczego wybrałem ten rozmiar, ale na dzień dzisiejszy zużyłem tylko 100 GB u tego gościa i chcę odzyskać większość pozostałej przestrzeni. Tak więc w moim przypadku chcę zachować wszystkie dane gościa i chcę po prostu zwolnić nieużywane miejsce u gościa.

(Poniższe kroki pochodzą głównie z mojej pamięci o zrobieniu tego w ciągu ostatnich 2 godzin, więc przepraszam, jeśli coś przegapię).

  1. Określ, jak duży ma być nowy rozmiar. Oczywiście prawdopodobnie będziesz chciał zostawić gościa z dodatkową przestrzenią, która nie jest obecnie zajęta. Rozmiar musi być co najmniej taki sam, jak danych na dysku źródłowym / oryginalnym, w zaokrągleniu do najbliższej GB.
  2. Użyj VirtualBox, aby utworzyć nowy dysk o stałym rozmiarze o rozmiarze określonym w poprzednim kroku. Zrób to, otwierając Ustawienia VirtualBox dla maszyny wirtualnej gościa, przejdź do Storage, kliknij Kontroler HDD (np. „SATA”), a następnie kliknij „+”, aby dodać dysk twardy. Następnie skonfiguruj nowy dysk zgodnie z potrzebami.
  3. Pobierz gparted ISO na żywo i skonfiguruj maszynę wirtualną gościa, aby uruchamiała się z niego (ponownie Ustawienia pamięci masowej).
  4. Wykonaj kopię zapasową bieżącej pamięci maszyny wirtualnej gościa.
  5. Uruchom maszynę wirtualną gościa (powinna zostać uruchomiona w środowisku na żywo z partycjami). Z wnętrza środowiska podzielonego na części:

    1. Użyj aplikacji dzielonej, aby ustalić, który dysk jest „oryginalny”, a który „nowy”. Oryginał będzie miał co najmniej jedną partycję, a nowa będzie całkowicie pusta. (Zwykle „oryginalny” to pierwszy dysk, do którego przypisano / dev / sda, a „nowy” dysk to drugi dysk, do którego przypisano / dev / sdb.)
    2. Użyj aplikacji gparted, aby zmniejszyć partycję oryginalną / źródłową do żądanych rozmiarów. Pamiętaj, aby kliknąć przycisk „Zastosuj” po zaplanowaniu wszystkich operacji. (Może to zająć trochę czasu, w zależności od rozmiaru partycji i prędkości dysku).
    3. Użyj aplikacji dzielonej, aby utworzyć tablicę partycji na nowym dysku (Urządzenie -> Utwórz tablicę partycji ..., pozostaw typ jako MSDOS).
    4. Użyj aplikacji gparted, aby utworzyć identyczne partycje na nowym dysku. (Aby upewnić się, że są one takie same, wyciągnąłem szczegółowe informacje dla każdej partycji na oryginalnym dysku, używając opcji menu Partycja-> Informacje ... i zapisałem zrzut ekranu, aby użyć jej podczas tworzenia tej samej partycji ( s) na nowym / docelowym dysku.) Upewnij się, że:
      • Utwórz każdą docelową partycję tego samego rozmiaru co (nowo dostosowany) oryginał.
      • Ustaw dowolne flagi na partycjach, aby pasowały (być może trzeba to zrobić po utworzeniu partycji).
      • Ustaw dowolną etykietę na partycjach, aby dopasować.
      • (UWAGA: UUID zostanie ustawiony automatycznie, gdy dane zostaną skopiowane.)
    5. Kliknij przycisk „Zastosuj”, aby zatwierdzić wszystkie zmiany.
    6. Zapisz, który dysk jest „oryginalny”, a który „nowy”, i zanotuj numery odpowiednich partycji (np. / Dev / sda1 -> / dev / sdb1, / dev / sda2 -> / dev / sdb2, ...)
    7. Zamknij aplikację podzieloną na partycje.
    8. Otwórz terminal z uprawnieniami administratora (kliknij prawym przyciskiem myszy na pulpicie -> Terminale -> terminal z uprawnieniami administratora).
    9. Zakładając, że „oryginalny” dysk to / dev / sda, a „nowy” to / dev / sdb (jeśli nie, odpowiednio dostosuj następujące polecenie), to skopiujemy każdą partycję, pojedynczo. Dla każdej partycji zanotowanej w powyższym kroku wprowadź następujące polecenie w terminalu:

      # dd if=/dev/sda1 of=/dev/sdb1 status=progress bs=128M
      

      i poczekaj na zakończenie. Spowoduje to skopiowanie partycji 1 z oryginalnego dysku na partycję 1 na nowym dysku bajt po bajcie.
      Powtórz polecenie dla każdej pozostałej partycji:

      # dd if=/dev/sda2 of=/dev/sdb2 status=progress bs=128M
      # dd if=/dev/sda3 of=/dev/sdb3 status=progress bs=128M
      # ...
      

      Uwagi:

      • Może to zająć trochę czasu, w zależności od rozmiarów partycji, prędkości dysku na hoście itp.).
      • Jeśli na maszynie wirtualnej gościa jest przydzielone> 1 GB pamięci RAM, możesz zmienić parametr „bs” na „bs = 256M”, co może nieco przyspieszyć kopiowanie.
    10. W tym momencie powinieneś mieć nowy dysk o stałym rozmiarze z całą oryginalną zawartością i mniejszym plikiem VDI niż oryginał. Możesz zamontować nowy dysk w środowisku enkartowanym na żywo i sprawdzić, czy dane tam są.
    11. Zamknij maszynę wirtualną gościa (gparted live) i usuń ISO partycji gparted z napędu VM.
  6. Przejdź do ustawień VBox dla maszyny wirtualnej gościa, przejdź do Storage i usuń oryginalny dysk z listy (kliknij prawym przyciskiem myszy i wybierz „Usuń załącznik”). To powinno pozostawić nowo utworzony dysk dla maszyny wirtualnej. Uwaga: tym krokiem jest po prostu usunięcie dysku z konfiguracji maszyny wirtualnej gościa - oryginalny dysk maszyny wirtualnej gościa (tj. Duży VDI) jest nadal dostępny na maszynie hosta.
  7. Ostatnim krokiem, który musiałem zrobić dla gościa Windows, było ustawienie / naprawa MBR i / lub BCD. (Nie wiem, czy coś takiego jest wymagane dla gościa Linuksa, ponieważ jeszcze tego nie zrobiłem). Jeśli po prostu uruchomiłem z nowego VDI, dostałem ekran błędu Windows Boot Mgr z tą zawartością (niestety nie zrobiłem tego Zrób zrzut ekranu, zanim naprawiłem problem):

    windows failed to start
    status 0xc000000e
    information A required device isn't connected or can't be accessed.
    
  8. Uzyskaj certyfikat ISO instalacji lub naprawy systemu Windows (najlepiej taki, który pasuje do wersji systemu operacyjnego) i skonfiguruj maszynę wirtualną gościa, aby uruchamiała się z niego (ponownie Ustawienia pamięci masowej).

  9. Uruchom maszynę wirtualną gościa i wybierz opcję rozruchu z dysku CD / DVD.

    1. Ponieważ każda wersja instalacji / naprawy systemu Windows jest inna, nie mogę tutaj podać dokładnych kroków dla wszystkich. Ale chodzi o to, aby wybrać opcję „Napraw” i znaleźć drogę do wiersza polecenia. W moim przypadku Windows Server 2012 musiałem: (a) wybrać język / ustawienia regionalne; (b) Wybierz „Napraw komputer” w lewym dolnym rogu; (c) Wybierz „Rozwiązywanie problemów”; (d) Wybierz „Wiersz polecenia”.
    2. Gdy znajdziesz się w wierszu polecenia, uruchom następujące polecenia (dzięki http://loverofcode.blogspot.com/2013/11/fixed-0xc000000e-boot-error.html za informacje!):

      > bootrec /fixmbr
      > bootrec /fixboot
      > bootrec /rebuildBcd
      

      To ostatnie polecenie powinno zlokalizować instalację systemu Windows i monit o dodanie jej do BCD. Odpowiedz „Y”.

    3. Wyjdź z wiersza polecenia, a następnie wyłącz maszynę wirtualną gościa.
  10. Przejdź do Ustawień VBox dla maszyny wirtualnej gościa, przejdź do Storage i usuń Windows Install / Repair ISO z napędu CD / DVD.
  11. Uruchom maszynę wirtualną i ciesz się!
  12. (Po potwierdzeniu, że wszystko działa zgodnie z oczekiwaniami, możesz usunąć oryginalny dysk maszyny wirtualnej).
codniffer
źródło
0

Podaję odpowiedź rozszerzoną na dowolny hostowany system operacyjny działający na dowolnym systemie operacyjnym hosta. Ta odpowiedź zakłada, że ​​chcesz zwiększyć rozmiar (aby rozszerzyć).

Uwaga: Jak wskazał djule5 (patrz komentarz tuż po pytaniu), modifyhdjest teraz znany jako modifymedium(ale pozostaje kompatybilny wstecz). Tutaj używam modifymedium.

1. Zamknij działającą maszynę wirtualną

Tak, ta odpowiedź dotyczy pliku VDI już używanego przez maszynę wirtualną VirtualBox.

2. Otwórz terminal na hoście, aby zmienić rozmiar obrazu dysku

Wiersz polecenia VBoxManage nie chce zmieniać rozmiaru obrazu dysku przy użyciu nazwy pliku VDI.

$ ls -s1 *.vdi
10260316160 my_disk_image.vdi

$ vboxmanage modifymedium my_disk_image.vdi --resizebyte 16260316160                                                                      VBoxManage: error: Cannot register the hard disk '/home/user/vm/my_disk_image.vdi' {181540c7-b791-4b2f-8e01-5feaff04a6eb} because a hard disk '/home/user/vm/my_disk_image.vdi' with UUID {181540c7-b791-4b2f-8e01-5feaff04a6eb} already exists
VBoxManage: error: Details: code NS_ERROR_INVALID_ARG (0x80070057), component VirtualBoxWrap, interface IVirtualBox, callee nsISupports
VBoxManage: error: Context: "OpenMedium(Bstr(pszFilenameOrUuid).raw(), enmDevType, enmAccessMode, fForceNewUuidOnOpen, pMedium.asOutParam())" at line 179 of file VBoxManageDisk.cpp

Dlatego określ identyfikator UUID obrazu dysku.

$ ls -s1 *.vdi
10260316160 my_disk_image.vdi

$ vboxmanage list hdds
UUID:           181540c7-b791-4b2f-8e01-5feaff04a6eb
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       /home/user/vm/my_disk_image.vdi
Storage format: VDI
Capacity:       10240 MBytes
Encryption:     disabled

Zwiększ rozmiar obrazu dysku.

$ vboxmanage modifymedium 181540c7-b791-4b2f-8e01-5feaff04a6eb --resizebyte 16260316160
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

3. Użyj narzędzia do partycjonowania, aby rozszerzyć partycję logiczną

Uruchom hostowaną maszynę wirtualną. Następnie użyj narzędzia do partycjonowania .

Niektóre narzędzia dla hostowanego GNU / Linux:

Jeśli hostowany system korzysta z systemu Windows:

4. Sprawdź wolne miejsce na partycji

Rozmiar pliku VDI (w systemie hosta) mógł się nie zmienić, ponieważ maszyna wirtualna nie wykorzystała jeszcze dodatkowej ilości miejsca. Baw się dobrze.

olibre
źródło
-1

To działałoby dla mnie i powinno określać całkowitą pojemność dysku twardego. Nie przestrzeń, którą musimy zwiększyć ...

C: \ Program Files \ Oracle \ VirtualBox> VBoxManage.exe modyfikuj „D: \ Virtual Machine \ VirtualBox VMs \ Windows 7 (FileZilla Server) \ Windows 7 (FileZilla Server) .vdi” - rozmiar 15360

saman
źródło