巨大ファイルをBitTorrentで高速修復

GBオーバーの大容量ファイルが何らかの理由で破損してた場合、それをBitTorrentで修復しちゃおうというネタ。


「手元のisoファイルをふとチェックしたところ、MD5SHA1ハッシュ値が一致していない…」そんな時、どうすれば良いでしょうか?
バックアップが保管されていて、そちらが無事ならそれをコピーすれば良いでしょう。
もし前もってMultiPardvdisaster等で修復用ファイルを作っていれば、そこから修復も可能かもしれません。

しかし「バックアップもなければ修復用ファイルもない、手元にあるのは破損済みファイルだけ……」という場合は再DLするしかありませんよね。でも巨大ファイルはDLに時間がかかります。


そういう時、もし同じファイルがTorrentで配布されているのならば、BitTorrent経由で再DLするのがオススメです。何故ならBitTorrentの場合、壊れたデータ部分だけ再DL可能だからです。


以下Opera10.53の例で解説しますね。

  1. まずOperaBitTorrentが使える状態にする。*1
  2. 目的の.torrentファイルを使ってDLを開始、すぐDLを中断する。
  3. Operaを一旦終了。
  4. Operaが目的のファイルと同サイズの入れ物を作成済みなので、それを破損した既存ファイルで置き換える。
  5. OperaでDLを再開させると、ファイル内の破損しているブロックだけDLされる。全体を再DLしないのでDLがすぐに完了する。


もちろん「ファイルの一部でなく全体的に壊れている」場合には高速化にはならないです。一部だけ壊れてた時に有効なテクニックですね。
「ハッシュどころかファイルサイズが違ってる」場合はDL自体上手くいかないかもしれません。


これは「BitTorrentでのDLはファイルのブロック単位で行われ、そのブロックごとに正常にDLされたかどうかを検証する」という仕組みを利用したものです。
要は

1〜1024バイトまでのSHA1ハッシュ……af3964682e0e05fb31e73f9bc5386098ed949d8f
1025〜2048バイトまでのSHA1ハッシュ……af3964682e0e05fb31e73f9bc5386098ed949d8f
2049〜3072バイトまでのSHA1ハッシュ……af3964682e0e05fb31e73f9bc5386098ed949d8f

みたいな情報がtorrentファイル側にあるとイメージされれば良いと思います。(たぶん)


Operaはファイルのどの部分がDL済みなのかの判断を、ブロック毎のハッシュ(みたいなの)をチェックで行っているため上記テクニックが使えるという訳です。Operaのダウンロードマネージャーで「ファイルのチェック中」と表示されている時はそういうブロックのチェック処理が走っているんですね。(他のBitTorrentクライアントは知りません。同じ動作のものもあるかと思います)


UbuntuKNOPPIX等のisoイメージを積極的にDLされている方は、覚えておいて損は無い小技かと思います。

*1:ポート開放やらダウンロードフォルダの設定やら。バージョンによって挙動も違うので各自頑張ってください。