Wie erstelle ich ein VHD-Image von einem Linux-Live-System?

29

Ich muss noch einmal auf die Experten hier bei SuperUser zurückgreifen, da sich meine anderen Quellen (hauptsächlich Google ;-)) nicht als sehr hilfreich erwiesen haben ...

Im Grunde möchte ich ein VHD-Image eines physischen Laufwerks erstellen, das archiviert, auf das zugegriffen wird oder das möglicherweise sogar in einer virtuellen Maschine bereitgestellt wird. Jetzt gibt es Dutzende von Artikeln und Tutorials, wie man das im Web macht, aber keine, die genau die Bedingungen erfüllen, die ich erreichen möchte:

  • Ich möchte, dass die Zieldatei ein VHD-Image ist , da Windows 7 es nativ einbinden kann, sogar über das Netzwerk, und viele andere Programme können es verwenden (VirtualBox, ...)
  • Der Datenträger, auf dem ich ein Image erstellen disk2vhdmöchte, enthält eine Windows XP-Installation. Theoretisch könnte ich das Dienstprogramm verwenden, aber ich möchte eine Lösung finden, bei der der Start der Windows XP- Installation nicht erforderlich ist (dh der Datenträger muss schreibgeschützt bleiben) )
  • Daher suchte ich nach einer Lösung für ein Live-System (das von einem USB-Stick oder einem Netzwerk aus ausgeführt wird).

Alle Lösungen, auf die ich gestoßen bin, verwenden jedoch entweder disk2vhdden ddBefehl unter Linux, der eine vollständige Kopie der Festplatte (dh sogar leere Blöcke) erstellt und keine VHD-Datei ausgibt. Gibt es ein Tool / Programm unter Linux, das direkt eine VHD-Datei erstellen kann? Oder ist es möglich, ein mit dd erstelltes Raw-Disk-Image in eine VHD-Datei zu konvertieren, ohne Platz für die leeren Blöcke zu reservieren? Wie würden Sie vorgehen?

Wie immer wird jeder Rat oder Kommentar sehr geschätzt !!

Federico
quelle
Die BSDs haben ein Tool namens mkimg, das unter anderem ein vhd-Image erstellen kann.
Juli

Antworten:

30

Zum späteren Nachschlagen, hier ist, wie ich schließlich vorging, mit ein paar Kommentaren zu den verschiedenen Problemen oder Fallstricken:

1. Booten Sie den Computer mit einem Linux Live-System

Der erste Schritt bestand darin, den Computer mit der Festplatte unter Verwendung eines Linux-Live-Systems als Image zu starten.

ANMERKUNG: Meine erste Idee war die Verwendung einer Ubuntu Live-USB-Festplatte, aber der Computer unterstützte das Booten von USB nicht. Ich fand es daher einfacher, eine alte Knoppix Live-CD zu verwenden .

2. Erstellen Sie ein Image der Festplatte ddund leiten Sie die Daten weiterssh

Dann kopierte ich den gesamten Festplatteninhalt in ein Dateibild auf meinem lokalen Server ddund leitete die Daten weiter durch ssh:

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

Ein paar Kommentare hier: Diese Methode liest den gesamten Inhalt der Festplatte, so dass es sehr lange dauern kann (es dauerte 5 Stunden für eine 80-GB-Festplatte). Der Engpass ist nicht das Netzwerk, sondern die Lesegeschwindigkeit. Vor dem Starten der Kopie empfehle ich, die BIOS- / Festplatten- / Systemparameter zu überprüfen, um sicherzustellen, dass die Festplatte und das Motherboard mit der höchstmöglichen Geschwindigkeit arbeiten (dies kann mit dem Befehl hdparm -iund durch Ausführen eines Tests mit überprüft werden hdparm -Tt /dev/hdX).

HINWEIS: Es ddwird kein Fortschritt der Operation ausgegeben, dies kann jedoch erzwungen werden, indem das USR1- Signal ddvon einem anderen Terminal an die Prozess-PID gesendet wird :

$ kill -USR1 PIDofdd

3. Fordern Sie den nicht verwendeten Speicherplatz zurück

Ab diesem Zeitpunkt wird der Quellcomputer nicht mehr benötigt und wir arbeiten ausschließlich auf dem Zielserver (auch unter Linux). VirtualBox wird verwendet, um das Raw-Image der Festplatte in das VHD-Format zu konvertieren. Zuvor können wir jedoch die nicht verwendeten Blöcke auf Null setzen, sodass VirtualBox ihnen in der endgültigen Datei keinen Speicherplatz zuweist.

Dazu habe ich die Images als Loopback-Gerät gemountet:

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

ANMERKUNG: Der Versatz, der den Beginn der Partition innerhalb des Festplattenabbilds angibt, kann mithilfe partedder folgenden Abbilddatei ermittelt werden:

$ 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

HINWEIS 2: Der standardmäßige Linux-Kernel-NTFS-Treiber bietet nur Lesezugriff. Daher muss der Userspace- ntfs-3gTreiber installiert und verwendet werden. Andernfalls führt das Schreiben auf die Festplatte zu einem Fehler.

4. Erstellen Sie das VHD-Image mit VBoxManage

Zu diesem Zeitpunkt können wir die VirtualBox-Dienstprogramme verwenden, um das Rohbild in eine VHD-Datei zu konvertieren:

VBoxManage convertfromraw myfile.dd myfile.vhd --format VHD
Federico
quelle
Sie sollten in der Lage sein, das vhd-Image mit vdfuseoder zu mounten qemu-nbdoder es in eine .img-Datei zu konvertieren (weitere Informationen: askubuntu.com/questions/19430/… )
Francesco
1
Auf einem langsamen Computer kann die Verschlüsselung des SSH ein Engpass sein. Verwenden Sie stattdessen netcat (man nc), wenn Sie die Verschlüsselung nicht benötigen.
Jeremy
2
Sie haben vergessen, eine CD auf die gemountete Festplatte zu kopieren, bevor Sie die Nulldatei erstellt haben: mount -o loop, rw, offset = 26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd / mnt / tmp_mnt; cd / mnt / tmp_mnt; cat / dev / zero> zero.file; rm zero.file; Sie können auch pv anstelle von dd verwenden, um den sofortigen Fortschritt anzuzeigen.
Smeterlink
1
Sie sollten wahrscheinlich einen größeren Block mit dd verwenden, um beispielsweise bs=4Mden Prozess erheblich zu beschleunigen.
Fritz
13

Ich habe versucht, genau das Gleiche wie das OP zu tun (während ich eine Windows - Installation rettete) und schließlich ein neues Tool dafür erstellt ntfsclone2vhd.

Sie würden dann einfach so etwas tun:

ntfsclone --save-image -o - /dev/sdXX | ntfsclone2vhd - /mnt/usb/output.vhd
Yirkha
quelle
1
3 Jahre zu spät zum Spiel, aber diese Seite ist der Top-Google-Hit für die relevanten Keywords, sodass sie möglicherweise auch in Zukunft einigen armen Seelen helfen wird.
Yirkha
2
DIESE LÖSUNG MUSS NACH OBEN GEWÄHLT WERDEN. Es ist bei weitem die einfachste Lösung (abgesehen davon, dass makeich Kopien von Linux haben muss), die ich in vielen Stunden der Suche gefunden habe. Bravo für die Initiative Yirkha!
user66001
3

Ein Ansatz besteht darin, einige nützliche Technologien zu verwenden: VirtualBox und das ntfsprogsPaket.

Neuere Versionen von VirtualBox ermöglichen das Erstellen von VHD-Festplattendateien, während ntfsprogsdas ntfscloneDienstprogramm bereitgestellt wird. Wie der Name schon sagt, werden ntfscloneNTFS-Dateisysteme geklont, und ich glaube, dass dies auf Dateisystemebene geschieht, wobei nicht verwendete Festplattenblöcke übersprungen werden.

Erstellen Sie zunächst eine neue VM in VirtualBox und stellen Sie ein neues, leeres VHD-Dateilaufwerk bereit. Das VHD-Laufwerk muss nur so groß sein wie die Datenmenge, die auf dem physischen Laufwerk verwendet wird, das Sie klonen möchten.

Suchen Sie als Nächstes eine Linux-Live-CD, die das ntfsprogsPaket sowie enthält openssh-server. Ich mag die System Rescue-CD dafür, aber so ziemlich jede Debian- oder Ubuntu-basierte Live-CD sollte auch funktionieren.

Booten Sie die VirtualBox-VM mit der Linux-Live-CD und starten sshdSie sie, damit Sie Befehle remote ausführen können. Partitionieren Sie das leere VHD-Laufwerk mit dem von Ihnen bevorzugten Partitionierungswerkzeug (ich mag es einfach alt fdisk, aber ich bin ein bisschen altmodisch ).

Starten Sie mit einer anderen Kopie der Linux-Live-CD den Computer mit der physischen Festplatte, die Sie klonen möchten. Ich gehe davon aus, dass die VirtualBox VM und dieser Computer über das Netzwerk miteinander verbunden sind. Führen Sie auf diesem Computer den folgenden Befehl aus (alle in einer Zeile):

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

woher:

  • /dev/sdXX ist der Gerätename (auf dem lokalen Computer) des physischen Laufwerks, das Sie klonen möchten, und
  • /dev/sdYY ist der Gerätename (in der VM) des VHD-Ziellaufwerks.

Erläuterung: Der erste ntfscloneBefehl in der Pipeline extrahiert ein Image des NTFS-Quelldateisystems und sendet es über den SSH-Tunnel. Der zweite ntfscloneBefehl empfängt das Image und stellt es auf dem VHD-Laufwerk wieder her.

Sobald der Vorgang abgeschlossen ist, sollte die VHD-Datei einen datei-genauen Klon der ursprünglichen physischen Festplatte enthalten (mit Ausnahme von Hardwarefehlern wie fehlerhaften Sektoren, die dazu führen können, dass der Vorgang vorzeitig abgebrochen wird).

Eine letzte Sache, die Sie vielleicht tun möchten, ist, ein Windows chkdskauf dem VHD-Laufwerk auszuführen , um sicherzustellen, dass das Klonen keine Probleme mit sich bringt (das sollte es nicht sein, aber hey, ich bin ein bisschen paranoid in diesen Dingen).

Steven Montag
quelle
Hallo, vielen Dank für Ihre Lösungsvorschläge! Am Ende habe ich eine andere Methode verwendet, da ich mehrere Partitionen auf der Festplatte zum Sichern hatte und VirtualBox auf der Maschine nicht einfach zum Sichern verwenden konnte (siehe meine Antwort für Details), aber Ihr Vorschlag, VirtualBox und ssh zu verwenden, erwies sich als sehr nützlich!
Federico
1

(Ich weiß, dass dies ein alter Beitrag ist, aber vielleicht hilft das zumindest anderen.)

Müssen Sie das Image wirklich unter Linux erstellen können? Ich denke, Sie versuchen, Windows-Festplatten auf VHD zu sichern. Ich glaube nicht, dass Linux-Dateisysteme in einem VHD-Container gekapselt werden können.

Ein kostenloses SysInternals- Dienstprogramm namens Disk2vhd erstellt virtuelle Laufwerke des derzeit unter Windows XP oder einem neueren System. Dies sollte auch für das Imaging von USB-Laufwerken funktionieren.

Bernard
quelle
0

Ich versuche kürzlich auch, ein Live-Linux-System zu klonen.

Immer noch keine perfekten Lösungen. Schlagen Sie zwei Möglichkeiten vor, die Sie ausprobieren können:

(1) VMware vConverter (kostenlos)

Sie müssen vsphere hypervisor (kostenlos) als Ziel installieren.

Ich habe in diesen Tagen kein Glück gehabt, Erfolg zu haben. Ich schätze, ich installiere vSphere auf einer VirtualBox.

Siehe hier: http://xrubenx.blogspot.com.au/2010/01/vmware-converter-standalone.html

(2) Verwenden Sie diese http://www.r1soft.com/tools/linux-hot-copy/

Ich werde R1Soft Hotcopy an diesem Wochenende ausprobieren.

NelsonT
quelle
Ich werde nicht versuchen, Hot-Copy aus diesem Grund, wiki.r1soft.com/display/LTR1D/hcp-setup
NelsonT
0

Sie können auch eine Live-CD mit Windows verwenden. Es ist nicht offiziell von Microsoft, funktioniert aber. Sie können es auf eine CD oder ein USB-Laufwerk legen.

Smeterlink
quelle