
私は Amazon S3 Glacier Deep Archive を使用して Ubuntu マシンにバックアップを保存しています。私のワークフローは基本的に次のようになります。
tar cf - $FILES | gzip -3 --stdout | aws s3 cp - $TARGET
これはかなりうまく機能すると思いますが、非常に大きなアーカイブ (1TB 以上) の場合、PC のどこかが故障したり、ビットが反転したりすると、アーカイブ全体が使用できなくなるのではないかと心配です。理想的には、このフローに何らかのエラー修正機能を追加したいと考えています。
PAR2 を調べてみましたが、これは私の希望どおりのようですが、1つ注意点があります。それは、パイプを入力として受け取ることができないことです。アーカイブ全体をディスク上に構築する必要があります。それからPAR2 を実行してからすべてをアップロードします。1 TB を超えるアーカイブの場合、使用可能なディスク容量の点からこれが常に実行可能であるとは限らず、プロセスが大幅に遅くなります。
最初にファイルに保存せずに、データ ストリームに前方誤り訂正情報を追加する同様のツールを見つけることができませんでした。どうすればよいでしょうか? ソリューションが情報を別のファイルに追加するか、ストリームを変更して冗長性を追加するかは、実際には問題ではありません。
答え1
道具:redupe
この目的のためのツールを見つけました: redupe
。これについて読んでください:Redupe: 前方誤り訂正。
この投稿では、
redupe
データ ストリームに前方誤り訂正機能を提供する […] ツールを紹介します。 […] は、やredupe
などの圧縮ツールをモデルにしていますが、冗長性を排除するのではなく追加します。 はデータを直接操作し、元のデータに冗長情報をインラインで追加することで、データを冗長状態に変換します。gzip
bzip2
redupe
補完的なコマンドは ですがreundupe
、これは実際には単なる 1 つのツールであり、呼び出す名前によってその機能が決まります。
得られるredupe
GitHubから。
redupe
Debian 12 でコンパイルしてテストすることができました。詳細については以下を参照してください。
コンパイル
注: ここで説明されている問題の一部は、プログラミングとコンパイルの経験が不足しているため、または事前にすべてを正しく構成していなかったために発生した可能性があります (またはまったく構成していなかった可能性があります)。
私の OS は Debian 12 です。私が実行したことは次のとおりです。
私がダウンロードしました
redupe-master.zip
GitHubからを解凍し、新しく作成した に配置しましたredupe-master/
。試行錯誤の結果、次のパッケージが必要であることがわかりました:
automake
、、、、* 。make
gcc
libpopt-dev
libtool
sudo apt-get update sudo apt-get install automake make gcc libpopt-dev libtool
* 少なくともこれらのパッケージは私が試したもので、すべて重要であるように思われます。
-
autoreconf -ivf
-
./configure && make && sudo make install
を起動できました
redupe
が、ツールは を見つけることができませんでしたlibredupe.so.0
。関連するライブラリが にあることがわかりました。/usr/local/lib/
では、strace redupe
ツールが複数の場所 (例/usr/lib/
) をチェックしますが、 はチェックしないことがわかりました。 に関連するすべてのものを から`/usr/lib/ に/usr/local/lib/
移動しました。redupe
/usr/local/lib/
sudo mv /usr/local/lib/libredupe.* /usr/lib/
/usr/local/bin/redupe
また、新しくインストールされたと が同一の通常ファイルであることもわかりました/usr/local/bin/reundupe
。1 つの通常ファイルで十分で、もう 1 つの名前はシンボリック リンクにすることができます。(cd /usr/local/bin/ && sudo rm reundupe && sudo ln -s redupe reundupe)
私のテスト
- 1 GiB を
/dev/urandom
通常のファイルにパイプしましたoriginal
。 - パイプし
original
てredupe
結果を として保存しましたoriginal.rd
。 - パイプを使用
original.rd
してtr ab xy
いくつかのバイトを変更し、結果を として保存しましたmodified.rd
。 original.rd
とmodified.rd
が異なることを確認しました(cmp
またはなどを使用することができます)。 1 GiB のランダム データに と が存在しないmd5sum
可能性は非常に低いため、この手順は実際には必要ありません。a
b
- パイプし
modified.rd
てreundupe
結果を として保存しましたresult
。 - と が同一であるかどうかを(
cmp
)で確認しました。original
result
上記の手順では、複数の通常ファイルを使用します。通常ファイルの数を減らすと、手順は次のようになります。
</dev/urandom head -c 1G >original \
&& <original redupe | tr ab xy | reundupe | cmp - original
成功cmp
(エラーなし、終了ステータス 0) は、redupe
正常に動作したことを意味します。私の場合は正常に動作しました。
また、破損がまったくない場合にすべてが正常であるかどうかを確認するために、tr
( )なしでもテストしました。正常です。… | redupe | reundupe | …
結論、メモ
redupe
効果はありますが、万能薬ではありません。読み続けてください。を呼び出すときは
redupe --help
、-o
/--overhead
オプションに注意してください。データが
reundupe
修正できないほど破損している場合は、ツールによって印刷されますerror reading input
。少し誤解を招く恐れがあるので注意してください。私はランダム データの (比較的小さな) ファイルを見つけることができました。これを
redupe -o 1
(弱い冗長性) を適用し、(比較的強く) 変更して を適用すると、reundupe
とはエラーのない別のファイルが生成されましたreundupe
。バグを疑うつもりはなく、偶然 に に有効なファイルを作成できたのだと思いますreundupe
。一方、時折発生するビット反転は正常に修正されました。時折発生するビット反転(およびバイト反転)は適切に修正されましたが、ストリーム内の欠落または過剰なバイトは致命的このツールはこの種のエラーを修正するようには設計されていないようです。
「PCがどこかで故障したら心配だ」と書いてありました。PCが故障したら、故障したストリームを忠実に処理します。ゴミを入れればゴミが出てくる。元の故障したストリームを再現します。PC(または他のPC)が故障し
redupe
たらredupe
reundupe
本当にその後に問題が発生した場合、redupe
このツールはビット反転のみを処理するため、おそらく役に立ちません。redupe
パイプ内で動作し、これが望みどおりです。ただし、これは比較的小さなウィンドウを使用してデータを処理する必要があることも意味します。破損したバイトが互いに近接している方が、同じ数の破損したバイトが大きなファイル全体に分散しているよりも悪影響があります。を の前ではなくと
redupe
の間に配置する必要があります。そうすると、バックアップから取得する際にが の前になります。これを逆の順序 (つまり の前、の前) で行うと、次の理由で不完全になります。gzip
aws
gzip
reundupe
gunzip
redupe
gzip
gunzip
reundupe
(実際的な理由)少しのひっくり返しは
gunzip
失敗を引き起こします(CRCをチェックする) データは修正されませんreundupe
が、続行できたとしてもgunzip
、別の理由があります。それは…(理論的な理由)圧縮はパターンや類似性を検出することで機能するため、冗長性を削減します。冗長性を追加してすぐに削除するのではなく、実際のデータの冗長性を削減してから、意図的に冗長性を追加し、保管する。
今のところ、破損がない場合、
redupe
+ は適切かつ確実に機能しているように見えます。軽微な破損 (変更されたバイト) を修復できます。明らかに「冗長性を超える」破損は、検出される場合とされない場合があります (ただし、検出されない破損はおそらく失敗します)。言い換えると、このツールは正常なデータを破損せず、破損したデータから正常なデータを回復する機会を提供します。私の意見では、このツールの正味の価値は確かにプラスです。reundupe
reundupe
gunzip
独自のテストを実施して、
redupe
それが自分に適しているかどうか、何を--overhead
望んでいるか、パフォーマンスが許容できるかどうかを判断します。