Jak utworzyć obraz dysku VHD z systemu Linux na żywo?

28

Po raz kolejny muszę skorzystać z pomocy ekspertów w SuperUser, ponieważ moje inne źródła (głównie Google ;-)) nie okazały się bardzo pomocne ...

W zasadzie chciałbym stworzyć obraz VHD dysku fizycznego, który ma być zarchiwizowany / dostępny / może nawet zamontowany na maszynie wirtualnej. Teraz istnieje kilkadziesiąt artykułów i samouczków na temat tego, jak to zrobić w sieci, ale żaden z nich nie spełnia dokładnie warunków, które chciałbym osiągnąć:

  • Chciałbym plik docelowy być Obraz VHD , ponieważ Windows 7 może montować go natywnie, nawet przez sieć i wiele innych programów może z niego korzystać (VirtualBox, ...)
  • Dysk, który próbuję obrazować, zawiera instalację systemu Windows XP, więc teoretycznie mógłbym użyć disk2vhd narzędzie, ale chciałbym znaleźć rozwiązanie, które nie wymaga uruchamiania systemu Windows XP zainstaluj (tzn. zachowaj dysk tylko do odczytu)
  • Szukałem więc rozwiązania obejmującego coś w rodzaju system na żywo (działa z pamięci USB lub sieci)

Jednak wszystkie rozwiązania, z którymi się zetknąłem, wykorzystują disk2vhd lub użyj dd polecenie pod linuxem, które wykonuje pełną kopię dysku (tj. nawet puste bloki) i nie wysyła pliku VHD. Czy pod Linuksem istnieje narzędzie / program, który może bezpośrednio utworzyć plik VHD? Czy możliwe jest przekonwertowanie surowego obrazu dysku utworzonego przy użyciu dd na plik VHD, bez przydzielania miejsca na puste bloki? Jak postępowałbyś?

Jak zawsze, wszelkie rady i komentarze są bardzo cenione !!

Federico
źródło
BSD mają narzędzie o nazwie mkimg, które może tworzyć obraz vhd wśród innych formatów.
julian

Odpowiedzi:

29

Dla przyszłego odniesienia, oto jak w końcu postępowałem, z kilkoma komentarzami na temat różnych napotkanych problemów lub pułapek:

1. Uruchom komputer z systemem Linux na żywo

Pierwszym krokiem było uruchomienie komputera zawierającego dysk na obraz przy użyciu systemu Linux na żywo.

UWAGA: Moim pierwszym pomysłem było użycie dysku Ubuntu Live USB, ale   komputer nie obsługiwał uruchamiania z USB, więc stwierdziłem, że jest łatwiejszy w użyciu   stary Knoppix live CD .

2. Obraz dysku za pomocą dd i przepuść dane ssh

Następnie skopiowałem całą zawartość dysku na obraz pliku na moim lokalnym serwerze za pomocą dd i przesyłanie danych przez potok ssh:

$ dd if = / dev / hdX bs = 4k conv = noerror, sync | ssh -c blowfish myuser @ myserver 'dd of = myfile.dd'

Kilka komentarzy tutaj: ta metoda odczyta całą zawartość dysku, więc może to zająć bardzo dużo czasu (zajęło mi to 5 godzin na dysku 80 GB). Wąskim gardłem nie jest sieć, ale szybkość odczytu dysku. Przed uruchomieniem kopii radzę sprawdzić parametry BIOS / dysku / systemu, aby upewnić się, że dysk i płyta główna działają z najwyższą możliwą prędkością (można to sprawdzić za pomocą polecenia hdparm -i i przeprowadzając test za pomocą hdparm -Tt /dev/hdX ).

UWAGA: dd nie generuje postępu operacji, ale możemy zmusić go do tego, wysyłając USR1 sygnał do dd przetwarzaj PID z innego terminala:

$ kill -USR1 PIDofdd

3. Odzyskaj niewykorzystane miejsce

W tym momencie maszyna źródłowa nie jest już potrzebna i będziemy pracować wyłącznie na serwerze docelowym (również z systemem Linux). VirtualBox zostanie użyty do konwersji surowego obrazu dysku na format VHD, ale zanim to zrobimy, możemy wyzerować nieużywane bloki, aby VirtualBox nie przydzielił im miejsca w ostatecznym pliku.

W tym celu zamontowałem obrazy jako urządzenie pętli zwrotnej:

$ mount -o loop,rw,offset=26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd /mnt/tmp_mnt
$ cat /dev/zero > zero.file
$ rm zero.file

UWAGA: Przesunięcie wskazujące początek partycji w obrazie dysku można uzyskać za pomocą parted w pliku obrazu:

$ parted /mnt/mydisk/myfile.dd
(parted) unit
Unit?  [compact]? B
(parted) print
Model:  (file)
Disk /mnt/mydisk/myfile.dd: 80026361856B
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start         End           Size          Type      File system  Flags
 1      32256B        21936821759B  21936789504B  primary   ntfs         boot
 2      21936821760B  80023749119B  58086927360B  extended               lba
 5      26608813056B  80023749119B  53414936064B  logical   ntfs

UWAGA2: Domyślny sterownik NTFS jądra Linux zapewnia dostęp tylko do odczytu, dlatego konieczne jest zainstalowanie i użycie przestrzeni użytkownika ntfs-3g sterownik lub zapis na dysku spowoduje błąd!

4. Utwórz obraz VHD przy użyciu VBoxManage

W tym momencie możemy użyć narzędzi VirtualBox, aby przekonwertować surowy obraz na plik VHD:

VBoxManage convertfromraw myfile.dd myfile.vhd --format VHD
Federico
źródło
powinieneś być w stanie zamontować obraz vhd za pomocą vdfuse lub qemu-nbd lub konwertowanie go na pliki .img (więcej informacji: askubuntu.com/questions/19430/… )
Francesco
Na wolnej maszynie szyfrowanie ssh może być wąskim gardłem. Rozważ użycie netcat (man nc), jeśli nie potrzebujesz szyfrowania.
Jeremy
Zapomniałeś CD na zamontowanym dysku przed utworzeniem pliku zero: mount -o loop, rw, offset = 26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd / mnt / tmp_mnt; cd / mnt / tmp_mnt; cat / dev / zero & gt; zero.file; rm zero.plik; Możesz także użyć pv zamiast dd, aby pokazać natychmiastowy postęp.
Smeterlink
9

Próbowałem zrobić dokładnie to samo, co OP (podczas ratowania instalacji systemu Windows) i skończyło się na stworzeniu nowego narzędzia, ntfsclone2vhd.

Po prostu zrobiłbyś coś takiego:

ntfsclone --save-image -o - /dev/sdXX | ntfsclone2vhd - /mnt/usb/output.vhd
Yirkha
źródło
1
3 lata później, ale ta strona jest najlepszym trafieniem Google dla odpowiednich słów kluczowych, więc może pomóc niektórym biednym duszom w przyszłości.
Yirkha
2
TO ROZWIĄZANIE MUSI BYĆ GŁOSOWANE NA GÓRĘ. Jest to zdecydowanie najłatwiejsze rozwiązanie (pasek musi make kopie Linuksa) znalazłem w wielu godzinach wyszukiwania. Bravo za przejęcie inicjatywy Yirkha!
user66001
3

Jedną z metod jest użycie kilku przydatnych technologii: VirtualBox i ntfsprogs pakiet.

Najnowsze wersje VirtualBox pozwalają na tworzenie plików dysku twardego VHD ntfsprogs zapewnia ntfsclone użyteczność. Jak sama nazwa wskazuje, ntfsclone klonuje systemy plików NTFS i wierzę, że robi to na poziomie systemu plików, pomijając nieużywane bloki dyskowe.

Aby rozpocząć, utwórz nową maszynę wirtualną w VirtualBox i przygotuj dla niej nowy, pusty dysk VHD. Dysk VHD musi być tak duży, jak rozmiar danych używanych na dysku fizycznym, który chcesz sklonować (a właściwie, uczynić go trochę większym, aby pozwolić na jakiś pokój ruchów).

Następnie znajdź Linux Live CD, który zawiera ntfsprogs pakiet, jak również openssh-server. lubię Systemowy dysk ratunkowy do tego, ale prawie każda płyta live CD oparta na Debianie lub Ubuntu również powinna działać.

Uruchom VirtualBox VM za pomocą CD Live Linux i uruchom sshd w maszynie wirtualnej, dzięki czemu będziesz mógł wykonywać na niej polecenia zdalnie. Podziel pusty dysk VHD odpowiednio, używając dowolnego narzędzia do partycjonowania, które wolisz (lubię zwykłe stare fdisk, ale jestem trochę stara szkoła).

Przy innej kopii Linux Live CD uruchom komputer zawierający dysk fizyczny, który chcesz sklonować. Zakładam, że VirtualBox VM i ta maszyna są dostępne dla siebie przez sieć. Na tym komputerze wykonaj następujące polecenie (wszystkie w jednej linii):

ntfsclone --save-image -o - /dev/sdXX |
    ssh root@VirtualBox-VM 'ntfsclone --restore-image --overwrite /dev/sdYY -'

gdzie:

  • /dev/sdXX to nazwa urządzenia (na komputerze lokalnym) dysku fizycznego, który chcesz sklonować, oraz
  • /dev/sdYY to nazwa urządzenia (w maszynie wirtualnej) dysku docelowego VHD.

Wyjaśnienie: Pierwszy ntfsclone polecenie w potoku wyodrębnia obraz źródłowego systemu plików NTFS i wysyła go przez tunel ssh, podczas gdy drugi ntfsclone polecenie odbiera obraz i przywraca go na dysk VHD.

Po zakończeniu operacji plik VHD powinien zawierać dokładny klon oryginalnego dysku fizycznego dla pliku (z wyjątkiem błędów sprzętowych, takich jak uszkodzone sektory, które mogą spowodować przedwczesne przerwanie procesu).

Ostatnią rzeczą, którą możesz zrobić, jest uruchomienie systemu Windows chkdsk na dysku VHD, aby upewnić się, że klonowanie nie wprowadziło żadnych problemów (nie powinno mieć, ale hej, jestem trochę paranoiczny w tych sprawach).

Steven Monday
źródło
Cześć, bardzo dziękuję za zaproponowane rozwiązanie! W końcu użyłem innej metody, ponieważ miałem kilka partycji na dysku do tworzenia kopii zapasowych i nie mogłem łatwo użyć VirtualBox na komputerze do tworzenia kopii zapasowych (zobacz moją odpowiedź po szczegóły), ale twoja sugestia użycia VirtualBox i ssh okazała się bardzo przydatna!
Federico
1

(Wiem, że to stary post, ale może to przynajmniej pomoże innym).

Czy naprawdę musisz być w stanie stworzyć obraz pod Linuksem? Myślę, że próbujesz wykonać kopię zapasową dysków twardych Windows do VHD. Nie sądzę, aby systemy plików Linux mogły być hermetyzowane w kontenerze VHD.

Wolny SysInternals narzędzie o nazwie Disk2vhd utworzy dyski VHD aktualnie działającego systemu Windows XP lub nowszego. Powinno to również działać w przypadku obrazowania dysków zamontowanych na USB.

Bernard
źródło
0

Staram się też klonować system Linux na żywo.

Nadal nie ma idealnych rozwiązań. Zaproponuj 2 sposoby, które możesz spróbować:

(1) VMware Converter (bezpłatny)

Musisz zainstalować hiperwizor vsphere (bezpłatny) jako miejsce docelowe.

Zrobiłem to kilka dni temu, nie miałem żadnych sukcesów. Zgaduję, że instaluję vSphere na VirtualBox.

Ref tutaj: http://xrubenx.blogspot.com.au/2010/01/vmware-converter-standalone.html

(2) Użyj tego http://www.r1soft.com/tools/linux-hot-copy/

Spróbuję hotcopy R1Soft w ten weekend.

NelsonT
źródło
Z tego powodu nie będę próbował kopiować na gorąco wiki.r1soft.com/display/LTR1D/hcp-setup
NelsonT
0

Możesz także użyć płyty CD z oknami na żywo. To nie jest oficjalne od Microsoft, ale działa. Możesz umieścić go na dysku CD lub USB.

Smeterlink
źródło