Backup DD durch SSH
DD-Image durch SSH tunneln
Das Übertragen oder Weiterleiten von Daten von einem Computer zum anderen ist eine häufig benötigte Funktion. Da dd problemlos mit den Standardeingabe- und -ausgabekanälen arbeitet, können wir es in jede Pipe und damit auch in Verbindungen über Rechnergrenzen hinweg einbinden. Einfache Verbindungen können bequem über rsh, ssh oder netcat mit dd auf einer oder beiden Seiten der Pipe aufgebaut werden.
Beispiel: Klonen einer Festplatte auf einen anderen Computer
dd if=/dev/hda bs=8K | ssh RECHNER2 "dd of=/dev/hdb bs=8K"
Dies würde die /dev/hda unseres Rechners auf die /dev/hdb von RECHNER2 klonen.
Auf ähnliche Weise könnten wir wahrscheinlich viele andere Dinge über das Netzwerk weiterleiten. Die meisten der oben vorgestellten Beispiele würden auch über Rechnergrenzen hinweg funktionieren. Inwieweit das immer sinnvoll ist, sei dahingestellt, denn vieles ließe sich vermutlich auch ohne dd realisieren. Das obige Beispiel würde hier sicherlich genauso funktionieren.
cat /dev/hda | ssh RECHNER2 "cat > /dev/hdb"
Die Leistungsvorteile, die wir durch das Blockieren mit dd erhalten, würden durch die Netzwerkverbindung und die zusätzliche Verschlüsselung über ssh ohnehin wieder zunichte gemacht werden. Wenn wir also keine anderen Funktionen, wie z.B. Byte-Konvertierungen oder die Positionierungsfunktionen im Datenstrom von dd nutzen können und auch auf das Blockieren des Datenstroms verzichten können, dann ist dd über das Netzwerk in vielen Fällen überflüssig. (aber die Befehlsverkettung mit dd würde wahrscheinlich zu einfacher zu interpretierenden Befehlszeilen führen ;-))
Ganz anders sieht es aus, wenn wir die Blockierung zwingend brauchen. Wie zum Beispiel beim Schreiben und Lesen auf Bandlaufwerke.
LINUX:/ # tar -cf - /etc | ssh RECHNER2 "dd of=/dev/nst0 obs=64K" tar: Führendes `/' aus Mitgliedsnamen entfernen tar: Führendes `/' aus Hardlink-Zielen entfernen 49404+8 Datensätze in 386+0 Datensätze out
Damit würden wir ein Backup mit tar auf das Bandlaufwerk eines anderen Computers schreiben. Wiederherstellen des Backups,
ssh RECHNER2 "dd if=/dev/nst0 bs=64K" | tar -xvf -
oder sehen Sie sich einfach das Inhaltsverzeichnis an
ssh RECHNER2 "dd if=/dev/nst0 bs=64K" | tar -tvf -
Wir hätten hier also ein entferntes Bandlaufwerk, das die Erweiterung über ssh und dd nutzt.
Der Vollständigkeit halber müssen wir auch in der Lage sein, das Laufwerk von unserem eigenen Rechner aus zu steuern, also remote, aber das funktioniert genauso. Beispiele:
ssh RECHNER2 "mtst -f /dev/nst0 setblk 0" ssh RECHNER2 "mtst -f /dev/nst0 rewind"
und natürlich müssen wir die publishkey-Authentifizierung für root einrichten, weil wir sonst bei jedem ssh-Befehl das Passwort eingeben müssten. Aber dann steht einem Backup per Skript auf ein entferntes Laufwerk hier nichts mehr im Wege.
-- außer --
Das Ganze würde, wenn wir es täglich nutzen wollen, nur bei etwas älteren Laufwerken wirklich Sinn machen. Moderne Bandlaufwerke würden sich mit dem Datenstrom, den wir dem Laufwerk so anbieten, nur zu Tode langweilen. Es gibt aber Programme, die auch Blockfunktionen wie dd anbieten und darüber hinaus noch im Hauptspeicher oder auf Festplatte den Datenstrom zwischenspeichern können. Darüber hinaus haben sie unter anderem auch noch die Eigenschaft, selbst mit TCP/IP-Ports zu kommunizieren. Solche Programme sind bei regelmäßigem Einsatz auf modernen Bandlaufwerken dd absolut vorzuziehen. Beispiele sind unter Bandlaufwerke und LINUX zu finden. Auch bei vielen anderen Anwendungen können solche neuen Programme den guten alten dd-Befehl 100%ig und oft auch besser ersetzen. dd ist und bleibt trotzdem der Kultbefehl, mit dem man unter Linux oder Unix manchmal einfach schnell "zaubert".