Mir ist heute klar geworden, daß bzip2
- oder gzip
-komprimierte Tarballs auf DVDs eine äußerst schlechte Verpackung für Backups sind, da die Komprimierung dafür sorgt, daß ein kleiner Bitfehler an irgendeiner Stelle den ganzen Rest des Archivs unlesbar machen kann.
Ein wenig Recherche ließ mich schnell damit liebäugeln, meine Tarballs in afio
-Archive umzuwandeln. afio
komprimiert jede Datei einzeln und erzeugt auf diese Weise wesentlich fehlertolerantere Archive als tar -j
. Leider gibt es nur eine wirklich universelle Möglichkeit, Archive verschiedener Formate ineinander umzuwandeln: altes Archiv vollständig entpacken, neues Archiv zusammenpacken. Dieser Weg ist nun allerdings für viele meiner Backup-Tarballs inakzeptabel, weil ich genügend Platz auf der Festplatte selten habe. Effizient (d.h. ohne ständiges Durchsuchen des Ursprungstarballs von Anfang an) kriegt man es anders auch sehr wahrscheinlich nicht hin, außer man schreibt sich ein eigenes Programm dafür, das den Tarball selbst Stück für Stück verarbeitet.
Ein Glück, daß Python solcherlei Dinge von Haus aus kann. Der folgende Code macht aus einem Tarball (erstes Befehlszeilenargument) ein cpio
-Archiv, in dem die Dateien jeweils mit lzma
komprimiert wurden. afio
kann solche Archive direkt entpacken (afio -iZP lzma
).
#! /usr/bin/env python
import os
import subprocess
import sys
import tarfile
tar = tarfile.open(sys.argv[1], "r|*")
afio_name = sys.argv[2]
cpio = subprocess.Popen(["cpio", "-o", "-c0", "--file=%s" % afio_name])
for info in tar:
tar.extract(info)
file_name = info.name
if info.isfile():
os.spawnlp(os.P_WAIT, "lzma", "lzma", "-S", ".z", info.name)
file_name += ".z"
cpio = subprocess.Popen(["cpio", "-o", "-c0A", "--file=%s" % afio_name], stdin=subprocess.PIPE)
cpio.communicate(file_name + "\x00")
cpio.stdin.close()
cpio.wait()
if not info.isdir():
os.unlink(file_name)
tar.close()
Comments
Igitt. Python. CL hat doch auch eine Archiv-Bibliothek.
Ich halte DVD's ehrlichgesagt überhaupt nicht für eine gute Backup-Möglichkeit. Vielleicht wäre eine große externe Festplatte gut, oder ein Magnetband (mit Letzterem habe ich aber auch nie gearbeitet).
Ich frage mich, ob es vielleicht sinnvoll sein kann, Daten zweimal auf einen Datenträger zu speichern - wenn die einen kaputtgehen, sind die anderen noch da - vielleicht irgendwie in einer durcheinandergemischten gegenläufigen gechunkten Reihenfolge oder so.
Am Besten dürften wohl Lochkarten aus Metall sein - da sind die Bits makroskopische Objekte ^^.
@Christoph:
Es ist wahr, daß DVD-R keine guten Backupmedien sind. DVD-RAM sind sicherheitstechnisch ganz okay, aber auch ihnen mangelt es bekanntlich an Kapazität.
Am liebsten würde ich auf MiniDV-Kassetten sichern. Leider benötigt man dafür einen Camcorder mit FireWire-Eingang. Die hierzulande erhältlichen erschwinglichen Modelle haben, scheint's, stets nur einen FireWire-Ausgang.
Für ernsthafte Backups wirklich wichtiger Daten gäbe es noch Amazon S3.
Bezüglich der Wahl von Python für dieses Skript: Selbst, wenn die von Dir referenzierte CL-Bibliothek Tarballs stückweise lesen kann -- was ich nicht weiß -- so ist Python trotzdem immer noch besser geeignet, um UN*X-Shell-Pipelines zu basteln, wie ich es hier getan habe. Lisp ist für fast alles super, aber die Betriebssystemintegration ist nicht optimal. Dafür ist die Sprache einfach zu plattformneutral. (Man schaue sich nur die Pfadnamenmechanismen an! Da kommen Funktionen vor, deren Bedeutung man als UN*X- oder Windows-Mensch gar nicht versteht. Für irgendwelche exotischen Betriebssysteme werden sie wohl gut sein.)
Den Blog-Eintrag nochmal anschauend ist mir aufgefallen, dass Christophs Vorschlag Daten redundant zu speichern vielleicht auch über ein Tool realisierbar wäre, das ein (komprimiertes) Archiv wieder in einer Kodierung mit Fehlerkorrektur speichert.
Ist wohl ungewöhnlich so was auf Software-Ebene zu machen. Ob es solche Tools wohl gibt?
Um Daten redundant zu speichern, gibt es das Parchive-Format: http://parchive.sourceforge.net/
Könnte durchaus eine gute Idee sein, das für Backups zu verwenden, vielleicht sogar auf von den eigentlichen Backupmedien getrennten Datenträgern.
Submit a comment
Note: This website uses a JavaScript-based spam prevention system. Please enable JavaScript in your browser to post comments. Comment format is plain text. Use blank lines to separate paragraphs.