Fehlerkorrekturinformationen zum weitergeleiteten Tar-Stream hinzufügen

Fehlerkorrekturinformationen zum weitergeleiteten Tar-Stream hinzufügen

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. […] redupeist Komprimierungstools wie gzipoder nachempfunden bzip2, fügt jedoch Redundanz hinzu, anstatt sie zu eliminieren. redupebearbeitet 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 redupein 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:

  1. Ich habe heruntergeladenredupe-master.zip von GitHub, entpackt und in das neu erstellte eingefügt redupe-master/.

  2. 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.

  3. autoreconf -ivf
    
  4. ./configure && make && sudo make install
    
  5. Ich konnte starten redupe, aber das Tool konnte nicht finden libredupe.so.0. Ich habe festgestellt, dass die relevanten Bibliotheken in sind /usr/local/lib/. Mit strace redupehabe 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, redupevon /usr/local/lib/nach `/usr/lib/ verschoben:

    sudo mv /usr/local/lib/libredupe.* /usr/lib/
    
  6. Ich habe auch festgestellt, dass neu installierte /usr/local/bin/redupeund /usr/local/bin/reundupeidentische 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

  1. Ich habe 1 GiB in /dev/urandomeine normale Datei weitergeleitet original.
  2. Ich habe es weitergereicht originalund redupedas Ergebnis als gespeichert original.rd.
  3. Ich habe eine Weiterleitung original.rddurchgeführt, tr ab xyum einige Bytes zu ändern, und das Ergebnis als gespeichert modified.rd.
  4. Ich habe sichergestellt, dass original.rdund modified.rdunterschiedlich sind (man kann cmpoder md5sumoder so etwas verwenden). Es ist sehr, sehr unwahrscheinlich, dass in 1 GiB zufälliger Daten kein aund kein vorhanden ist, daher ist dieser Schritt nicht wirklich erforderlich.b
  5. Ich habe es weitergereicht modified.rdund reundupedas Ergebnis als gespeichert result.
  6. Ich habe (mit cmp) überprüft, ob originalund resultidentisch 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 redupees 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

  • redupefunktioniert, 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 reundupesie zu korrigieren, druckt das Tool error 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 Anwenden reundupeeine andere Datei ohne Fehler von gab reundupe. Ich vermute nicht wirklich einen Fehler, durch Zufall habe ich es wahrscheinlich geschafft, eine Datei zu erstellen, die für gültig erschien reundupe. 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, redupewird redupeer mit einem fehlerhaften Stream arbeiten und ihn ordnungsgemäß verarbeiten. Müll rein, Müll raus; er reundupewird den ursprünglichen fehlerhaften Stream wiederherstellen. Wenn Ihr PC (oder was auch immer)WirklichWenn danach Probleme auftreten redupe, wird Ihnen das Tool höchstwahrscheinlich auch nicht helfen, da es nur Bit-Flips verarbeitet.

  • redupefunktioniert 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 redupezwischen gzipund einfügen aws, nicht vor gzip. Dann reundupewird beim Abrufen aus dem Backup vor stehen gunzip. Dies andersherum zu tun (also redupevor gzip, gunzipvor reundupe) ist fehlerhaft, weil:

    • (praktischer Grund) ein Bit-Flip führt zum gunzipScheitern (es prüft CRC) und die Daten können nicht einmal reundupekorrigiert werden. Aber selbst wenn Sie gunzipfortfahren 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+ reunduperichtig 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 nicht reundupe(in Ihrem Fall führt eine unentdeckte Beschädigung gunzipjedoch 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 redupees für Sie und --overheadIhre Wünsche gut ist und ob die Leistung akzeptabel ist.

verwandte Informationen