Table of Contents

Daten auf einen anderen Rechner Kopieren

Wenn man ganz viele Daten (viele GB oder viele Dateien) auf einen anderen Rechner kopieren möchte, ist scp -r … nicht immer so optimal.

Besser eine der folgenden vier Möglichkeiten verwenden.

Allgemein sei zuerst gesagt, dass es jeweil zwei Möglichkeiten gibt: Ziehen oder Schieben .

Dieser Rechner darf natürlich nicht hinter einem NAT sitzen, wodurch sich meist schon geklärt hat, ob man ziehen oder schieben muss ;-)

tar | ssh

Die Daten werden auf dem Quell-Rechner in eine große tar-Datei eingepackt, die Datei wird aber nicht auf die Platte gelegt, sondern über das Pipe-Symbol | an die SSH übergeben, die den Stream auf den anderen Rechner überträgt, dort wird er von einem tar wieder On-the-fly entpackt.

Schieben (Quelle --> Ziel)

Dazu gibt man auf dem Rechner, auf dem die Daten liegen, folgendes ein:

tar -c --exclude=/proc / | ssh -T user@rechner tar -C /ziel/verzeichniss -xpv

vom Übertragen ausschließen möchte.

Man kann den Inhalt eines Rechners auch in ein Tar-File auf der anderen Seite schieben:

tar -c --exclude=/proc / | ssh -T user@rechner "cat 1>mein_archiv.tar"

Ziehen (Ziel <-- Quelle)

Dazu gibt man auf dem Rechner, auf dem die Daten hinterher liegen sollen, ein:

ssh -T user@rechner tar -c --exclude=/proc / | tar -C /ziel/verzeichnis -xpv

Optionen wie oben.

tar + netcat

Hierbei werden die Daten nicht verschlüsselt und nicht gesichert über das Netz übertragen, kann man also nur machen, wenn das Netz sicher ist! Man muss hier auf beiden Rechnern einen Befehl eingeben!

Schieben (Quelle --> Ziel)

Auf dem Ziel-Rechner:

nc -v -w 30 -l -p 4242 | tar -C /ziel/verzeichniss -xpv

auf einem aktuellen ubuntu (10.04) geht der befehl von oben nicht mehr, alternativ ist dieser Befehl zu verwenden

nc -v -l 4242 | tar -C /ziel/verzeichnis -xpv

Aus dem Quell-Rechner:

tar -c --exclude=/proc / | nc -v -w 2 ziel-ip 4242

Die Parameter bedeuten:

Ziehen (Ziel <-- Quelle)

Aus dem Quell-Rechner:

tar -c --exclude=/proc / | nc -v -w 30 -l -p 4242

Auf dem Ziel-Rechner:

nc -v -w 2 quelle-ip 4242 | tar -C /ziel/verzeichniss -xpv

Hier macht die Quelle als Server einen Port auf und der Ziel-Rechner verbindet darauf.

Daten innerhalb desselben Rechners kopieren (z.B. von Partition X nach Partition Y)

Auf neueren Linux-Distributionen (>2001, z.B. ab Redhat 7.0 oder Debian woody) verwendet man (/proc und /sys sollte eigentlich nicht mitkopiert werden, oder wenigstens nachher auf dem Ziel den Inhalt löschen)

cp -a / /zielplatte

ansonsten besser:

tar -c --exclude /proc --exclude /sys / | tar -C /ziel -xp

rsync + ssh

Das Schöne am RSync ist, dass es nur die Unterschiede überträgt, falls die Datei schon existiert. Man kann auch komplette Ordnerstrukturen auf einmal übertragen.

rsync -avz --rsh=ssh user@remotehost:quelle ziel

Optionen:

-a für Archivmodus, entspricht -rlptgoD
-v für Verbose (anzeigen, was passiert)
-z für Kompression

Man kann die Option –sparse füer Dateien mit Löchern benutzen (z.B. QEMU-Images). Die sind bei mir z.B. 400MB groß, belegen aber nur 132MB auf der Platte.

Schieben und Ziehen sind beide möglich, einfach beim obigen Beispiel user@remotehost: vor das Ziel statt vor die Quelle schreiben.

dd + ssh

Ganz easy Plattenbackup mit dd

dd if=localfile | ssh target_address dd of=remotefile

Für localfile die Platte angeben (z.B. /dev/hda) und als remotefile eine Datei im Dateisystem.