LoginSignup
1
1

More than 5 years have passed since last update.

LTO6テープの中身をオンザフライでMD5チェック

Last updated at Posted at 2016-04-07

LTO6テープにちゃんと書き込めたかどうかmd5sum -cでチェックする場合、何も考えずにテープからディスク上にいったん全部書き出してmd5sum -cでチェックしてもよいのだけど、場所と時間がかかるのでオンザフライでチェックだけ行って、ディスク上には何も書き出さないプログラムを作成してみた。

また、我々の目的としてはアーカイブ内の本当に大事なファイルだけチェックできればいいので、それだけチェックして、他のファイルは読み飛ばす仕組みにしたかった。

最初はApache Commons のCompressも試してみたんだけど、ブロックサイズの問題なのか、読み飛ばしできないのか、DigestInputStreamを併用できないのか、ファイルでは動くけどテープでは失敗しちゃうのか、詳しい理由は忘れてしまったけど、Apache Commonsの中の実装がよく分からなくてどうもうまく行かないので、自分で生のテープ内のデータ構造にアクセスして直接読み出すようにしてしまった。

作成したプログラムは、このURLのTarChecker2.java

プログラム内のBLOCK_SIZE は今回は512バイト、blocking factorは128(BUFSIZEの64KB=512バイト*128個)にしてあるけど、LTO6以外のテープやドライブによっては設定を変えなきゃいけないかもしれない。

読み出したデータはストリームでMD5の計算をしていくので、大きなファイルでもメモリは食わない。ただし、チェック対象のファイルのリスト、つまりMD5値のリストのファイルはメモリ上に持ってしまうので、チェックするファイル数が膨大な場合はメモリを食うかもしれない(我々の用途では数百個程度なので問題にはならない)。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1