データの一部が破損しても破損を検出・修復できる、「誤り訂正」という技術がある。有名なものだと、rarのリカバリレコードやQRコードで誤り訂正の技術が使用されている。
par2コマンドを使用すると、任意のファイルに対して、誤り訂正用のリカバリファイルを作成することができる。
1. インストール
LinuxのほとんどのディストリビューションやMacでは、パッケージマネージャでインストールできるはず。DebianやUbuntuなら、
sudo apt install par2
(なお、パッケージ名はDebianやUbuntu系では「par2」だが、RHEL系、Arch系、Macなどでは「par2cmdline」となっているらしい)
2. リカバリファイルの作成(基本)
以下では仮に、対象ファイルの名前を「file」としておく。par2 create file
このコマンドを実行すると、拡張子が「.par2」のファイルがfileと同じディレクトリに作成される(.par2ファイルは複数作成されるが、規定の動作なので心配いらない)
3. リカバリファイルによるファイルの検証、修復
作成したpar2ファイルと、検証・修復対象ファイルを同じディレクトリに置く。ファイル名はもとと同じにしておく。3.1 検証
par2 verify *.par2
検証対象が元ファイルと同一なら、「All files are correct, repair is not required.」のような結果が出力されるはず。
破損している場合、「Repair is possible.」もしくは「Repair is not possible.」のような結果が出力される。前者の場合は修復が可能。
3.2 修復
par2 repair *.par2
修復可能な場合、これでファイルが修復される。修復後のファイルの名前はもとのファイル名と同じになる。修復前の破損したファイルは「(ファイル名).1」のようなファイル名に変更される。
4. リカバリファイル作成時のオプション
- -r(数字)で、元データに対するリカバリファイルのサイズを指定できる(単位は%、デフォルトでは5%)。たとえば5%の場合、ファイルのおよそ5%以下までなら破損しても修復できる。10%ならファイルの10%が破損しても修復できる。
par2 create -r10 file
- -n(数字)で、作成するリカバリファイルの数が指定できる。(「インデックスファイル」は必ず作成されるため、指定した数字+1だけの.par2ファイルが作成されることになる)
par2 create -r10 -n1 file
ちなみに、リカバリファイルを複数に分けるのは、配布するさいに通信量を減らすためである(破損が小さい場合、リカバリファイルをすべて使わなくても修復できるような仕組み)。おそらく帯域幅が非常に狭かった時代に考えられた工夫なので、現代なら特に理由がなければ-n1で問題ないと思う。
参考リンク
https://github.com/Parchive/par2cmdlinehttps://wiki.archlinux.jp/index.php/Parchive
https://man.archlinux.org/man/par2.1.en