Re: Kopieren auf zwei Platten gleichzeitig

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Tue, 5 Jan 2010 14:00:31 +0100 (CET)

Hallo (und gutes Neues),

Ich muss Bernd voll zustimmen. Verzichte lieber auf das
unionfs und nimm tee(1) oder etwas Äquivalentes[*].
Auch würde ich das Update auf 8.x empfehlen; mein Eindruck
ist, dass Massenspeicher dort schneller sind und dass der
Stack insgesamt robuster ist.

Du solltest die beiden Platten auf jeden Fall an verschie-
denen USB-Controllern bzw. -Ports anschließen, nicht über
denselben Hub! Im Zweifel zeigt usbconfig(8) die Geometrie
(Controller, Hubs) unter FreeBSD 8 an. Dort sollten die
beiden Platten an zwei verschiedenen »EHCI root hubs«
hängen.

Das einzige, was bei mir seit dem Update auf 8-stable nicht
mehr geht, ist ein USB-PS/2-Adapter für meinen Trackball
(attacht an uhid statt ums). Das muss ich noch mal näher
untersuchen, was da schiefgeht.

Gruß
   Olli

[*] PS: Wenn man die zsh als Shell verwendet, geht es auch
ganz ohne tee(1), sondern mit dem Multi-Redirection-Feature
(ist per Default eingeschaltet, wenn die Shell als »zsh«
gestartet wird, ansonsten muss man es mit »setopt multios«
aktivieren):

# cd $QUELLE
# tar cf - . > >(tar xpf - -C $ZIEL1) > >(tar xpf - -C $ZIEL2)

Die Verzeichnisse $ZIEL1 und $ZIEL2 müssen schon existieren.
Das geht ebenso auch mit drei und mehr Zielen. Und statt
tar kann man natürlich auch cpio oder etwas anderes verwen-
den, es muss halt nur nach stdout schreiben bzw. von stdin
lesen können. Sogar dump + restore ist möglich.

Zum Verhalten im Fehlerfall (z.B. Dateisystem voll): Wenn
eines der beiden tar-Kommandos, die von stdin lesen, vor-
zeitig abbricht, dann bricht das erste tar, das nach stdout
schreibt, ab ( »Broken Pipe«). In dem Fall ist also auch
die andere Kopie unvollständig. Das kann auch passieren,
wenn man tee(1) verwendet.

Dieses Problem kann man dadurch umgehen, indem man jeweils
noch ein »cat > /dev/null« anhängt, damit die überzähligen
Daten abgeleitet werden und das »Broken Pipe« vermieden
wird. Also jeweils so (für $ZIEL1 und $ZIEL2):

 ... > >(tar xpf - -C $ZIELx ; cat > /dev/null)

Da das Kommando damit nun relativ unhandlich wird, lohnt es
sich, es in ein Skript oder Shell-Funktion zu verpacken.

-- 
Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M.
Handelsregister: Registergericht Muenchen, HRA 74606,  Geschäftsfuehrung:
secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün-
chen, HRB 125758,  Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart
FreeBSD-Dienstleistungen, -Produkte und mehr:  http://www.secnetix.de/bsd
"Share your knowledge.  It is a way to achieve immortality." -- The Dalai Lama
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 05 Jan 2010 - 14:00:56 CET

search this site