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
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.
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"
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.
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!
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:
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.
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
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.
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.