Est-il possible d'ajouter des codes de correction d'erreur (BCH, RS ou etc.) à un seul fichier?

12

Pour autant que je sache, les archives WinRAR peuvent contenir des ECC (codes de correction d'erreur), donc si l'archive est légèrement endommagée, elle peut être corrigée d'elle-même.

Par exemple, je peux d'abord encoder archives.tarsur archives.tar.ecc, puis le télécharger sur mon serveur. Si le fichier est légèrement endommagé après le téléchargement par le client, il peut être corrigé automatiquement sans télécharger à nouveau le fichier par décodage archives.tar.ecc. Je pense que ce sera une excellente idée si la connexion réseau est instable.

Je me demande s'il existe des logiciels (open source) exécutés sous Linux qui peuvent répondre à mes besoins.

Aucune suggestion?

Kevin Dong
la source
dans une certaine mesure, cela se produit déjà - le champ chksum d'en-tête de chaque fichier est la somme des octets constitutifs de cet en-tête - pour inclure le champ de taille. Beaucoup tarvont plus loin - GNU tarencode les trous de fichier clairsemés dans les métadonnées d'en-tête et lors de l'extraction par tout paxarchiveur compatible POSIX génère des fichiers contenant les informations nécessaires pour reconstruire le fichier, ou par GNU tardans le fichier clairsemé d'origine. Il utilise principalement des variables d'en-tête codées définissables comme spécifié par POSIX pour l' paxutilitaire w / -o.
mikeserv

Réponses:

6

J'ai eu ce même problème et j'ai trouvé que les solutions fournies dans l'autre réponse n'étaient pas acceptables car le programme / standard par2 implique la création de fichiers séparés pour effectuer la récupération et la vérification. Je, comme le demandeur d'origine, je pense, veux un seul fichier avec des codes de correction d'erreur.

J'ai trouvé le programme rsbep qui était dans le gestionnaire de paquets et j'ai trouvé le code nécessaire ici: https://www.thanassis.space/rsbep.html

Cela permet de créer un fichier avec les codes de correction d'erreur Reed-Solomon, puis de récupérer le fichier d'origine à partir de la version ECC, éventuellement corrompue.

Ethan
la source
rsbep est super! Mais c'est un peu différent: c'est un système d'exploitation entièrement figé, vous pouvez donc ajouter des fichiers à l'intérieur mais vous ne pouvez pas modifier ce qu'il y a à l'intérieur, et c'est un peu plus lourd à déplacer. Mais c'est une approche vraiment intéressante, utilisant FUSE et opensource.
gaborous
1
@gaborous, ce n'est pas vrai. Il existe une implémentation FUSE fs qui fonctionne de manière rsbeptransparente, mais ce n'est que par-dessus les scripts qui fonctionnent fichier par fichier.
nyov
6

Vous êtes intéressé par PAR2, qui utilise la correction d'erreur Reed-Solomon. parchive est la spécification du format de fichier ECC, pour Linux vous voudrez PyPar ou par2tbb , et sous Windows vous utilisez une interface graphique appelée QuickPar .

RAKK
la source
1
Les liens pour PyPar et par2tbb me semblent rompus. J'ai trouvé par2tbb ici
Drist
2
Je pense que PyPar n'est absolument pas lié à la correction d'erreurs.
mbarkhau
2

Si vous souhaitez séparer le fichier ecc de l'archive, vous pouvez utiliser pyFileFixity, un projet Python open source qui vise à fournir un système de protection de type PAR de nouvelle génération contre la corruption de bits.

Si vous souhaitez que la protection ecc soit incluse directement dans l'archive, vous pouvez utiliser le DAR opensource , une sorte de TAR de nouvelle génération, qui permet de générer à la fois des données non solides (c'est-à-dire, permet l'extraction partielle des archives corrompues) et ecc ( en utilisant PAR2) et l'isolement du catalogue (c'est-à-dire, sauvegarder une sauvegarde de l'arborescence des répertoires et des métadonnées du système de fichiers) directement dans les archives .dar.

généreux
la source
0

Un autre projet similaire en 2018 est Redupe qui semble fournir une correction d'erreur de fichier séparée et intégrée dans deux outils distincts:

Le premier outil, redupe, est modelé sur des outils de compression comme gzip ou bzip2, mais ajoute de la redondance au lieu de l'éliminer.

L'exemple de la page Web (modifié par souci de concision) ressemble à votre cas d'utilisation:

$ 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 peut ensuite être utilisé pour restaurer le fichier et éventuellement corriger de petites erreurs.

yuri
la source