Nachfolgend wird ein bewährtes Verfahren beschrieben, um ein Linux-System mithilfe von dd über eine SSH-Verbindung auf ein anderes System zu übertragen. Dieser Ansatz eignet sich insbesondere für Systeme, bei denen die vollständige Festplattenstruktur einschließlich Partitionstabelle, Bootloader, Dateisystemen, LVM, verschlüsselten Containern oder anderen nicht trivialen Konfigurationen unverändert übernommen werden soll. Da die Übertragung auf Blockebene erfolgt, wird keine Dateisysteminterpretation benötigt. Die Methode stellt daher eine zuverlässige und originalgetreue 1:1-Kopie sicher und bietet ein hohes Maß an Reproduzierbarkeit, beispielsweise für Backup-, Migrations- oder Notfallwiederherstellungszwecke.
Beide Systeme werden dabei in einem Live-Betrieb betrieben, sodass die zu klonenden Datenträger während des Vorgangs nicht eingebunden sind und keine Dateizugriffe stattfinden, die das Ergebnis beeinflussen könnten.
1. Vorbereitung des Quellsystems
- Start über ein Live-Linux: Das Quellsystem wird über ein Live-Linux wie Debian Live, Ubuntu Live oder SystemRescue gebootet.
- Terminal starten: Ein Terminalfenster wird geöffnet.
- Ermittlung der Quellfestplatte:
1 | lsblk |
Beispielausgabe:
1 2 3 4 | sda 500G ├─sda1 512M ├─sda2 4G └─sda3 495G |
In diesem Beispiel stellt /dev/sda das gesamte Quelllaufwerk dar.
- Installation des Werkzeugs pv, falls nicht vorhanden
1 | sudo apt update && sudo apt install pv |
2. Vorbereitung des Zielsystems
- Das Zielsystem wird ebenfalls über ein Live-Linux gestartet. Um die Daten auf dem Zielsystem direkt über SSH auf das Blockdevice des Zielsystems schreiben zu können, wird ein aktiver root Account und das Paket openssh-server auf dem Zielsystem benötigt.
- Start über ein Live-Linux: Das Quellsystem wird über ein Live-Linux wie Debian Live, Ubuntu Live oder SystemRescue gebootet.
- Terminal starten: Ein Terminalfenster wird geöffnet.
- Setzen eines Root-Passworts
1 | sudo passwd root |
- Installation des SSH-Servers
1 | sudo apt update && apt install openssh-server -y |
- Start des SSH-Dienstes
1 | sudo systemctl start ssh |
- Ermittlung der IP-Adresse
1 | ip a |
Beispiel:
1 | 192.168.1.150 |
- Identifikation des Zielmediums
1 | lsblk |
Beispiel:
1 | nvme0n1 |
3. Übernahme des SSH-Host-Keys auf dem Quellsystem (optional)
1 | sudo ssh-keyscan 192.168.1.150 >> ~/.ssh/known_hosts |
4. Automatische Größenbestimmung für pv
Zur exakten Anzeige von Fortschritt, Geschwindigkeit und ETA wird die Größe des Quelllaufwerks automatisch ermittelt:
1 2 | DISK="/dev/sda" DISKSIZE=$(blockdev --getsize64 "$DISK") |
5. Klonvorgang mit dd, SSH und pv
Auf dem Quellsystem ausführen:
1 2 3 4 5 6 7 | DISK="/dev/sda" DISKSIZE=$(blockdev --getsize64 "$DISK") sudo dd if="$DISK" bs=128M status=none \ | pv -s "$DISKSIZE" -tpreb \ | ssh -c aes128-gcm@openssh.com root@192.168.1.20 \ "dd of=/dev/nvme0n1 bs=128M status=progress oflag=direct" |
Dieser Befehl überträgt das Quelllaufwerk vollständig inklusive Partitionstabelle, Bootloader und allen Daten sektorweise auf das Zielmedium.
bs=128M– Blockgröße für Lese- und Schreibvorgänge: 128 MiB
– Reduziert I/O-Operationen, steigert Datendurchsatz im Vergleich zu Standardgröße (512 B)status=none– Unterdrückt dd-eigene Ausgabe
– Ermöglicht saubere Fortschrittsanzeige durchpvstatus=progress– Zeigt laufend die Anzahl der bisher übertragenen Bytes an
– Optional ergänzt durch blockweise Fortschrittsanzeigen
– Nützlich, wennpvnicht verwendet wird oder zusätzlich sichtbar sein soll
– Wird meist auf dem Zielsystem beidd of=...eingesetzt, während auf der Quellseitestatus=nonedie Ausgabe unterdrückt wird, damitpvdie Anzeige übernimmtpv -tpreb– Fortschrittsanzeige während der Übertragung:
-t→ Laufende Zeit
-p→ Fortschritt in Prozent
-r→ Aktuelle Datentransferrate
-e→ Voraussichtliche Restzeit (ETA)
-b→ Übertragene Bytes
by Speefak