
Ich verwende Amazon S3 Glacier Deep Archive, um Backups auf meinem Ubuntu-Rechner zu speichern. Mein Workflow läuft im Wesentlichen auf Folgendes hinaus:
tar cf - $FILES | gzip -3 --stdout | aws s3 cp - $TARGET
Ich denke, das funktioniert ganz gut, aber bei sehr großen Archiven (1 TB+) habe ich Angst, dass das gesamte Archiv unbrauchbar wird, wenn mein PC irgendwo einen Fehler macht oder etwas ausfällt. Idealerweise möchte ich diesem Ablauf eine Fehlerkorrekturfunktion hinzufügen.
Ich habe mir PAR2 angesehen, das anscheinend das tut, was ich will, mit einer Einschränkung: Es kann keine Pipe als Eingabe verwenden. Ich müsste das gesamte Archiv auf der Festplatte erstellen.DannFühren Sie es durch PAR2 aus und laden Sie dann alles hoch. Bei Archiven von über 1 TB ist dies im Hinblick auf den verfügbaren Speicherplatz nicht immer machbar, ganz zu schweigen davon, dass es den Prozess erheblich verlangsamt.
Ich konnte kein ähnliches Tool finden, um einem Datenstrom Informationen zur Vorwärtsfehlerkorrektur hinzuzufügen, ohne diese zuerst in einer Datei zu speichern. Wie kann ich das machen? Es spielt keine Rolle, ob eine Lösung die Informationen einer separaten Datei hinzufügt oder den Datenstrom ändert, um Redundanz hinzuzufügen.
Antwort1
Werkzeug:redupe
Ich habe ein Tool dafür gefunden: redupe
. Lesen Sie mehr darüber:Redupe: Vorwärtsfehlerkorrektur.
Dieser Beitrag stellt das
redupe
[…] Tool zur Vorwärtsfehlerkorrektur von Datenströmen vor. […]redupe
ist Komprimierungstools wiegzip
oder nachempfundenbzip2
, fügt jedoch Redundanz hinzu, anstatt sie zu eliminieren.redupe
bearbeitet die Daten direkt und wandelt sie in einen redundanten Zustand um, indem die redundanten Informationen inline zu den Originaldaten hinzugefügt werden.
Der ergänzende Befehl lautet reundupe
. Es handelt sich eigentlich nur um ein Werkzeug, und der Name, mit dem Sie es aufrufen, entscheidet darüber, was es tut.
Du kannst bekommenredupe
von GitHub.
Ich habe es geschafft, es redupe
in meinem Debian 12 zu kompilieren und zu testen. Einzelheiten siehe unten.
Zusammenstellung
Hinweis: Einige der hier beschriebenen Probleme können auf mangelnde Programmier- und Kompilierungserfahrung zurückzuführen sein oder darauf, dass ich vorher nicht alles richtig (oder gar nicht) konfiguriert habe.
Mein Betriebssystem ist Debian 12. Folgendes habe ich getan:
Ich habe heruntergeladen
redupe-master.zip
von GitHub, entpackt und in das neu erstellte eingefügtredupe-master/
.Durch Ausprobieren habe ich herausgefunden, dass ich die folgenden Pakete benötige:
automake
,make
,gcc
,libpopt-dev
,libtool
*.sudo apt-get update sudo apt-get install automake make gcc libpopt-dev libtool
* Zumindest habe ich diese Pakete ausprobiert und sie schienen alle wichtig.
-
autoreconf -ivf
-
./configure && make && sudo make install
Ich konnte starten
redupe
, aber das Tool konnte nicht findenlibredupe.so.0
. Ich habe festgestellt, dass die relevanten Bibliotheken in sind/usr/local/lib/
. Mitstrace redupe
habe ich festgestellt, dass das Tool mehrere Standorte überprüft (z. B./usr/lib/
), aber nicht/usr/local/lib/
. Ich habe alles, was mit zu tun hat,redupe
von/usr/local/lib/
nach `/usr/lib/ verschoben:sudo mv /usr/local/lib/libredupe.* /usr/lib/
Ich habe auch festgestellt, dass neu installierte
/usr/local/bin/redupe
und/usr/local/bin/reundupe
identische reguläre Dateien sind. Eine reguläre Datei reicht aus, der andere Name kann ein Symlink sein:(cd /usr/local/bin/ && sudo rm reundupe && sudo ln -s redupe reundupe)
Mein Test
- Ich habe 1 GiB in
/dev/urandom
eine normale Datei weitergeleitetoriginal
. - Ich habe es weitergereicht
original
undredupe
das Ergebnis als gespeichertoriginal.rd
. - Ich habe eine Weiterleitung
original.rd
durchgeführt,tr ab xy
um einige Bytes zu ändern, und das Ergebnis als gespeichertmodified.rd
. - Ich habe sichergestellt, dass
original.rd
undmodified.rd
unterschiedlich sind (man kanncmp
odermd5sum
oder so etwas verwenden). Es ist sehr, sehr unwahrscheinlich, dass in 1 GiB zufälliger Daten keina
und kein vorhanden ist, daher ist dieser Schritt nicht wirklich erforderlich.b
- Ich habe es weitergereicht
modified.rd
undreundupe
das Ergebnis als gespeichertresult
. - Ich habe (mit
cmp
) überprüft, oboriginal
undresult
identisch sind.
Das obige Verfahren verwendet mehrere reguläre Dateien. Mit einer reduzierten Anzahl regulärer Dateien sieht das Verfahren folgendermaßen aus:
</dev/urandom head -c 1G >original \
&& <original redupe | tr ab xy | reundupe | cmp - original
Erfolgreich cmp
(kein Fehler, Exit-Status 0) bedeutet, dass redupe
es funktioniert. Bei mir funktioniert es.
Ich habe auch ohne tr
( … | redupe | reundupe | …
) getestet, um zu sehen, ob alles in Ordnung ist, wenn überhaupt keine Beschädigung vorliegt. Das ist es.
Fazit, Anmerkungen
redupe
funktioniert, ist aber kein Allheilmittel. Lesen Sie weiter.Rufen Sie auf
redupe --help
, beachten Sie die Option-o
/--overhead
.Wenn die Daten zu beschädigt sind, um
reundupe
sie zu korrigieren, druckt das Toolerror reading input
: „Das ist etwas irreführend, seien Sie gewarnt.“Ich habe es geschafft, eine (relativ kleine) Datei mit zufälligen Daten zu finden, die mir nach Anwenden
redupe -o 1
(schwache Redundanz), Ändern (relativ stark) und Anwendenreundupe
eine andere Datei ohne Fehler von gabreundupe
. Ich vermute nicht wirklich einen Fehler, durch Zufall habe ich es wahrscheinlich geschafft, eine Datei zu erstellen, die für gültig erschienreundupe
. Andererseits wurden gelegentliche Bit-Flips problemlos korrigiert.Während gelegentliche Bit-Flips (und Byte-Flips) problemlos korrigiert wurden, wurden fehlende oder überzählige Bytes im Streamtödlich. Es scheint, dass das Tool nicht dafür ausgelegt ist, derartige Fehler zu korrigieren.
Sie haben geschrieben: „Ich mache mir Sorgen, wenn mein PC irgendwo einen Fehler macht.“ Wenn Ihr PC vorher einen Fehler macht,
redupe
wirdredupe
er mit einem fehlerhaften Stream arbeiten und ihn ordnungsgemäß verarbeiten. Müll rein, Müll raus; erreundupe
wird den ursprünglichen fehlerhaften Stream wiederherstellen. Wenn Ihr PC (oder was auch immer)WirklichWenn danach Probleme auftretenredupe
, wird Ihnen das Tool höchstwahrscheinlich auch nicht helfen, da es nur Bit-Flips verarbeitet.redupe
funktioniert innerhalb einer Pipe und das ist, was Sie wollten. Das bedeutet aber auch, dass die Daten in einem relativ kleinen Fenster verarbeitet werden müssen. Mehrere beschädigte Bytes, die dicht beieinander liegen, sind schlimmer als die gleiche Anzahl beschädigter Bytes, die über eine große Datei verstreut sind.Sie möchten
redupe
zwischengzip
und einfügenaws
, nicht vorgzip
. Dannreundupe
wird beim Abrufen aus dem Backup vor stehengunzip
. Dies andersherum zu tun (alsoredupe
vorgzip
,gunzip
vorreundupe
) ist fehlerhaft, weil:(praktischer Grund) ein Bit-Flip führt zum
gunzip
Scheitern (es prüft CRC) und die Daten können nicht einmalreundupe
korrigiert werden. Aber selbst wenn Siegunzip
fortfahren könnten, gibt es einen anderen Grund, und zwar …(theoretischer Grund) Komprimierung funktioniert durch das Erkennen von Mustern und Ähnlichkeiten, sodass Redundanz reduziert wird. Sie möchten keine Redundanz hinzufügen und sie sofort wieder entfernen. Sie möchten die Redundanz Ihrer tatsächlichen Daten reduzieren, dann eine absichtliche Redundanz hinzufügen undbehalte es.
Im Moment scheint es mir
redupe
+reundupe
richtig und zuverlässig zu funktionieren, wenn keine Beschädigung vorliegt; es kann kleinere Beschädigungen (veränderte Bytes) reparieren. Beschädigungen, die offensichtlich „die Redundanz überschreiten“, können erkannt werden oder auch nichtreundupe
(in Ihrem Fall führt eine unentdeckte Beschädigunggunzip
jedoch wahrscheinlich zum Ausfall). Mit anderen Worten, das Tool beschädigt keine guten Daten und gibt Ihnen einige Chancen, gute Daten aus beschädigten Daten wiederherzustellen. Meiner Meinung nach ist der Nettowert des Tools auf jeden Fall positiv.Führen Sie Ihre eigenen Tests durch und entscheiden Sie, ob
redupe
es für Sie und--overhead
Ihre Wünsche gut ist und ob die Leistung akzeptabel ist.