Re: Backup über Internet

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Mon, 12 Mar 2012 16:04:47 +0100 (CET)

Till Toenges wrote:
> Ich habe nur eine Datei die größer ist, rund 10 GB. Einige Programme
> packen die auch ein, schneiden dann aber bei 8 GB ab. Andere weigern
> sich gleich, die anzufassen. Bei cpio ging es auch nur mit -H pax. Aber
> damit will ich auch zufrieden sein. cpio passt mir sowieso ganz gut :-)

Ich hab's mal kurz getestet; tatsächlich scheinen nur tar(1)
und cpio mit pax-Format mehr als 8 GB zu schaffen. Wobei
das, was cpio als "pax"-Format bezeichnet, ein erweitertes
ustar-Format ist, wogegen das Tool pax(1) per Default das
ursprüngliche ustar-Format verwendet, das laut Doku sogar
ein Limit von nur 2 GB für archivierte Dateien hat.

Das ist leider alles ein bisschen verworren. Ein paar Infos
findet man in der Manpage libarchive-formats(5).

Du könntest Dir natürlich auch Dein eigenes Archivformat
ausdenken und ein kleines Tool dafür schreiben. Sollte kein
riesiger Aufwand sein; im wesentlichen musst Du nur den
Inhalt des struct stat, den stat(2) liefert, den originalen
Dateinamen und den Inhalt der Datei hintereinanderklatschen.

> Real habe ich nichts schlimmeres als Leerzeichen und UTF-8-Umlaute.

Dann würde ich mir keine Gedanken um Schlimmeres machen und
die einfachere Lösung verwenden, die auf Newlines verzichtet.
Entscheidend ist nur, dass es nicht abschmiert, falls doch
mal eine Datei mit Newline im Namen auftaucht, sonst könnte
man einen DoS-Angriff auf Dein Backup durchführen. Aber
wenn man aufpasst, ist das Schlimmste, was passieren kann,
dass nur die betreffende Datei nicht gesichert wird.

> Den IFS umzustellen und mit tr die Namen zu bearbeiten hatte ich auch
> überlegt, wäre wenigstens besser dokumentiert als der $0-Effekt.

Ja, so sehe ich das auch.

> > Wenn Du auf diese Weise (d.h. per Schleife in einem Shell-
> > Skript) mehr als nur eine handvoll Dateien sichern willst,
> > würde ich aus Performance-Gründen empfehlen, stattdessen
> > ein kleines Programm zu schreiben. Es muss ja nicht gleich
> > in C sein (wenn Du nicht fit darin bist); es genügt auch
> > schon in Python oder Perl. Damit erledigt sich dann auch
> > das Problem mit den Dateinamen ganz automatisch.
>
> Ein Programm in C war verlockend, mit den fts_* Funktionen habe ich auch
> gute Erfahrung gemacht. Im Sinne der schnelleren Entwicklung und weil
> die meiste Arbeit hier sowieso von externen Programmen erledigt wird,
> die ich mit Pipes verbinde, schien ein Shell-Script erstmal ausreichend.
> Das baue ich vielleicht mal in Ruhe aus, wenn der Ablauf perfektioniert ist.

Eine Shell-Schleife ist per-se nicht langsam, solange man
nur Built-ins verwendet. Aber in diesem Fall kommt man
damit leider nicht aus; Du benutzt offenbar stat, vis/unvis,
cpio, openssl und evtl. noch ein paar andere. Das macht
jedesmal ein fork+exec, was nicht so furchtbar effizient
ist. Für ein paar tausend Dateien mag es keine Rolle
spielen, vielleicht auch zehntausend. Aber sobald es in
den sechs- bis siebenstelligen Bereich geht, wirst Du ein
Problem haben.

Gruß
   Olli

-- 
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
"Python is an experiment in how much freedom programmers need.
Too much freedom and nobody can read another's code; too little
and expressiveness is endangered."
        -- Guido van Rossum
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Mon 12 Mar 2012 - 16:05:07 CET

search this site