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).