Es gibt viele Möglichkeiten, um das zu tun, was Sie wollen. Am einfachsten ist die Verwendung eines Pìpes:
tar zcvf - MyBackups | ssh user@server "cat > /path/to/backup/foo.tgz"
Hier wird die Komprimierung von tar
welchen Aufrufen gzip
( z
Flag) behandelt. Sie können auch compress
( Z
) und bzip
( j
) verwenden. Für 7z
, dies zu tun:
tar cf - MyBackups | 7za a -si -mx=9 -ms=on MyBackups.tar.7z |
ssh user@server "cat > /path/to/backup/foo.7z"
Der beste Weg ist jedoch wahrscheinlich rsync
.
Rsync is a fast and extraordinarily versatile file copying tool. It can copy
locally, to/from another host over any remote shell, or to/from a remote rsync dae‐
mon. It offers a large number of options that control every aspect of its behavior
and permit very flexible specification of the set of files to be copied. It is
famous for its delta-transfer algorithm, which reduces the amount of data sent over
the network by sending only the differences between the source files and the exist‐
ing files in the destination. Rsync is widely used for backups and mirroring and
as an improved copy command for everyday use.
rsync
hat viel zu viele optionen. Es lohnt sich wirklich, sie durchzulesen, aber sie sind auf den ersten Blick beängstigend. Diejenigen, die Sie in diesem Zusammenhang interessieren, sind jedoch:
-z, --compress compress file data during the transfer
--compress-level=NUM explicitly set compression level
-z, --compress
With this option, rsync compresses the file data as it is sent to the desti‐
nation machine, which reduces the amount of data being transmitted --
something that is useful over a slow connection.
Note that this option typically achieves better compression ratios than can
be achieved by using a compressing remote shell or a compressing transport
because it takes advantage of the implicit information in the matching data
blocks that are not explicitly sent over the connection.
In Ihrem Fall möchten Sie also Folgendes:
rsync -z MyBackups user@server:/path/to/backup/
Die Dateien werden während des Transports komprimiert und kommen dekomprimiert am Ziel an.
Einige weitere Möglichkeiten:
scp
selbst kann die Daten komprimieren
-C Compression enable. Passes the -C flag to ssh(1) to
enable compression.
$ scp -C source user@server:/path/to/backup
Es mag eine Möglichkeit geben, nett zu werden rsync
und 7za
zu spielen, aber es macht keinen Sinn, dies zu tun. Der Vorteil rsync
ist, dass nur die Bits kopiert werden, die sich zwischen der lokalen und der entfernten Datei geändert haben. Eine kleine lokale Änderung kann jedoch zu einer sehr unterschiedlichen komprimierten Datei führen, sodass es keinen Sinn macht, rsync
diese zu verwenden. Es macht die Sache nur komplizierter und bringt keinen Nutzen. Verwenden Sie einfach direkt ssh
wie oben gezeigt. Wenn Sie dies wirklich tun möchten, können Sie versuchen, indem Sie eine Subshell als Argument angeben rsync
. Auf meinem System konnte ich dies nicht zum Laufen bringen, 7za
da Sie damit keine komprimierten Daten auf ein Terminal schreiben können. Vielleicht ist Ihre Implementierung anders. Versuchen Sie etwas wie ( das funktioniert bei mir nicht ):
rsync $(tar cf - MyBackups | 7za a -an -txz -si -so) \
user@server:/path/to/backup
Ein weiterer Punkt ist, dass 7z
für Backups unter Linux nicht verwendet werden sollte . Wie auf der 7z
Manpage angegeben:
Verwenden Sie das 7-zip-Format NICHT für Sicherungszwecke unter Linux / Unix, weil:
- 7-zip den Eigentümer / die Gruppe der Datei nicht speichert.
-z
ist es mindestens doppelt so langsam. Richten Sie einen rsync-Daemon und rsync mithilfe des-W
Flags ein (kopiert Dateien als Ganzes (ohne Delta-Xfer-Algorithmus) , um eine noch schnellere Synchronisation als mit ssh zu erreichen .rsync
und7za
mit der endgültigen Ausgabe an das Remote-Dateisystem verwendet. Ich mochte,-z
aber ich möchte die Komprimierungsstufe so entkoppeln. Wie würde ichrsync
in diesem Fall bitte verwenden?rsync
mit zu verwenden7z
. Es sollte wie gezeigt mit rsync und einer Subshel funktionieren, aber ich konnte es trotzdem nicht herausfinden.scp -C
. Auf der Remote-Festplatte war nicht genügend Speicherplatz für die komprimierte Datei vorhanden, sodass ich sie vor der Übertragung nicht komprimieren konnte. Eine kleine Befehlszeilenoption ließ mein Problem verschwinden.Ich denke, dieser Befehl wird den Trick machen
BEARBEITEN: Eine frühere Version hatte zwei falsche "f" -Optionen.
Jetzt müssen Sie zuerst diesen Befehl vom Zielhost ausführen. Und noch zu erklärende Details:
Wie Sie sehen, komprimiert dieser Befehl im laufenden Betrieb und spart Bandbreite. Sie können auch andere Komprimierungen verwenden, um bessere Ergebnisse zu erzielen. Beachten Sie jedoch, dass für Komprimierung und Dekomprimierung CPU-Zyklen erforderlich sind.
Referenz
quelle
Kleine Verbesserung für die Antwort von dkbhadeshiya : Sie müssen nicht tun
cd dir
,tar
sondern geben stattdessen das Arbeitsverzeichnis an :Sie können das Verzeichnis auch auf die gleiche Weise hochladen:
quelle