GNU/Linux >> LINUX-Kenntnisse >  >> Linux

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

Zum späteren Nachschlagen, hier ist, wie ich schließlich vorgegangen bin, mit ein paar Kommentaren zu den verschiedenen Problemen oder Fallstricken, auf die ich gestoßen bin:

1. Booten Sie die Maschine mit einem Linux-Live-System

Der erste Schritt bestand darin, den Computer, der die zu erstellende Festplatte enthielt, unter Verwendung eines Linux-Live-Systems zu booten.

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

2. Imagen Sie die Festplatte mit dd und leiten Sie die Daten durch ssh

Dann habe ich den gesamten Festplatteninhalt mit dd in ein Datei-Image auf meinem lokalen Server kopiert und die Daten durch ssh leiten :

$ dd if=/dev/hdX bs=4k conv=noerror,sync | ssh -c blowfish [email protected] 'dd of=myfile.dd'

Ein paar Kommentare hier:Diese Methode liest den gesamten Inhalt der Festplatte, daher kann es sehr lange dauern (ich habe 5 Stunden für eine 80-GB-Festplatte gebraucht). Der Engpass ist nicht das Netzwerk, sondern wirklich die Lesegeschwindigkeit der Festplatte. Bevor Sie die Kopie starten, 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 -i überprüft werden und indem Sie einen Test mit hdparm -Tt /dev/hdX ausführen ).

HINWEIS:dd gibt keinen Fortschritt der Operation aus, aber wir können ihn dazu zwingen, indem wir USR1 senden Signal an dd PID von einem anderen Terminal verarbeiten:

$ kill -USR1 PIDofdd

Hinweis:Neuere Versionen von dd unterstützen die status=LEVEL Option (man dd )

   status=LEVEL
          The  LEVEL of information to print to stderr; 'none' suppresses everything but error messages, 'noxfer' suppresses
          the final transfer statistics, 'progress' shows periodic transfer statistics

3. Fordern Sie den ungenutzten Speicherplatz zurück

An diesem Punkt wird der Quellcomputer nicht mehr benötigt und wir arbeiten ausschließlich auf dem Zielserver (der ebenfalls Linux ausführt). VirtualBox wird verwendet, um das Raw-Disk-Image in das VHD-Format zu konvertieren, aber vorher können wir die nicht verwendeten Blöcke auf Null setzen, sodass VirtualBox ihnen in der endgültigen Datei keinen Platz zuweist.

Dazu habe ich die Bilder 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

HINWEIS:Der Offset, der den Beginn der Partition innerhalb des Disk-Image angibt, kann mit parted abgerufen werden auf der Bilddatei:

$ 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

HINWEIS2:Der standardmäßige NTFS-Treiber des Linux-Kernels bietet schreibgeschützten Zugriff, daher ist es notwendig, den Benutzerbereich ntfs-3g zu installieren und zu verwenden Treiber oder das Schreiben auf die Festplatte führt zu einem Fehler!

4. Erstellen Sie das VHD-Image mit VBoxManage

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

VBoxManage convertfromraw myfile.dd myfile.vhd --format VHD

Ich habe versucht, genau dasselbe wie das OP zu tun (während ich eine Windows-Installation rettete) und am Ende 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

Ein Ansatz besteht darin, ein paar praktische Technologien zu verwenden:VirtualBox und ntfsprogs Paket.

Neuere Versionen von VirtualBox ermöglichen Ihnen das Erstellen von VHD-Festplattendateien, während ntfsprogs liefert den ntfsclone Dienstprogramm. Wie der Name schon sagt, ntfsclone klont NTFS-Dateisysteme, und ich glaube, dass dies auf Dateisystemebene geschieht, indem unbenutzte Festplattenblöcke übersprungen werden.

Erstellen Sie also zunächst eine neue VM in VirtualBox und stellen Sie ein neues, leeres VHD-Dateilaufwerk dafür bereit. Das VHD-Laufwerk muss nur so groß sein wie die Größe der Daten, die auf dem physischen Laufwerk verwendet werden, das Sie klonen möchten (na ja, machen Sie es ein bisschen größer, um etwas Spielraum zu haben).

Suchen Sie als Nächstes eine Linux-Live-CD, die den ntfsprogs enthält Paket sowie 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 Sie sshd innerhalb der VM, damit Sie Befehle darauf remote ausführen können. Partitionieren Sie das leere VHD-Laufwerk entsprechend, indem Sie das Partitionierungstool verwenden, das Sie bevorzugen (ich mag das einfache alte fdisk , aber ich bin etwas von der alten Schule).

Starten Sie mit einer anderen Kopie der Linux-Live-CD den Computer, der die physische Festplatte enthält, die Sie klonen möchten. Ich gehe davon aus, dass die VirtualBox-VM und diese Maschine über das Netzwerk miteinander erreichbar sind. Führen Sie auf diesem Computer den folgenden Befehl aus (alles in einer Zeile):

ntfsclone --save-image -o - /dev/sdXX |
    ssh [email protected] 'ntfsclone --restore-image --overwrite /dev/sdYY -'

wo:

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

Erläuterung:Das erste ntfsclone Der Befehl in der Pipeline extrahiert ein Bild des Quell-NTFS-Dateisystems und sendet es durch den SSH-Tunnel, während der zweite ntfsclone Der Befehl empfängt das Image und stellt es auf dem VHD-Laufwerk wieder her.

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

Eine letzte Sache, die Sie vielleicht tun möchten, ist, Windows chkdsk auszuführen auf dem VHD-Laufwerk, nur um sicherzustellen, dass das Klonen keine Probleme verursacht (es hätte nicht sein sollen, aber hey, ich bin ein bisschen paranoid in Bezug auf diese Dinge).


Linux
  1. So erhöhen Sie die Inode-Nummer der Festplatte in Linux

  2. So erstellen Sie ein Video aus PDF-Dateien unter Linux

  3. So erstellen Sie einen bootfähigen Linux-USB-Stick über die Linux-Befehlszeile

  4. Linux – Wie erstelle ich eine formatierte Partitions-Image-Datei von Grund auf neu?

  5. So erstellen Sie ein benutzerdefiniertes Image aus einem Docker-Container

So erstellen Sie ein Video aus Bildern unter Linux

So erstellen Sie Live-USB von Antergos Linux

Wie kann ich eine VHD-Datei (Virtual Hard Disk) in Ubuntu Linux mounten?

So verschlüsseln Sie das Root-Dateisystem unter Linux

So erstellen Sie Festplattenpartitionen unter Linux

So erstellen Sie Dateien in einem Linux-System:Ein ultimativer Leitfaden