Page 1 of 1
find + xargs + tar (append) + gzip + ssh
Posted: 2012-04-11 16:21
by dante
Moin zusammen,
folgendes funktioniert, die Vorgehensweise sollte erkennbar sein:
Code: Select all
find . -name \*sync\* -mtime +2 -print0 |xargs -0 tar -cvf - |gzip -c -1 |ssh root@10.5.13.37 "cat > /mein/pfad/file.tar.gz"
Was nicht funktioniert ist die Option
-r bei tar, also
append statt
create, wenn ich von STDIN lese.
Der Fehler:
tar: Options `-Aru' are incompatible with `-f -'
Ich möchte nur vermeiden, dass nicht aus irgendwelchen Gründen mehrere Archive erstellt werden, sondern alle Dateien (egal wieviele und wie groß) im selben Archiv landen.
Habe ich eventuell einen Denkfehler?
Alternative Frage: Habe ich eine Möglichkeit die ursprüngliche Ergebnisliste von find nochmals zu verwenden? Die Idee ist in einer Zeile zu packen und kopieren und danach die entsprechenden Dateien zu löschen.
Re: find + xargs + tar (append) + gzip + ssh
Posted: 2012-04-11 16:30
by ddm3ve
Zur alternative Frage.
eine einfache for Schleife.
Code: Select all
files=`find .....`
for file in $files; do echo $file ; done
Re: find + xargs + tar (append) + gzip + ssh
Posted: 2012-04-11 17:34
by Joe User
dante wrote:Was nicht funktioniert ist die Option -r bei tar, also append statt create, wenn ich von STDIN lese.
Das Lesen von STDIN ist nicht das Problem, sondern das Schreiben nach STDOUT.
dante wrote:Ich möchte nur vermeiden, dass nicht aus irgendwelchen Gründen mehrere Archive erstellt werden, sondern alle Dateien (egal wieviele und wie groß) im selben Archiv landen.
Genau das tun sie bei Deinem Einzeiler, wie auch bei meinem leicht Angepasstem*:
Code: Select all
find . -name \*sync\* -mtime +2 -print0 |\
xargs -0 tar -czSpvf - |\
ssh root@10.5.13.37 "cat > /mein/pfad/file.tar.gz"
Alternativ geht es auch so:
Code: Select all
find . -name \*sync\* -mtime +2 -print0 |\
xargs -0 tar -czSpvf /tmp/file.tar.gz &&\
scp /tmp/file.tar.gz root@10.5.13.37:/mein/pfad/file.tar.gz
dante wrote:Alternative Frage: Habe ich eine Möglichkeit die ursprüngliche Ergebnisliste von find nochmals zu verwenden? Die Idee ist in einer Zeile zu packen und kopieren und danach die entsprechenden Dateien zu löschen.
Das könnte man quick&dirty in etwa so lösen (ungetestet!):
Code: Select all
find . -name \*sync\* -mtime +2 -print0 |\
xargs -0 echo - > /tmp/file.lst &&\
cat /tmp/file.lst |\
tar -czSpvf /tmp/file.tar.gz &&\
cat /tmp/file.lst |\
rm -f - &&\
scp /tmp/file.tar.gz root@10.5.13.37:/mein/pfad/file.tar.gz
* Die Optionen für tar sind angepasst.
Re: find + xargs + tar (append) + gzip + ssh
Posted: 2012-04-11 20:05
by dante
Joe User wrote:
Alternativ geht es auch so:
Code: Select all
find . -name \*sync\* -mtime +2 -print0 |\
xargs -0 tar -czSpvf /tmp/file.tar.gz &&\
scp /tmp/file.tar.gz root@10.5.13.37:/mein/pfad/file.tar.gz
Das war zum Zeitpunkt leider nicht möglich, da [Größe des Archivs] > [Freier Speicherplatz] war :oops:
Mit der Alternative werde ich morgen mal spielen, gelöst habe ichs erstmal via Schleife.
Bis dahin vielen Dank an euch
Re: find + xargs + tar (append) + gzip + ssh
Posted: 2012-04-11 22:01
by Joe User
Wie gross wird das Backup denn maximal und wieviel RAM ist durchschnittlich frei?
Ich hätte auch noch eine weitere Alternative, bei der dauert dann aber die Dateiübertragung zum Backupserver etwas länger. Wäre das trotzdem interessant?
Re: find + xargs + tar (append) + gzip + ssh
Posted: 2012-04-11 22:58
by dante
Das wäre definitv interessant. Vor allem für VMs, da mein VMware-Admin gern mal mit dem Plattenplatz geizt ;)
In dem Fall war das Backuparchiv ~8GB bzw. ~450MB komprimiert groß. RAM liegt bei 6GB, wobei zu Backupzeiten eigentlich immer >50% frei sind.
Die Übertragungsdauer spielt keine große Rolle, da diese Backups später nur 1x / Woche gemacht werden.
Re: find + xargs + tar (append) + gzip + ssh
Posted: 2012-04-12 19:21
by Joe User
Ungetestet, müsste aber funktionieren:
Code: Select all
find . -name \*sync\* -mtime +2 -print0 | xargs -0 cat |\
ssh root@10.5.13.37 "tar -czSpvf /mein/pfad/file.tar.gz"
Vorteil: Nahezu keine Last auf dem Quellsystem
Nachteil: Sehr hoher Traffik durch Rohdaten+Overhead