Alexander (HH): täglich große Menge an Daten sichern (nur neue und geänderte)

Beitrag lesen

Moin Moin!

Ich ging bisher davon aus, dass die tar-Lösung "die" Lösung ist.

Für Tapes ja (daher der Name ...).

Ich ging davon aus, dass das eher historisch ist :) die meisten tar-Files die mir begegnen, finden sich in gzip-Files die wiederum nichtmal im entferntesten je ein Bandlaufwerk von innen gesehen haben.

Richtig, denn tar kann, wie viele alte Unix-Tools, eine einzige Sache, die aber richtig gut. In diesem Fall eben einen Dateibaum in einen Datenstrom serialisieren und wieder deserialisieren. Man könnte natürlich auch ZIP, ARJ, LHA oder sonst irgendein Archiv-Format mit Komprimierung benutzen, aber die sind alle wesentlich jünger und/oder kommen nicht mit allen Unix-Spezialitäten (hard links, symbolic links, device nodes, ...) klar.

Wenn wir schon beim "Mißbrauch" von tar sind:

Einen kompletten Dateibaum von src nach dest kopieren, mit allen Unix-Spezialitäten (root-Rechte für owner nötig).

( cd src && tar cf - . ) | ( cd dest && tar xvf - )

cp -a kann das auch, aber cp -a ist jünger als tar.

Einen kompletten Dateibaum von src nach dest auf einen anderen Rechner kopieren. cp muß da passen, rsync kann das auch, sogar mit Recovery-Funktion. Statt ssh geht auch rsh (ist aber unsicher).

( cd src && tar cf - . ) | ssh user@host cd dest '&&' tar xvf -

Man beachte: && auf dem anderen Rechner muß gequotet werden, damit die lokale Shell es nicht interpretiert.

Einen kompletten Dateibaum von src auf einen anderen Rechner nach dest auf dem lokalen Rechner kopieren:

ssh user@host cd src '&&' tar cf - . | ( cd dest && tar xvf - )

Mit GNU tar kann man sich das cd-Gebastel sparen und stattdessen -C benutzen:

ssh user@host tar -C src cf - . | tar -C dest xvf -

Wenn ausreichend CPU-Leistung vorhanden ist, aber nicht genügend Netz-Bandbreite, kann man zwischendurch auch komprimieren:

ssh user@host cd src '&&' tar cf - . '|' gzip -c -9 | gzip -d -c | ( cd dest && tar xvf - )

Wieder muß gequotet werden, damit && und | bei der Shell auf dem anderen Rechner ankommen.

Mit GNU-Tools sieht das etwas lesbarer aus:

ssh user@host tar -C src czvf - . | tar -C dest xzvf -

Einen Haken hat tar aber noch: Es gibt nicht das eine tar-Format, sondern mehrere. Das uralte tar-Format aus den Anfangstagen kann keine langen Namen, das hat UStar nachgerüstet. star rüstet größere Dateien (> 8 GByte) nach, und die GNU- und BSD-Forks treiben noch einmal ihre eigenen Spielchen, z.B. für ACLs und extended Attributes. Lustigerweise verstehen sich die tars untereinander trotzdem ganz gut. Siehe auch "Why cpio rather than tar?" in http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt.

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".