Sektoren auf einem Blockgerät neu anordnen?

481
Matei David

Ich überlege mir, einige Daten auf DVDs / BDs zu sichern. (Ich kenne DVDisaster.) Ich habe irgendwo gelesen, dass die äußeren Sektoren auf einer DVD eher abgenutzt werden als die inneren. Dies deutet darauf hin, dass im Laufe der Zeit die Blöcke in der zweiten Hälfte eines Bildes wahrscheinlicher beschädigt werden als die Blöcke in der ersten Hälfte. Meine Frage ist also, gibt es eine Möglichkeit, dieselben Daten auf 2 DVD-Images zu schreiben, so dass

  1. Sie können beide DVDs mounten, möglicherweise in 2 Schritten (z. B. eine auf der DVD gespeicherte Iso-Datei mounten), ohne jedoch zuerst alles auf HD zu kopieren und zu manipulieren
  2. Die Hauptdaten sollten in deutlich unterschiedlicher Reihenfolge auf die 2 DVDs geschrieben werden

Wenn mir nicht klar ist, könnte hier eine mögliche Lösung sein.

Angenommen, für einen Moment gab es einen Linux-Treiber, der ein ISO-Image rückwärts laden konnte. Also gebe ich ihm eine iso-Datei, und wenn er den 1. Sektor wünscht, liest er die letzten 2048 Bytes der Datei rückwärts statt der ersten 2048 Bytes in normaler Reihenfolge. Ich weiß nicht, ob es einen solchen Treiber gibt, aber wenn dies der Fall wäre, wäre dies eine Lösung für mein Problem, weil ich dies tun könnte: meine Daten in ein ISO-Image einfügen; Berechne ein zweites Bild als erstes rückwärts; kapseln Sie jedes Bild in ein einfaches UDF-Dateisystem mit nur einer Datei; Schreiben Sie die beiden UDF-Dateisysteme auf verschiedene DVDs. Wenn ich jetzt eine der beiden DVDs einstecke, könnte ich einfach die einzelne Iso-Datei einhängen, um meine Daten wiederzuerlangen. Außerdem würden die Daten auf unterschiedliche Art und Weise auf die 2 DVDs geschrieben. Wenn also beide DVDs das letzte Drittel ihrer Sektoren verlieren, könnte ich trotzdem alles abrufen (per Hand,

Andere mögliche Lösungen wären ein allgemeiner Treiber, um Blöcke beliebiger Größe in einer beliebigen Blockvorrichtung zu permutieren / drehen / neu zu ordnen. Oder gibt es eine Möglichkeit, eine Datei in einem UDF-Dateisystem in einer bestimmten Reihenfolge von Sektoren zu speichern? Da es sich bei UDF um ein vollwertiges Dateisystem handelt, ist dies durchaus möglich, aber gibt es dafür ein Werkzeug?

Vielen Dank!!

Edit : Wie ich in der ersten Antwort erläutert habe, möchte ich DVDisaster nicht ersetzen, sondern ergänzen. Erwägen Sie zwei Strategien für die Sicherung von 4G-Daten. Strategie A: Verwenden Sie 2 identische DVDs mit jeweils 15% ecc von DVDisaster. Strategie B: Verwenden Sie 2 DVDs mit jeweils 15% ecc, aber mit der zusätzlichen Permutationssache, die ich oben erwähnte (auf einer der 2 DVDs). Ich behaupte, dass aufgrund der Abnutzungsmuster von DVDs (insbesondere der Korrelation von Fehlern) nach einer bestimmten Zeit die Wahrscheinlichkeit einer vollständigen Erholung von B signifikant größer ist als von A (alle anderen Dinge sind gleich).

Edit2 : Um meine Behauptung zu untermauern, dass DVDisaster kein Heilmittel für alles ist, folgt ein Skript, das zeigt, wie DVDisaster mit 33% ECC-Daten Datenverlust mit nur 1,3% Korruption erleidet. Der offensichtliche Widerspruch ist, dass 33% nur für die Best-Best-Bestechung gilt, nicht für jede Bestechung. Zu Ihrer Information, ich erstelle eine Datei, die das gesamte Dateisystem abdeckt test.1.udf, nur den letzten Sektor in der Datei auf Null setzen test.2.udf, ecc-Daten für beide berechnen und die Sektoren einschließlich der ecc-Daten vergleichen. Der Punkt ist, wenn test.1.udfIhre Daten verloren gehen und Sie die Sektoren verlieren, die unterschiedlich sind und nur diese, dann können Sie möglicherweise nicht wiederherstellen, test.1.udfda dies test.2.udfeine andere Möglichkeit ist.

n_blocks=8192 tdir=$(mktemp -d) mkudffs -b 2048 test.1.udf $n_blocks sudo mount test.1.udf $tdir -o bs=2048 sudo chown $USER.$USER $tdir n=$(df -B 2K $tdir | tail -n 1 | awk '') let n-=1 dd if=/dev/urandom of=$tdir/file bs=2K count=$n 2>/dev/null last=$(od <$tdir/file -Ad -t x1 | tail -n 2 | head -n 1 | cut -d ' ' -f 2-) sudo umount $tdir start_of_last_block=$(od <test.1.udf -Ad -t x1 | grep -A 1 "$last" | tail -n 1 | awk '') last_block=$(($start_of_last_block / 2048)) dd if=test.1.udf bs=2K count=$(($last_block - 1)) >test.2.udf 2>/dev/null dd if=/dev/zero bs=2K count=1 >>test.2.udf 2>/dev/null dd if=test.1.udf bs=2K skip=$last_block count=$(($n_blocks - $last_block)) >>test.2.udf 2>/dev/null n_blocks_with_ecc=$(echo "$n_blocks * 133 / 100" | bc) echo "add dvdisaster ecc data, using in total $n_blocks_with_ecc" #run dvdisaster on the 2 files, then... n_blocks_different=$(for i in $(seq 0 $(($n_blocks_with_ecc - 1))); do if [ $((($i / 100) * 100)) -eq $i ]; then echo "$i..." >&2 fi diff -q <(dd if=test.1.udf bs=2K skip=$i count=1 2>/dev/null) \ <(dd if=test.2.udf bs=2K skip=$i count=1 2>/dev/null) >/dev/null || echo $i done | wc -l) echo "number of blocks different: $n_blocks_different / $n_blocks_with_ecc ($(echo "scale=6; $n_blocks_different / $n_blocks_with_ecc * 100" | bc)%)" 

Ausgabe:

number of blocks different: 145 / 10895 (1.330800%) 
4
Eine andere mögliche Lösung wäre, die Nutzdaten auf einem linearen virtuellen MD-Array zu speichern, das auf einige Dateien (z. B. 4) aufgeteilt ist. Dann könnte ich diese Dateien in unterschiedlicher Reihenfolge auf die 2 DVDs schreiben. Das Problem dabei ist, dass ich für jeden Block ein Loopback-Gerät benötige, um das Array zu mounten, und diese sind begrenzt. Ich könnte dies auch nur mounten, wenn mein System md ausführt (im Gegensatz zu einer künstlich fragmentierten Datei in einer UDF, die jedes System verstehen sollte). Matei David vor 11 Jahren 1
Ich verstehe den Befehl nicht: "dd if = test.1.udf bs = 2K überspringen = $ last_block count = $ (($ n_blocks - $ last_block)) >> test.2.udf 2> / dev / null" . Wofür ist das? Die vorherigen beiden erstellten zunächst test.2.udf wie test.1.udf mit nur einem Block weniger, und dann fügten Sie einen Nullblock hinzu. FarO vor 9 Jahren 0
Es scheint mir auch (wenn ich es richtig verstanden habe), dass Sie 1) test.1.udf generieren sollten. 2) ECC hinzufügen. 3) beschädigen Sie es. 4) Wiederherstellen Sie es mit DVD-Disaster. 5) Überprüfen Sie die Anzahl der nicht korrigierbaren Sektoren. Oder habe ich das Ziel Ihres Tests falsch verstanden? FarO vor 9 Jahren 0

1 Antwort auf die Frage

3
David

Das von Ihnen beschriebene Problem hat bereits eine elegantere und effizientere Lösung: Reed-Solomon-Fehlerkorrektur . Dies geschieht durch Einfügen von Fehlerkorrekturcode am Ende des Datenträgers, sodass Sie eine bestimmte Menge der Daten von beliebigen Speicherorten auf dem einzelnen Datenträger verlieren und trotzdem die gesamte Datei wiederherstellen können.

Dies ist möglich, da der RS-Decoder nicht zwischen Benutzerdaten und Fehlerkorrekturdaten unterscheidet. In der Ansicht des RS-Decoders ist jeder Block eine Folge von 100 Bytes, aus der eine beliebige Teilmenge von 20 Bytes wiederhergestellt werden kann.

Während bei einigen Teilen des Datenträgers wahrscheinlicher Daten verloren gehen, kann der Datenverlust dennoch an einem beliebigen Ort auftreten. Bei der beschriebenen Methode mit zwei Festplatten gehen Daten verloren, wenn zwei fehlerhafte Sektoren überlappen . Bei den höheren Datenverlusten wäre dies ziemlich üblich. Im Gegensatz dazu können Sie mit der Reed-Solomon-Fehlerkorrektur den Verlust von 14,3% (Normalmodus) oder 33,5% (Hochmodus) der Festplatte ohne Probleme beheben.

DVDisaster ist genau dafür konzipiert und kann Ihre Anforderungen perfekt erfüllen. Wenn Sie besonders paranoid vorgehen, können Sie die Redundanz auf Hoch (oder benutzerdefiniert) setzen und dabei weniger Speicherplatz und eine höhere Zuverlässigkeit als bei zwei Festplatten verwenden.

Glückliche Unterstützungen!

Erwähnen Sie auch "par2";) 0xC0000022L vor 11 Jahren 0
Ich dachte darüber nach, aber ich war mir nicht sicher, wie es funktionieren würde, wenn Sie Dateien mit mehreren CDs hätten. Ich wollte auch die Länge gering halten. David vor 11 Jahren 0
Danke für die Antwort, aber mit meinem Schema wollte ich DVDisaster nicht ersetzen, nur um es zu ergänzen. Matei David vor 11 Jahren 0
Some issues with what you said: 1. DVDisaster doesn't insert parity at "random" spots, but only at the end- I tested it. If you `diff -qb <(dd if=orig.iso bs=2K count=$x) <(dd if=parity.iso bs=2K count=$x)` with `x` equal to number of sectors in `orig.iso`, the will be equal. Matei David vor 11 Jahren 0
2. I am 90% sure that the redundancy guarantee you mention (eg, 15%) means: "under the best circumstances, if 14.99% errors occur, you can recover them all; also, if 15.01% errors occur, you can certainly not recover them all." That's different than what you seem to suggest: "for every possible 14.99% errors, you can recover them all." Maybe `par2` does that, but I bet (like I said, it's an informed guess) that to be efficient, DVDisaster splits the input in clusters and protects clusters independently of each other. To lose data, you only need to lose 15.01% from 1 cluster & its parity. Matei David vor 11 Jahren 1
Meiner Meinung nach ist DVDisaster, dass es sehr nützlich ist und völlig ausreichend ist, wenn die Fehler auf jeder DVD "zufällig" sind. Aber IRL sind sie nicht. Nach meiner Erfahrung mit mehr als 5 Jahre alten DVDs, die ich zu sichern versuchte, hatten 90% dieser Fehler nur in der zweiten Hälfte (äußere Schichten). Matei David vor 11 Jahren 0
Sie haben zwar Recht, wo sich die Daten befinden, dies hat jedoch keine Auswirkungen auf die Wiederherstellungsrate, da der Reed-Soloman-Decoder nicht zwischen Benutzerdaten und Fehlerkorrekturdaten unterscheidet. In diesem Fall können Sie von überall aus bis zu 15% der Daten verlieren ohne Daten verlieren (wenn aber 15,01% sind, verlieren Sie alles). Ich werde die Antwort aktualisieren, um dies zu reflektieren. http://dvdisaster.net/de/qa.html#eccpos David vor 11 Jahren 0
Ich fügte ein Beispiel hinzu, das zeigt, dass die Behauptung, dass "15% Korruption" wiederhergestellt werden sollte, falsch ist. Matei David vor 11 Jahren 0
Ich bezog mich auf die Art der Korruption, die bei normalem Gebrauch auftritt, nicht auf das, was passiert, wenn Sie alle Fehler absichtlich in denselben ECC-Block einfügen. Dieser Test hat wenig Ähnlichkeit mit der Art und Weise, wie sich Disketten im wirklichen Leben verschlechtern. Versuchen Sie, Daten auf eine Festplatte zu legen und sie dann zu verkratzen, wenn Sie einen realistischeren Test wünschen. http://dvdisaster.net/de/qa31.html David vor 11 Jahren 0
Meine Frage betraf nicht DVDisaster. Unabhängig davon, wie gut jede einzelne DVD geschützt wird, bieten 2 DVDs nach meinem Schema (Permutation + DVDisaster) einen besseren Schutz als 2 identische DVDs, die nur DVDisaster enthalten. Der Grund: Fehlerbilder auf 2 DVDs sind nicht unabhängig voneinander. Wenn DVD1 ein Fehlermuster entwickelt, das zu Datenverlust führt, hat DVD2 eine hohe Chance, das gleiche Fehlermuster zu entwickeln. Wenn DVD2 mit DVD1 identisch ist, verlieren Sie beide. Wenn für DVD2 eine Permutation verwendet wird, verlieren Sie möglicherweise einige Sektoren auf DVD1 und andere auf DVD2, können jedoch trotzdem alle Daten durch Kombinieren rekonstruieren. Matei David vor 11 Jahren 0
Wenn Sie der Meinung sind, dass mangelnde Redundanz zu Datenverlusten führen wird, besteht die Lösung darin, die Einstellung der Redundanz zu erhöhen und nicht eine völlig neue Methode zum Speichern von Daten zu entwickeln. David vor 11 Jahren 1
Wie oben in meinem Argument "Rücksichtslos ..." erläutert, kann ich die Redundanz in meinem Schema genauso stark erhöhen und DVDisaster wieder alleine schlagen. Außerdem war meine ursprüngliche Frage nicht "Wie werden Daten gesichert?" oder "Wie funktioniert DVDisaster?". Dies scheinen die einzigen Fragen zu sein, die bisher beantwortet wurden. Matei David vor 11 Jahren 0
Reed-Solomon ECC ist bei der Bereitstellung von Redundanz pro Byte effizienter als naive Datenduplizierung. Sie wollten einen Weg, um sicherzustellen, dass Ihre Daten sicher sind, und ich habe es Ihnen gesagt. Wenn Sie vermeiden möchten, eine gut getestete Lösung für ein System zu verwenden, das niemand verwendet (und möglicherweise nicht existiert), weil es nicht so gut ist, sind Sie auf sich alleine gestellt. David vor 11 Jahren 0
Sie scheinen es wirklich nicht zu verstehen ... Zum dritten Mal: ​​Ich möchte RS ECC ergänzen, nicht nur Daten duplizieren. Wie im zweiten Satz meiner ursprünglichen Frage ausgeführt, frage ich nicht nach Details zu DVDisaster. Matei David vor 11 Jahren 0
"Ich bin zu 90% sicher, dass die von Ihnen erwähnte Redundanzgarantie (z. B. 15%) Folgendes bedeutet:" Unter den besten Umständen können bei einem Fehler von 14,99% alle Fehler behoben werden. Wenn 15,01% -Fehler auftreten, können Sie sie sicherlich nicht alle wiederherstellen "-> Lesen Sie hier die Fußnote: http://dvdisaster.net/de/qa31.html Sie sagt genau dasselbe: Jeder Block ist unabhängig und wenn Sie haben zu viele Fehler in einem, Sie verlieren alles. Sie werden jedoch gleichmäßig auf der Diskette verteilt, und ich frage mich, wie Ihr Beispiel (siehe erster Beitrag) mit nur künstlichen Schäden am Ende des Bildes einen Verlust verursachen kann Daten. FarO vor 9 Jahren 0
Ich denke auch, dass Par2 tatsächlich (bei unbeschädigten Par2-Ecc-Dateien) JEDEN Schaden im gesamten Archiv wiederherstellen kann, vorausgesetzt, die Gesamtzahl der beschädigten Sektoren ist geringer als die Paritätsdaten. FarO vor 9 Jahren 0