発端
最近うっかり8TBのHDDを買ってしまったので数TBのデータを移行して換装しました
rsyncでコピーしましたが、正しくコピーが出来たのか検証するにも数TBにもなると時間がかかります
時間がかかる事を許容できるのであればdiffで同一性のチェックをすると良いと思いますが、とりあえずほぼ問題なくコピーが出来てるという前提に立って、その上でざっくりチェックしたいなと考えました
作ったもの
最初に作ったのも載せちゃいます
仕様
- ディレクトリを2つ与え、ファイルリストを作成する
- 片方にしか存在しないファイルを表示する
- ファイルサイズが異なるものを表示する
- ファイル先頭から1MB、ファイル末尾から1MB、中間からランダムで1MBの3箇所のチェックサムを比較し、異なるものを表示する
- 3MB以下はファイル全体のチェックサムを比較し、異なるものを表示する
- コマンドラインの第一引数で与えたパスと第二引数で与えたパスについて同じ操作を行う場合はスレッドを利用し並列で動かす
雑感
1ファイル何百MBとか何GBというものもある中で一律3MBしかチェックしないのも微妙な気はしますが、そもそもコピーは成功しているだろうという中でチェックの時間を小さくしたいのでまぁ良しとしましょう
もしかしたらファイルサイズの何%をチェックするという形が良いのかもしれません
今回チェックサムのアルゴリズムにsha1を採用していますが、手元のUbuntuにインストールされている
md5sum
sha1sum
sha256sum
sha512sum
の中で一番速かったのがsha1sumだったので利用しています
Pythonのライブラリでは同様か確認していませんがPythonだから結果が変わるということもないのではないでしょうか?
比較する文字列の長さがmd5より長いのでそこは微々たるものでも遅くなる要因にはなってそう
みなさんはこういうストレージの引っ越しの際はファイルの同一性の確認ってどうしてるのでしょう?
最後にこのコード、上記仕様に基いてChatGPTが99%のコードを作ってくれました
やりたい事が固まっていれば普段Pythonを使っていないプログラマーでもサクっとこういうの書けちゃうので良いですね
それでは良いChatGPTライフを