Forumtar über pipe – Dateien aus Standardinput lesen
tiefauslaeufer – Donnerstag, 15. Januar 2004 17:15 Uhr

Hallo!!

ich habe ein kleines problem. ich mochte meine dateien ueber das intranet per ssh auf einem entfernten rechner mit tar sichern… aber ich kann mit tar einfach nicht mit dem “-” von der standard input lesen. das brauche ich dazu, weil ich das ganze pipe. hier meine befehlszeile

find /data -mtime -4 -xdev | cpio -o –block-size=128 -H newc | gzip -c | ssh 192.168.3.110 “tar -cvf /dev/st0 -b128 -“

es kommt immer die fehlermeldung, dass er die datei – nicht kennt. ist ja auch klar, weil die datei gibt es nicht. ich dachte es waere so wie bei dem befehl cat:

find /data -mtime -4 -xdev | cpio -o –block-size=128 -H newc | gzip -c | ssh 192.168.1.1 “cat – > /backup/sicherung”

das funktioniert mit dem cat ja auch… warum nicht mit tar…

wie kann ich uebers netz dateien auf tape sichern… per nfs laesst es sich nicht exportieren, weil es kein “block device” ist…

habt ihr vorschlaege???

Gruss

Steffen

5 Antworten
Gast – Donnerstag, 15. Januar 2004 17:36 Uhr

Hallo.

Was willst du machen?
Ich gestehe, dass ich cpio nicht kenne, aber laut man-page dürfte das ein Archiv-programm wie tar sein.

Was du machst ist folgendes:

find listet Dateien. Dann werden die von cpio in ein Archiv gesteckt. Das wird von gzip komprimiert und per SSH auf den anderen Rechner geschickt. Was genau soll tar jetzt machen? Der Befehl “tar -c” erzeugt ein Archiv aus den als Parameter angegebenen Dateien. Er soll doch aber gar keine Dateien mehr zum Archiv hinzufügen, oder?

Auch mit Streamern kenne ich mich nicht aus aber sollte sich das nicht einfach wie eine Datei verhalten? Immerhin weist du in deinem Beispiel tar dazu an, die Ausgabe in die Datei /dev/st0 zu schreiben.
Mein Vorschlag:

tar czv -b128 $(find /data -mtime -4 -xdev) | ssh 192.168.3.110 “cat > /dev/st0”

Obwohl ich noch tar cz duch tar cj ersetzen würde.

Thomas Narres – Donnerstag, 15. Januar 2004 17:39 Uhr

Hilft es Dir denn nicht weiter, wenn Du hinter dem Parameter “-f” HOSTNAME:Dateien angibst?

tar kann ja von Natur aus übers Netz sichern.

tiefauslaeufer – Donnerstag, 15. Januar 2004 18:22 Uhr

Hallo Bernd,

ich weiss eigentlich schon sehr genau was ich mache… ;-)

das “c” brauch ich um ein Archiv auf Band zu erstellen. Anders gehts auf jeden fall nicht. Normalerweise ist der Befehl:

tar -cvf /dev/st0 -b 128 datei_zu_sichern

da ich ja keine zu sicherne datei auf der Platte habe (da ich ja die ganze Geschichte von einem Rechner auf den anderen Pipe ohne zu sichern — und sichern kann ich vorher nicht, weil ich keinen Plattenplatz habe) brauch ich jetzt was, dass mir vom Standard Input liest… naemlich die Datei die ich eben pipe…

nach “tar -cvf” muss das device kommen…. da kann ich nicht einfach einen $(find …) ausführen. Und das mit cat auf das Device /dev/st0 kann nicht funktionieren, weil ich beim schreiben die Blockgrösse von 128*512bytes angeben muss (also 65536) weil es ein VS Tape ist…

———-

Hallo Thomas!

damit habe ich mich schon beschaeftigt, aber hier habe ich wiederum das Problem, dass ich keine Datei habe, die physikalisch auf der Platte liegt, da ich ja alles durchpipe….

Ich haette auch gar keinen Platz, die Datei zu erst auf Platte zu legen… es muss direkt von der Pipe aufs Tape OHNE Umwege.

Aber Danke trotzdem an Bernd und Thomas…

Andere Vorschlaege!!!

Gruss

Steffen

E. Wälde – Donnerstag, 15. Januar 2004 18:42 Uhr

Hallo Steffen,

nicht so schwierig, aber tar ist der falsche Ansatz. “dd” oder device dump heisst das Zauberwort.

Dateien von Rechner A “uber Rechner B aufs Band schreiben:

user@A% tar -cvb 20 -f – ./directory | ssh user@B “dd of=/dev/rmt/0mn obs=20b”

dd liest die Daten blockweise und schreibt sie genau so blockweise auf “of” (output file, es gibt auch if), welches auf ein TAPE device zeigt. Den tar in meiner Zeile kannst Du dann mit “find … | cpio …” ersetzen.

Viel Erfolg!
Erich

tiefauslaeufer – Donnerstag, 15. Januar 2004 19:04 Uhr

Hallo Erich,

wenn ich deinen Befehl eingebe kommt genau die Fehlermeldung. Aber immerhin wird das Tape schon mal angesprochen.

find /etc -xdev | cpio -o –block-size=128 -H newc | gzip -c | ssh 192.168.1.1 “dd of=/dev/st0 obs=128b”
root@192.168.3.110‘s password:
85 blocks
dd: writing `/dev/st0’: Invalid argument
2709+3 records in

Danke und Gruss

Steffen

E. Wälde – Donnerstag, 15. Januar 2004 19:21 Uhr

Hi Steffen,

“works for me”, wie man sagt (lokal auf einem Rechner):
find . -xdev | cpio -o –block-size=128 -H newc | gzip -c | dd of=/dev/st0
9 blocks
302+1 records in
302+1 records out
154663 bytes transferred in 3.804509 seconds (40653 bytes/sec)

Mein Tip: permissions von /dev/st0 (ist hier mit device fs) ?

% ls -l /dev/st0
lr-xr-xr-x 1 root root 31 Jan 15 07:40 /dev/st0 -> scsi/host0/bus0/target0/lun0/mt
% ls -l /dev/scsi/host0/bus0/target0/lun0/mt
crw-rw—- 1 root tape 9, 0 Jan 1 1970 mt
~/spick 285 > id
… groups=100(users), … 26(tape)

Erich

tiefauslaeufer – Donnerstag, 15. Januar 2004 19:58 Uhr

Hi Erich!

bei mir siehts danz aehnlich aus

crw-rw—- 1 root disk 9, 0 Sep 23 19:59

hab noch mal spasseshalber auf 777 die Reche gesetzt, aber immer der gleiche Fehler.

Ich nutze uebrigens suse linux

es ist echt zum verzweifeln…

aber danke vielmals trotzdem

Gruss

Steffen

tiefauslaeufer – Donnerstag, 15. Januar 2004 20:28 Uhr

Hi Erich,

ich bins nochmal…

find /etc -xdev | cpio -o –block-size=128 -H newc | gzip -c | ssh 192.168.1.1 “dd of=/dev/st0 obs=64k”

was ich noch bemerken wollte

in /var/log/messages kommt die Meldung “kernel: st0: Write not multiple of tape block size.”

Das Wundert mich etwas, weil die Blocksize von 64k genau richtig ist. Wenn ich es lokal mache mit dem “tar -cvf /dev/st0 -b 128 datei” (128*512=64k) stimmt es ja auch….

komisch komisch

Naja…

Gruss,

Steffen

tiefauslaeufer – Donnerstag, 15. Januar 2004 20:42 Uhr

Hi

so….

jetzt hab ichs rausgefunden…. es liegt am “gzip -c” kommando… mach ichs ohne gzip dann funktionierts einfwandfrei.

find /etc -xdev | cpio -o –block-size=128 -H newc | ssh 192.168.3.110 “dd of=/dev/nst0 obs=64k”
85 blocks
10863+34 records in
85+0 records out

Aber jetzt hab ich ein anderes problem. /etc ist ja eine directory… wie komme ich wieder von dem dump den ich geschrieben auf die directory mit all den dateien zurueck…

wenn ich mit

dd if=/dev/st0 > test

habe ich ja nur eine datei aber nicht meine directory mit den inhalten….

kann mir da vielleicht noch jemand helfen??

Gruss und Danke!!!

Steffen

Gast – Donnerstag, 15. Januar 2004 21:31 Uhr

Du hast mit cpio -o ein .cpio Archiv angelegt.

Solche Archive kannst du mit cpio -i wieder entpacken:

dd if=/dev/st0 | cpio -i –block-size=128 -H newc –make-directories

tiefauslaeufer – Freitag, 16. Januar 2004 11:54 Uhr

Hi Pascal!

ja klaro… dass ich da nicht slebst drauf gekommen bin. VIELEN DANK!

Es funktioniert alles einwandfrei.

Gruss und schoenes WE

Steffen

Martin Fink – Donnerstag, 15. Januar 2004 22:31 Uhr

hallo,

du hast bestimmt die mttools installiert !

man mt

du kannst alles lokal auf der maschine einpacken und anschliessend mt direkt aufrufen und uebers netz auf den streamer im dasiserver zugreifen.

standardmaessig benutzt mt ssh zur uebertragung also genau wie du es wolltest …

mf

Martin Fink – Donnerstag, 15. Januar 2004 23:05 Uhr

uuupppssss,

das kommt davon wenn man lange nicht mehr damit gearbeitet hat.

mit mt kannst du natuerlich nur den streamer operativ kontrollieren und nichts draufsichern. sorry.

aber meine selbstgeschriebene dasi ist ne fire and forget loesung sie funktioniert und das einzige worueber ich mir sorgen machen muss ist ob die platten nicht gelegentlich mal voll sind.

naja vielleicht hilft dir der tipp ja trotzdem wenn du beim sichern von hand oder via script auf dem entfernten rechner das tape steuern moechtest.

mf

Ecaroh – Freitag, 16. Januar 2004 12:41 Uhr

> das funktioniert mit dem cat ja auch… warum nicht mit tar…

weil tar nicht cpio ist. Du erzeugst das Archiv mit cpio und willst es mit tar weiterverarbeiten. Man kann ja auch ein zip Archiv nicht mit arj behandeln. Ein Backup-Tool was tar und cpio kann ist pax. Siehe auch Postings dazu oder man pax (“apt-get install pax” auf debian).

Gruss, Ecaroh

tiefauslaeufer – Freitag, 16. Januar 2004 13:51 Uhr

das stimmt so aber nicht…

ist die cpio-datei auf platte gespeichert kann ich sie sehr wohl mit tar weiterverarbeiten… und lokal sogar pipen ohne daten auf der platte zu haben. nur sobald der gzip ins spiel kommt und der ssh, dann gibts probleme.

aber egal. es funktioniert ja jetzt!

Gruss Steffen