PAR 1.0 の修復用データを作ってファイルの破損や消失に備えます 澤田 豊 による Parchive 1.0 クライアント /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ [ 簡単な解説 ]  複数のソース・ファイルからリカバリ・ファイルを作成して、 それらのファイルの一部が破損したり消失しても、 残されたソース・ファイルとリカバリ・ファイルから、 ファイルを修復する為のソフトです。 仕組みは複雑ですが、実際の使い方はいたって単純で、 パリティ・ブロックの個数分のソース・ブロックを修復することができます。 空でないデータ・ファイルがソース・ブロックになり、 リカバリ・ファイル (拡張子が PXX) がパリティ・ブロックになります。  例えば、ソース・ファイルが 10個ある時に、リカバリ・ファイルを 3個作れば、 合計 13個のファイルのどれか 10個以上が残っていれば、 元のソース・ファイルを復元することができます。 リカバリ・ファイルの個数が元のソース・ファイル数を上回る場合は、 ソース・ファイルが全く無くても、リカバリ・ファイルだけから ソース・ファイルを復元することすらできます。 ちなみに、拡張子が PAR のインデックス・ファイルは、 ソース・ファイルの破損や欠落をチェックする用途にだけ使えます。  作成されるリカバリ・ファイルのサイズは、 元のソース・ファイルの中で最も大きいファイルと同じになります。 そのため、ファイル・サイズにばらつきがあると無駄があります。 また、一個当りのファイル・サイズが大きいと、 修復するのに必要なリカバリ・ファイルもかさばります。 WinRAR などのアーカイバーで一旦複数ファイルを圧縮してから 同じサイズに小さく分割して、それのリカバリ・ファイルを作成する というやり方が一般的みたいです。 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ [ 特徴や仕様など ]  Parity Archive 1.0 の本家 par-cmdline に比べて、 インデックス・ファイルにコメントを付けることができます。 ユニコードを読み書きするのでマルチバイト文字にも対応してます。 サイズが 0の空ファイルにも対応してます。  日本語の開発環境で作ってるので、 日本語のファイル名やディレクトリに対応してます。 たぶん 4GB 以上のファイルに対応してます。(未確認)  開発者向けに、 ソース・コードが公開されてるので、細かい仕様を自分で変更できます。 動作に不明な点やバグっぽい挙動があっても、自分で確認することができて安心です。 ソース・ファイルをファイル・リストで指定することができます。 ソース・ファイルとリカバリ・ファイルが異なる場所にあっても処理できます。  制限事項としては、 フォルダやディレクトリ付きのファイル名を記録することはできません。 リカバリ・セットに含めないファイルの指定はできません。 ソース・ブロックとパリティ・ブロックの合計は 256個までです。 リカバリ・ファイルは最大で 99個までです。  動作環境は Windows 7 かそれ以降 (Windows 8, 10, 11) が動くパソコンです。 Win32 API と VC ランタイムを使ってるので、 ソース・コードをコンパイルするには Visual Studio 2022 以降が必要です。 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ [ コマンドやオプション ] コマンド c(reate) [f,fu,r,n,p,m,d,u,c] [input files] v(erify) [i, d,u,b,br] r(epair) [i,m,d,u,b,br] l(ist) [u,h] オプション /i : インデックス・ファイルを作り直す /f : [files]はファイル・パスではなくリスト・ファイルとして読み込む /fu : UTF-8 で書かれたファイル・リストを使う /r : リカバリ・ファイルの数を冗長性割合で指定する /n : リカバリ・ファイルの数を指定する (こちらが優先される) /p : 最初のリカバリ・ファイル番号 /m : メモリー使用量を制限する /c"*" : リカバリ・ファイル作成時にコメントを付ける /d"*" : データ・ファイルが存在するディレクトリを指定する /u : コンソールの標準出力に UTF-8 を使う /b : 既存のファイルを別名にして残す /br : 既存のファイルを別名にしてゴミ箱に入れる /h : データ・ファイル一覧にハッシュ値を表示する はディレクトリ付きで指定できます。 拡張子を変えながらリカバリ・ファイルを作るので、 指定時の拡張子は「PAR」か「par」にしてください。 経過表示の最中に「c」キーを押すと、そこで処理をキャンセルします。 作業中のテンポラリ・ファイルは自動的に削除されます。 キャンセルする前にもう作成・修復されていたファイルなどは 自動的に元に戻ったりはしないので注意してください。 経過表示の最中に「p」キーを押すと処理を一時停止して、 「r」キーでその場から処理を再開します。 * create の設定など [files] はディレクトリ付きで指定できます。(/dで別に指定してもいいです) [files] は「*」や「?」で検索してリストを作ります。 個別にファイルを複数指定してもいいです。 「/f」オプションでリスト・ファイルから読み込むこともできます。 ソース・ファイルの順序はファイル名のアルファベット順に並び替えられます。 スペースを含むコメントは「"」で囲むこと。含まない場合は「"」はいりません。 リカバリ・ファイルの数を指定しない場合は、PARファイルだけが作成されます。 * verify の設定など PARファイルが存在しなくてチェック用に必要なら、「/i」で作り直せます。 リカバリ・ファイルとソース・ファイルの場所が異なる場合は、「/d」で指定してください。 * repair の設定は verify と同じ 修復前に、異なるファイル名は訂正され、サイズが 0のファイルは作成されます。 大きなファイルを処理するには時間がかかるので注意してください。 「/b」オプションで修復前の破損ファイルを別名にして残すことができ、 ファイル名の末尾に連番の拡張子が追加されます。 例えば、「test.txt」という破損ファイルに対して、 既に「test.txt.1」という修復前の破損ファイルが保存されていた場合は、 「test.txt.2」にして保存します。 * list の設定など 修復対象のファイルの MD5 ハッシュ値を確認したい時は「/h」で表示します。 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ [ 参考文献や利用したソース・コード、ライブラリーなど ] par-specifications.pdf Parity Volume Set specification 1.0 [2001-10-14] by Stefan Wehlus - initial idea by Tobias Rieper, further suggestions and format tweaking by Kilroy Balore, Willem Monsuwe and Karl Vogel. par-dos-v1.1.zip , README Parity Archive - A way to restore missing files in a set. Copyright (C) 2001 Willem Monsuwe (willem@stack.nl) par-v1.1.tar.gz , rs.doc Dummies guide to Reed-Solomon coding. GFLIB - C Procedures for Galois Field Arithmetic and Reed-Solomon Coding James S. Plank Logistical Computing and Internetworking (LoCI) Laboratory Department of Computer Science University of Tennessee June 4, 2003. $Revision: 1.2 $ Fast Galois Field Arithmetic Library in C/C++ James S. Plank plank@cs.utk.edu http://www.cs.utk.edu/~plank Technical Report UT-CS-07-593 Department of Computer Science University of Tennessee MD5 ; MD5 hash generator -- Paul Houle (paulhoule.com) 4/16/2010 ; ; This code is in the public domain. Please attribute the author. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ [ ライセンスなど ]  PAR 1.0 のフォーマットについては説明書や実装コードを見て、 互換性を維持してなるべく同じになるようにしてます。 他の人が書いたコードを流用してる部分の著作権はその人にあります。 それ以外の部分の著作権は 澤田 豊 にあります。  ライセンスは GNU GPL というものに準拠します。 ガロア体上の計算に使ってるライブラリーのライセンスが LGPL なのですが、 PAR 2.0 の方が GPL なのでこちらも GPL に統一しました。 GPL のライセンスの詳細はよくわからないのですが、 利用料を払うことなく使えてソース・コードを公開することが条件みたいです。 詳しいことは付属の英文ライセンス文を読むか、 日本語の解説でも探して読んでみてください。 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ [ 連絡先 ]  私はたまに (週一ぐらい) しかメール確認できませんし、 長期間 (一ヶ月ぐらい) インターネットを使えないこともあります。 基本的にサポートはメールで行うことになりますが、 返事がいつ戻ってくるかは気長にお待ちください。 名前は 澤田 豊 です。 メール・アドレスは tenfon (at mark) outlook.jp です 迷惑メール拒否の表記なので、実際のメールでは (at mark) を @ に換えてください。