Najszybszy sposób na scalanie migawek w VirtualBox?

48

Mam vdi z całkiem dużą liczbą migawek - powiedzmy 50 lub 70 migawek. Chcę mieć jeden zwykły vdi z bieżącym stanem. Te migawki zajmują zbyt dużo miejsca na dysku i nie są potrzebne jako migawki.

Wiem to, jeśli zadzwonię

VBoxManage clonehd thedisk.vdi thedisk-full.vdi
(50-70 times) VBoxManage clonehd {uuid-of-snapshot}.vdi thedisk-full.vdi --existing

Dostanę co chcę. Ale zajmuje to bardzo dużo czasu (ponad 5 godzin, biorąc pod uwagę mój sprzęt i początkowy rozmiar dysku 16G).

I, oczywiście, próbowałem VBoxManage snapshot deletei jest to dziwne: nie działa na zatrzymanym komputerze, może zawieść na uruchomionym komputerze, a gdy raz zawiedzie, zawiedzie wszystkie kolejne połączenia.

Czy istnieje sposób na szybsze utworzenie zwykłego vdi z wielu migawek?

$ VBoxManage --version
3.2.14r75509

(zadał to na ServerFault, ale zdecydował, że to miejsce jest bardziej odpowiednie dla tego pytania)

Andrey Regentov
źródło
Polecenie, którego używasz, to polecenie, którego chcesz użyć, nie ma szybszego sposobu.
Ramhound
A co z eksportowaniem całej maszyny wirtualnej? Czy jego vdi będzie zawierało to, czego chcę?
Andrey Regentov
Powinieneś spróbować. W końcu jakakolwiek inna metoda nadal potrwa ze względu na rozmiar maszyny wirtualnej.
Ramhound

Odpowiedzi:

53

Znalazłem rozwiązanie. Jest to tak proste, jak ostatni krok z poleceń, które tu napisałem. To znaczy

VBoxManage clonehd fullpath/{uuid-of-last-snapshot}.vdi thedisk-full.vdi

Powinienem więc sklonować tylko ostatnią migawkę, a nie każdą migawkę z łańcucha. I to jest o tysiące procent szybsze.

Uuid można znaleźć w VBoxManage list hdds | grep VmName | tail

W interfejsie GUI (w systemie Windows) wybierz maszynę wirtualną, wybierz Migawki w prawym górnym rogu, kliknij prawym przyciskiem myszy żądaną migawkę, wybierz Klonuj ... i wybierz Pełny klon w oknie dialogowym.

Andrey Regentov
źródło
Dzięki, ale to nie działa w mojej konfiguracji, mówi, że obraz już istnieje. Czy zapomniałeś o - istniejącym?
Andy,
3
jeśli masz już thedisk-full.vdiplik na dysku, najpierw zmień nazwę w poleceniu na coś podobnego thedisk-full-new.vdi.
Andrey Regentov
Oczywiście pełna ścieżka musi być tą, która jest zarejestrowana w VirtualBox. Dowiązania symboliczne nie działają, ponieważ VBox musi wyszukać wszystkie migawki
Andy
nie jestem pewien, co robi ogon, masz na myśli „ tail -1”?
eckes
1
W VirtualBox 5 clonehdjest przestarzały i pozostawiony do kompatybilności wstecznej, użyj clonemediumzamiast tego.
George Sovetov,
22

Oto technika (przetestowana na VirtualBox 4.3.4), która używa polecenia „Klonuj” do scalania i kompaktowania wszystkich migawek na nowej maszynie wirtualnej zawierającej pojedynczy plik VDI:

  1. Zmień nazwę maszyny wirtualnej, aby móc ponownie użyć jej bieżącej nazwy dla sklonowanej maszyny wirtualnej (możesz zmienić nazwę maszyny wirtualnej na karcie „Podstawowe” w ustawieniach „Ogólne”).

  2. Kliknij maszynę wirtualną prawym przyciskiem myszy i uruchom polecenie „Klonuj ...”:

    • Ustaw nazwę na oryginalną nazwę maszyny wirtualnej.
    • Zaakceptuj pozostałe wartości domyślne, tj. Typ klonu: „Pełny klon”; Migawki: „Bieżący stan maszyny”.
  3. Usuń starą maszynę wirtualną (kliknij maszynę wirtualną prawym przyciskiem myszy i uruchom polecenie „Usuń ...”).

Stuart Rackham
źródło
Począwszy od VirtualBox 6.0.8, to nadal działa.
Paul Sturm
3

Możesz spróbować wyeksportować do OVF, a następnie zaimportować z powrotem wygenerowany plik.

Jak wyjaśniono tutaj :

OVF nie może opisywać migawek wykonanych dla maszyny wirtualnej. W rezultacie podczas eksportowania maszyny wirtualnej, która ma migawki, eksportowany jest tylko bieżący stan maszyny, a obrazy dysków podczas eksportu będą miały stan „spłaszczony” identyczny z bieżącym stanem maszyny wirtualnej.

W rezultacie będziesz mieć sklonowaną maszynę wirtualną z bieżącym stanem bez innych migawek.

StreakyCobra
źródło
Pytam o vdis, ponieważ nie można wyeksportować komputera - był zepsuty (stan niedostępny po ponownym uruchomieniu hosta), a wszystko, co miałem, to kilka VDI - dysk i około pięćdziesiąt migawek.
Andrey Regentov
0

Ta operacja oznacza odczyt i zapis bardzo dużych plików na tym samym dysku fizycznym. Jedynym sposobem na przyspieszenie jest umieszczenie tych plików na różnych dyskach, zmieniając ścieżki w poleceniu VBoxManage. Jeśli urządzenie ma tylko jeden dysk, możesz użyć zewnętrznego napędu USB lub nawet dysku w innym komputerze poprzez udział sieciowy (w zależności od prędkości twojej sieci)

Golimar
źródło
1
Zazwyczaj sieć jest o rząd wielkości wolniejsza niż wewnętrzny interfejs dysku twardego, więc prawdopodobnie nie przyspieszyłoby to procesu.
Andrey Regentov
-2

Niektóre mają sieć LAN 10 Gib / s, więc może przesyłać więcej niż jeden gigabajt na sekundę, więc nie będzie wąskim gardłem.

Niektóre mają sieć LAN 1 Gib / s, więc może przesyłać więcej niż 100 megabajtów na sekundę, więc nie będzie wąskim gardłem (chyba że masz naprawdę szybki dysk SSD).

Dyski mechaniczne, gdy odczytują i zapisują na tym samym dysku w tym samym czasie (lub znacznie pofragmentowane), zmniejszają się o około 20 megabajtów na sekundę, podczas gdy na niefragmentowanych tylko do odczytu lub tylko zapisu można przejść do ponad 100 megabajtów na sekundę.

Mówisz, że LAN działa wolniej, ale nie o USB (2.0, nie wspominając o 1.1 lub 1.0) jest znacznie wolniejszy.

Sugerowałbym: użyj USB 3.1 Gen2 Type C lub eSATA / SATA / SAS

Ale zawsze: użyj drugiego wystarczająco szybkiego dysku.

I zawsze: klonowanie na inny dysk i kopiowanie pliku jest znacznie szybsze niż przy użyciu tylko jednego dysku, chyba że jest to dysk SSD lub dysk twardy z niezależnymi głowicami wielogłowicowymi (mogą jednocześnie czytać i zapisywać na dwóch miejsca na powierzchni, każda głowa ma własne ramię, bardzo drogie, około 9876 €).

Najlepiej jest sklonować tylko wirtualny dysk twardy w żądanym stanie, następnie sprawdzić, czy działa, a następnie PRZYWRÓCIĆ najwyższy poziom (usunie wszystkie migawki), a następnie usunąć dysk twardy z pamięci i podłączyć nowy.

Więc kroki, aby stracić wszystkie stare stany w schemacie migawek bez drzewa:

  1. Klonuj z jednego dysku twardego na drugi, unikaj wąskich gardeł
  2. Utwórz nowy komputer, podłącz ten dysk, odłącz go, skonfiguruj jako niezmienny
  3. Sprawdź, czy działa (ponieważ jest niewymienny), będziesz mieć ten sam stan
  4. Jeśli potrzebujesz, nie można go wyłączyć, odłącz go, powróć do normalnego itp
  5. Usuń stare migawki komputera (najpierw PRZYWRÓĆ)
  6. Usuń maszynę do testowania czasowego
  7. Skopiuj z powrotem na dysk dysk wirtualny
  8. Dołącz sklonowany dysk

Ale zawsze należy pamiętać, że migawki mogą być jak pełne drzewo, jeden węzeł może mieć więcej niż jedno dziecko, każde dziecko może mieć więcej niż jedno dziecko itp.

Aby pracować z drzewami snoapshotów, zawsze myśl o DELETE jako usuwaniu węzła bez wywoływania reszty węzłów (tylko stracić ten stan, ale nie ma odpoczynku, nie ma elementu nadrzędnego i żadnego elementu podrzędnego, dane zostaną scalone na wszystkich pierwszych sub poziom childs, tak powolny proces) i przy PRZYWRACANIU niszcząc wszystkie jego childs na wszystkich poziomach podrzędnych (tracąc wszystkie stany po tym, który przywrócisz, usuwa tylko pliki, tak naprawdę szybki proces, zaledwie kilka sekund).

To jest!

PD: Jak okropne nazwy VBOX nadał tym dwóm operacjom (usuń tylko jeden węzeł = USUŃ; usuń wszystkie węzły potomne na wszystkich poziomach podrzędnych = PRZYWRÓĆ)

Claudio
źródło
Przywracanie nie usuwa żadnych migawek, tylko bieżący (niezapisany) stan.
Melebius