È possibile aggiungere codici di correzione errori (BCH, RS o ecc.) A un singolo file?


12

Per quanto ne so, gli archivi WinRAR possono contenere ECC (codici di correzione errori), quindi se l'archivio è leggermente danneggiato, può essere corretto da solo.

Ad esempio, posso prima codifica archives.tara archives.tar.ecc, e poi caricarlo sul mio server. Se il file è leggermente danneggiato dopo il download da parte del client, può essere corretto automaticamente senza scaricare nuovamente il file mediante decodifica archives.tar.ecc. Penso che sarà una grande idea se la connessione di rete è instabile.

Mi chiedo se esiste un software (open source) eseguito su Linux in grado di soddisfare le mie esigenze.

Eventuali suggerimenti?


in una certa misura, ciò accade già - il campo chksum dell'intestazione di ciascun file è la somma dei byte costitutivi di quell'intestazione - per includere il campo dimensione. Molti taraltri vanno oltre: GNU tarcodifica i fori dei file sparsi nei metadati dell'intestazione e all'estrazione da qualsiasi paxarchiviatore compatibile con POSIX genera file contenenti le informazioni necessarie per ricostruire il file o da GNU tarnel file sparse originale. Utilizza principalmente le variabili di intestazione codificate definibili come specificato da POSIX per l' paxutilità w / -o.
Mikeserv,

Risposte:


6

Ho avuto lo stesso problema e ho scoperto che le soluzioni fornite nell'altra risposta non erano accettabili poiché il programma / standard par2 prevede la creazione di file separati per eseguire il ripristino e la verifica. Io, come il richiedente originale, penso, voglio un singolo file con codici di correzione degli errori.

Ho trovato il programma rsbep che era nel gestore dei pacchetti e quindi ho trovato il codice necessario qui: https://www.thanassis.space/rsbep.html

Ciò consente di creare un file con errori Reed-Solomon che correggono i codici e quindi recuperare il file originale dalla versione ECC, possibilmente corrotta.


rsbep è fantastico! Ma è un po 'diverso: è un intero sistema operativo bloccato, quindi puoi aggiungere file all'interno ma non puoi modificare ciò che è dentro, ed è un po' più complicato spostarsi. Ma è un approccio davvero interessante, usando FUSE e opensource.
gaborous

1
@gaborous, non è vero. Esiste un'implementazione di FUSE che utilizza in modo rsbeptrasparente, ma è solo in cima agli script che funzionano su base file per file.
nyov

6

Sei interessato a PAR2, che utilizza la correzione degli errori Reed-Solomon. parchive è la specifica del formato di file ECC, per Linux si desidera PyPar o par2tbb e su Windows si utilizza una GUI chiamata QuickPar .


1
I collegamenti per PyPar e par2tbb mi sembrano spezzati. Ho trovato par2tbb qui
Drist

2
Penso che PyPar non sia completamente correlato alla correzione degli errori.
mbarkhau,

2

Se vuoi avere il file ecc separato dall'archivio, puoi usare pyFileFixity, un progetto Python open source che mira a fornire un sistema di protezione simile a PAR di nuova generazione contro la corruzione dei bit.

Se vuoi che la protezione ecc sia inclusa direttamente nell'archivio, puoi usare opensource DAR , una sorta di TAR di nuova generazione, che consente di generare sia non solidi (ovvero, consente l'estrazione parziale di archivi corrotti) che ecc ( usando PAR2) e l'isolamento del catalogo (ovvero, salvare un backup dell'albero dei registri e dei metadati del filesystem) direttamente negli archivi .dar.


0

Un altro progetto simile del 2018 è Redupe che sembra fornire una correzione degli errori di file sia separati che incorporati in due strumenti separati:

Il primo strumento, redupe, è modellato su strumenti di compressione come gzip o bzip2, ma aggiunge ridondanza invece di eliminarlo.

L'esempio nella pagina Web (modificato per brevità) è simile al tuo caso d'uso:

$ redupe home-backup.tar.gz
$ ls -l
-rw------- 1 rescrv 5625162218 home-backup.tar.gz
-rw-r--r-- 1 rescrv 6433996800 home-backup.tar.gz.rd

reundupe può quindi essere utilizzato per ripristinare il file ed eventualmente correggere piccoli errori.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.