{"id":8429,"date":"2025-11-23T12:52:12","date_gmt":"2025-11-23T11:52:12","guid":{"rendered":"https:\/\/speefak.spdns.de\/oss_lifestyle\/?p=8429"},"modified":"2025-11-24T11:51:16","modified_gmt":"2025-11-24T10:51:16","slug":"blockbasierte-linux-systemkopie-ueber-ssh-mit-dd-und-pv","status":"publish","type":"post","link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/blockbasierte-linux-systemkopie-ueber-ssh-mit-dd-und-pv\/","title":{"rendered":"Blockbasierte Linux-Systemkopie \u00fcber SSH mit dd und pv"},"content":{"rendered":"<p>Nachfolgend wird ein bew\u00e4hrtes Verfahren beschrieben, um ein Linux-System mithilfe von <code data-start=\"126\" data-end=\"130\">dd<\/code> \u00fcber eine SSH-Verbindung auf ein anderes System zu \u00fcbertragen. Dieser Ansatz eignet sich insbesondere f\u00fcr Systeme, bei denen die vollst\u00e4ndige Festplattenstruktur einschlie\u00dflich Partitionstabelle, Bootloader, Dateisystemen, LVM, verschl\u00fcsselten Containern oder anderen nicht trivialen Konfigurationen unver\u00e4ndert \u00fcbernommen werden soll. Da die \u00dcbertragung auf Blockebene erfolgt, wird keine Dateisysteminterpretation ben\u00f6tigt. Die Methode stellt daher eine zuverl\u00e4ssige und originalgetreue 1:1-Kopie sicher und bietet ein hohes Ma\u00df an Reproduzierbarkeit, beispielsweise f\u00fcr Backup-, Migrations- oder Notfallwiederherstellungszwecke.<br data-start=\"989\" data-end=\"992\" \/>Beide Systeme werden dabei in einem Live-Betrieb betrieben, sodass die zu klonenden Datentr\u00e4ger w\u00e4hrend des Vorgangs nicht eingebunden sind und keine Dateizugriffe stattfinden, die das Ergebnis beeinflussen k\u00f6nnten.<\/p>\n<hr \/>\n<h1><strong>1. Vorbereitung des Quellsystems<\/strong><\/h1>\n<ol>\n<li><strong>Start \u00fcber ein Live-Linux: <\/strong>Das Quellsystem wird \u00fcber ein Live-Linux wie Debian Live, Ubuntu Live oder SystemRescue gebootet.<\/li>\n<li><strong>Terminal starten: <\/strong>Ein Terminalfenster wird ge\u00f6ffnet.<\/li>\n<li><strong>Ermittlung der Quellfestplatte:<\/strong><\/li>\n<\/ol>\n<pre class=\"\">lsblk\r\n<\/pre>\n<p>Beispielausgabe:<\/p>\n<pre>sda    500G\r\n\u251c\u2500sda1 512M\r\n\u251c\u2500sda2 4G\r\n\u2514\u2500sda3 495G\r\n<\/pre>\n<p>In diesem Beispiel stellt \/dev\/sda das gesamte Quelllaufwerk dar.<\/p>\n<ol start=\"4\">\n<li><strong>Installation des Werkzeugs pv, falls nicht vorhanden<\/strong><\/li>\n<\/ol>\n<pre>sudo apt update &amp;&amp; sudo apt install pv\r\n<\/pre>\n<hr \/>\n<h1><strong>2. Vorbereitung des Zielsystems<\/strong><\/h1>\n<p>Das Zielsystem wird ebenfalls \u00fcber ein Live-Linux gestartet. Um die Daten auf dem Zielsystem direkt \u00fcber SSH auf das Blockdevice des Zielsystems schreiben zu k\u00f6nnen, wird ein aktiver root Account und das Paket openssh-server auf dem Zielsystem ben\u00f6tigt.<\/p>\n<ol>\n<li><strong>Setzen eines Root-Passworts<\/strong><\/li>\n<\/ol>\n<pre class=\"\">sudo passwd root\r\n<\/pre>\n<ol start=\"4\">\n<li><strong>Installation des SSH-Servers <\/strong><strong>und SSH root Login erlauben<\/strong><\/li>\n<\/ol>\n<pre class=\"lang:default decode:true\">sudo apt update &amp;&amp; apt install openssh-server -y\r\nsudo sed -i 's\/^PermitRootLogin.*\/PermitRootLogin yes\/' \/etc\/ssh\/sshd_config\r\nsudo systemctl restart sshd\r\n<\/pre>\n<ol start=\"6\">\n<li><strong>Ermittlung der IP-Adresse<\/strong><\/li>\n<\/ol>\n<pre>ip a\r\n<\/pre>\n<p>Beispiel:<\/p>\n<pre>192.168.1.150<\/pre>\n<ol start=\"7\">\n<li><strong>Identifikation des Zielmediums<\/strong><\/li>\n<\/ol>\n<pre>lsblk\r\n<\/pre>\n<p>Beispiel:<\/p>\n<pre>nvme0n1\r\n<\/pre>\n<hr \/>\n<h1><strong>3. \u00dcbernahme des SSH-Host-Keys auf dem Quellsystem (optional)<\/strong><\/h1>\n<pre class=\"lang:default decode:true \">sudo ssh-keyscan 192.168.1.150 &gt;&gt; ~\/.ssh\/known_hosts<\/pre>\n<hr \/>\n<h1><strong>4. Klonvorgang mit dd, SSH und pv<\/strong><\/h1>\n<p>Auf dem <strong>Quellsystem<\/strong> ausf\u00fchren (Blockdevicepfade anpassen):<\/p>\n<pre class=\"\">DISK=\"\/dev\/sda\"\r\nDISKSIZE=$(blockdev --getsize64 \"$DISK\")\r\n\r\nsudo dd if=\"$DISK\" bs=128M status=none \\\r\n  | pv -s \"$DISKSIZE\" -tpreb \\\r\n  | ssh -c aes128-gcm@openssh.com root@192.168.1.20 \\\r\n      \"dd of=\/dev\/nvme0n1 bs=128M status=progress oflag=direct\"\r\n<\/pre>\n<p>Dieser Befehl \u00fcbertr\u00e4gt das Quelllaufwerk vollst\u00e4ndig inklusive Partitionstabelle, Bootloader und allen Daten sektorweise auf das Zielmedium.<\/p>\n<p>Skript mit Parameterabfrage:<\/p>\n<pre class=\"lang:default decode:true \">#!\/bin\/bash\r\n\r\n# Installiere pv und Tools\r\napt install pv util-linux -y\r\n\r\n# Verf\u00fcgbare Disks anzeigen\r\necho \"Verf\u00fcgbare Disks auf diesem System:\"\r\nlsblk -d -o NAME,SIZE,MODEL\r\n\r\n# Quellfestplatte abfragen\r\nread -rp \"Quellfestplatte (z.B. \/dev\/sda): \" DISK\r\n\r\n# Existenz pr\u00fcfen\r\nif [ ! -b \"$DISK\" ]; then\r\n    echo \"Fehler: $DISK existiert nicht.\"\r\n    exit 1\r\nfi\r\n\r\n# Gr\u00f6\u00dfe der Disk ermitteln\r\nDISKSIZE=$(blockdev --getsize64 \"$DISK\")\r\n\r\n# Pr\u00fcfen, ob die Gr\u00f6\u00dfe korrekt ermittelt wurde\r\nif [ -z \"$DISKSIZE\" ] || [ \"$DISKSIZE\" -eq 0 ]; then\r\n    echo \"Fehler: Konnte Gr\u00f6\u00dfe von $DISK nicht ermitteln.\"\r\n    exit 1\r\nfi\r\n\r\n# Ziel-IP und Zieldisk abfragen\r\nread -rp \"Ziel-IP: \" TARGET_IP\r\nread -rp \"Zieldisk auf Zielsystem (z.B. \/dev\/sda): \" TARGET_DISK\r\n\r\n# Eingaben zusammenfassen\r\necho \"\"\r\necho \"Bitte pr\u00fcfen Sie Ihre Eingaben:\"\r\necho \"Quellfestplatte: $DISK\"\r\necho \"Gr\u00f6\u00dfe: $DISKSIZE Bytes\"\r\necho \"Zielsystem-IP: $TARGET_IP\"\r\necho \"Zieldisk: $TARGET_DISK\"\r\necho \"\"\r\n\r\nread -rp \"Sind die Eingaben korrekt? (y\/n): \" CONFIRM\r\n\r\nif [[ \"$CONFIRM\" =~ ^[Yy]$ ]]; then\r\n    echo \"Starte Klonvorgang...\"\r\n    sudo dd if=\"$DISK\" bs=128M iflag=fullblock status=none \\\r\n      | pv -s \"$DISKSIZE\" -tpreb \\\r\n      | ssh root@\"$TARGET_IP\" \"dd of=$TARGET_DISK bs=128M oflag=direct status=none\"\r\nelse\r\n    echo \"Abgebrochen.\"\r\n    exit 1\r\nfi\r\n<\/pre>\n<ul>\n<li><strong><code>bs=128M<br \/>\n<\/code><\/strong>&#8211; Blockgr\u00f6\u00dfe f\u00fcr Lese- und Schreibvorg\u00e4nge: 128 MiB<br \/>\n&#8211; Reduziert I\/O-Operationen, steigert Datendurchsatz im Vergleich zu Standardgr\u00f6\u00dfe (512\u202fB)<\/li>\n<li><strong><code>status=none<br \/>\n<\/code><\/strong>&#8211; Unterdr\u00fcckt dd-eigene Ausgabe<br \/>\n&#8211; Erm\u00f6glicht saubere Fortschrittsanzeige durch <code>pv<\/code><\/li>\n<li><strong><code>status=progress<br \/>\n<\/code><\/strong>&#8211; Zeigt laufend die Anzahl der bisher \u00fcbertragenen Bytes an<br \/>\n&#8211; Optional erg\u00e4nzt durch blockweise Fortschrittsanzeigen<br \/>\n&#8211; N\u00fctzlich, wenn <code data-start=\"335\" data-end=\"339\">pv<\/code> nicht verwendet wird oder zus\u00e4tzlich sichtbar sein soll<br \/>\n&#8211; Wird meist <strong data-start=\"413\" data-end=\"435\">auf dem Zielsystem<\/strong> bei <code data-start=\"440\" data-end=\"451\">dd of=...<\/code> eingesetzt, w\u00e4hrend auf der Quellseite <code data-start=\"491\" data-end=\"504\">status=none<\/code> die Ausgabe unterdr\u00fcckt wird, damit <code data-start=\"541\" data-end=\"545\">pv<\/code> die Anzeige \u00fcbernimmt<\/li>\n<li><strong><code>pv -tpreb<\/code><\/strong> \u2013 Fortschrittsanzeige w\u00e4hrend der \u00dcbertragung:<br \/>\n<code>-t<\/code> \u2192 Laufende Zeit<br \/>\n<code>-p<\/code> \u2192 Fortschritt in Prozent<br \/>\n<code>-r<\/code> \u2192 Aktuelle Datentransferrate<br \/>\n<code>-e<\/code> \u2192 Voraussichtliche Restzeit (ETA)<br \/>\n<code>-b<\/code> \u2192 \u00dcbertragene Bytes<\/li>\n<\/ul>\n<hr \/>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2821 alignleft\" src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2014\/08\/CC_BY_NC_SA.png\" alt=\"CC_BY_NC_SA\" width=\"65\" height=\"23\" \/>by Speefak<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nachfolgend wird ein bew\u00e4hrtes Verfahren beschrieben, um ein Linux-System mithilfe von dd \u00fcber eine SSH-Verbindung auf ein anderes System zu \u00fcbertragen. Dieser Ansatz eignet sich insbesondere f\u00fcr Systeme, bei denen die vollst\u00e4ndige Festplattenstruktur einschlie\u00dflich Partitionstabelle, Bootloader, Dateisystemen, LVM, verschl\u00fcsselten Containern oder anderen nicht trivialen Konfigurationen unver\u00e4ndert \u00fcbernommen werden soll. Da die \u00dcbertragung auf Blockebene erfolgt, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,24,26,54],"tags":[],"class_list":["post-8429","post","type-post","status-publish","format-standard","hentry","category-anleitungen","category-it-syntax","category-linux","category-shell-programme"],"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"speefak","author_link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/author\/speefak_oss\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/anleitungen\/\" rel=\"category tag\">Anleitungen<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/it-syntax\/\" rel=\"category tag\">IT Syntax<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/linux\/\" rel=\"category tag\">Linux<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/shell-programme\/\" rel=\"category tag\">Shell<\/a>","rttpg_excerpt":"Nachfolgend wird ein bew\u00e4hrtes Verfahren beschrieben, um ein Linux-System mithilfe von dd \u00fcber eine SSH-Verbindung auf ein anderes System zu \u00fcbertragen. Dieser Ansatz eignet sich insbesondere f\u00fcr Systeme, bei denen die vollst\u00e4ndige Festplattenstruktur einschlie\u00dflich Partitionstabelle, Bootloader, Dateisystemen, LVM, verschl\u00fcsselten Containern oder anderen nicht trivialen Konfigurationen unver\u00e4ndert \u00fcbernommen werden soll. Da die \u00dcbertragung auf Blockebene erfolgt,&hellip;","_links":{"self":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8429","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/comments?post=8429"}],"version-history":[{"count":0,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8429\/revisions"}],"wp:attachment":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/media?parent=8429"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/categories?post=8429"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/tags?post=8429"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}