Tag, David Haller wrote:
Hallo,
Am Sun, 10 Jul 2005, Joachim Kieferle schrieb:
ABER: die Option -f steht soweit ich es spontan weiss für "file", d.h. es handelt sich dabei normalerweise um einen Filenamen. Also z.B. tar -cvf test.tar /home /etc.
Joachim, Joachim, Joachim...
Unter Unix ist alles ausser Verzeichnissen eine Datei. Und selbst die Verzeichnisse sind eigentlich Dateien, nur kommt man an diese nicht mit normalen Mitteln ran.
Also: bei tar kann man alle Dateien angeben, in die man schreiben kann.
Im folgenden halte ich Pfade extrem kurz.
z.B. eine normale Datei:
tar -cf /irgendwo/foo.tar /foo
Oder auch ein symlink:
ln -s /foo.tar /irgendwo/foo.tar tar -cf /irgendwo/foo.tar /foo tar -xf /foo.tar
z.B. stdout oder eine Pipe:
tar -cf - /foo/ > /irgendwo/foo.tar
tar -cf - /foo/ | ssh foo@nocheinhost "tar -C /da/wos/hinsoll/ -xf -"
ssh root@192.168.0.2 "( cd /mnt/hda1; tar cp --atime-preserve \ --exclude=hiberfil.sys --exclude=pagefile.sys \ --exclude=WINDOWS/system32/shgina.dll . ; ) " \ | tar xvp --atime-preserve
Letzteres (eine Zeile!) ist ein reales Beispiel mit dem ich neulich ne XP-Partition gesichert habe, wobei auf dem Laptop ein Knoppix mit nem sshd lief und die XP-Partition unter /mnt/hda1 gemounted war. Und ja, die Dateien sind korrekt angekommen. Und wurden nach der Neuinstallation von XP erfolgreich zurueckkopiert.
Ich hätte da im internen Netz (192.168.0.0/16) ja eher ohne ssh sondern mit netcat gearbeitet :-)
Man kann einen tarball auch ganz ohne Dateisystem direkt auf ein Band schreiben, also ein Char-Device:
tar -cf /dev/st0 /foo
Das ist sogar der Normalfall wenn man mit tar auf Band sichert.
Und vermutlich auch auf ein Block-Device, z.B. eine Partition/Festplatte:
tar -cf /dev/hdXY /foo
Das habe ich aber noch nicht getestet.
Würde ich von abraten.
Und evtl. sogar eine CD schreiben bzw. von dort lesen?
tar -c /foo | cdrecord dev=... und tar -xf /dev/sr0
Keine Ahnung das mit CD aber funktioniert ;)
Kann man machen, habe ich mal ein Script für gehabt, aber das hat damals als es noch kein BURNproof etc. gab nicht stabil funktioniert.
Auch ein Socket ist eine Datei, ebenso wie eine "named pipe"
==== etwas sinnlos ;) === mknod /tmp/FIFO p tar -cf /tmp/FIFO cat /tmp/FIFO > /foo.tar ====
Ich würde da noch ein & einbauen. Mindestens. Und im übrigen ist das nicht sinnlos - immerhin gibt es beispielsweise Programme die zwar Dateien lesen wollen aber kein STDIN mögen, und so kann man dann on-the-fly und ohne Platzverschwendung z.B. Datenbankwartungsprogramme mit Datenbankbackups füttern.
Noch Fragen?
Immer. Nur fallen mir grade keine ein. Arno
-dnh
-- IT-Service Lehmann al@its-lehmann.de Arno Lehmann http://www.its-lehmann.de