Re: Backup über Internet

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

Till Toenges <tt(at)kyon.de> wrote:
> [...]
> Ich habe verschiedene Archivierungsmethoden ausprobiert, um Dateien mit
> möglichst vielen Informationen zu erhalten, genauso wie Devices,
> symbolische Links, Verzeichnisse und so weiter. Ich habe nur ein Format
> gefunden, dass geeignet war und auch bei großen Dateien über 8 GB noch
> funktioniert, das ist cpio -H pax. Das Programm pax selbst konnte ich
> nicht dazu bewegen, Dateien über 8 GB anzunehmen. Habe ich da was
> übersehen, oder ist das halt so?

Ich dachte eigentlich, dass kein einziges der unter BSD
üblichen Tools ein praxisrelevantes Größenlimit hat, und
erst recht nicht bei 8 GB. Ich habe allerdings noch nicht
versucht, eine so große Datei mit pax einzupacken, daher
kann ich's nicht mit Sicherheit sagen. Ich kann's aber
bei Gelegenheit mal ausprobieren.

Wie dem auch sei, cpio ist sicherlich keine schlechte Wahl.

> Die Dateinamen haben mir ein paar Probleme gemacht. find kennt -print0,
> aber das kriege ich nicht in eine while read Schleife der Shell. Ich
> brauche die Namen für den Index sowieso später mit vis überarbeitet,
> aber erstmal musste ich die einzeln bekommen, und habe als
> Newline-und-alle-sonstigen-Sonderzeichen-kompatibles-Konstrukt nur
> folgendes machen können:
>
> find BLAHBLAH -print0 | xargs -0 -n 1 -s 65536 sh -c 'echo -n "$0" | vis
> -w ; echo' | while read -r FILE ; do ....
>
> Das $0 an dieser Stelle so funktioniert, habe ich einfach durch
> ausprobieren herausgefunden. Ganz geheuer ist mir das nicht.

Das ist auch eher ein Nebeneffekt. Eigentlich ist das erste
Argument der Name eines auszuführenden Skripts, den die Shell
dann als $0 verwendet. Da Du aber die Option -c verwendest,
führt die Shell das Kommando im nachfolgenden String aus und
versucht nicht, ein Skript zu finden und auszuführen. Ob das
so auch in Zukunft immer funktioniert, kann ich nicht genau
sagen, aber ich würde mich nicht darauf verlassen.

> Gibt's da echt nichts eleganteres, was auch bei verrückten Dateinamen
> noch funktioniert?

Hast Du tatsächlich Dateien, die Newlines im Namen haben?
Sowas gibt es bei mir nicht. Ich mache das dann einfach
wie folgt:

IFS="
"
find $DIR | while read -r FILE; do ...

Der Trick ist, IFS nur auf ein Newline zu setzen (Default
ist Space + Tab + Newline). Dadurch werden ausschließlich
Newlines als Trenner von der Shell genommen. Das "read"
lässt dann alles andere unangetastet, daher funktioniert
es mit beliebigen Zeichen, außer halt mit Newlines.

Falls Du doch irgendwo Newlines in Dateinamen hast, gibt
es noch die Möglichkeit, die Newlines durch ein anderes
Zeichen zu ersetzen, von dem Du weißt, dass es nicht
vorkommt. Kandidaten wären zum Beispiel Escape (ASCII 27
= oktal 033), ASCII 1 oder ein paar andere. Für Escape
sähe das so aus:

IFS="
"
find . -print0 | tr '\n\0' '\033\n' | while read F; do ...

In $F sind dann alle Newlines durch Escape-Zeichen ersetzt.
Mit tr, sed, awk oder was auch immer kannst Du sie wieder
zurückwandeln, wenn nötig.

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.

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
(On the statement print "42 monkeys" + "1 snake":)  By the way,
both perl and Python get this wrong.  Perl gives 43 and Python
gives "42 monkeys1 snake", when the answer is clearly "41 monkeys
and 1 fat snake".        -- Jim Fulton
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 - 12:25:05 CET

search this site