peRFect

TOP PAGE

ubuntuでファイルコピーでベリファイする




 ubuntuで大きいファイルや沢山のファイルをコピーする場合は、nautilusでコピーするのでは
なく、cp コマンドを使うと便利です。リソースも食わず、バックグラウンドで放っておけますし
、なにより基本中の基本コマンドなので安心感が違います。
 とはいえ、ネットワーク越しのコピーだと外乱要素が多いので、ちゃんとコピーできたかどうか
確認した方がいい場合もあります。大事なデータの引越しとかですね。そこで正しくコピー出来た
かどうか確認するためにベリファイをします。各ファイルのハッシュ値を出して比較して正しくコ
ピー出来たか確認します。
 標準で md5sum コマンドがありますが、今回は確認作業をもっと楽にしてくれる md5deep コマ
ンドを使います。


インストール
sudo apt-get install md5deep

使い方

元ファイルのハッシュ値リストを作成する。

 まず最初に元となるファイル群のハッシュ値リストを作成します。
md5deep -r ディレクトリ名 > hash.list

-r オプションを付けることにより、再帰的に動作します。
-e オプションを付けると進行状況を表示します。大きいファイルの時に使うといいでしょう。
このハッシュリストは元データと同じディレクトリに保存しておきますと、そのうちなにかの役
にたつかもしれませんw
コピー先と比較する。
 作成しておいたハッシュ値リストと、コピーした先のファイル群のハッシュ値とを比較してい
きます。
 正常にコピー出来たファイルはいちいち報告する必要はないので、正常にコピー出来なかった
ファイル名だけ表示させるようにします。
md5deep -X hash.list -r 比較作ディレクトリ
-X オプションはマッチングしないものだけを表示します。
両方のファイル名を表示させたいなら、-w オプションを付けます。
 これでなにも報告されなかったら正常にコピーできています。もしハッシュ値が違っていた場
合は報告されますので、再度そのファイルをコピーすればいいでしょう。

基本的な手順は以上です。簡単でしょう?
 シェルスクリプトでサブプロセスで動かせば、並列して計算させる事も出来るので、高速化も
できるでしょう。同一のHDDじゃあまり意味ないですけど。マルチコアじゃないと意味がないですけど。

 大事なデータの移動には是非ベリファイしておきたいものです。
 ついでに cp ですが、 nice コマンドと併用することでコピー時の負荷を減らす事が出来ます。
さらに ionice と組み合わせると、もっとシステム負荷を減らせます。

ex.
ionice -c3 -n7 nice -n19 cp コピー元 コピー先 && zenity --info --text "コピー完了"

-c3 はシステムがアイドル時にしかコピーしません。-n7 で優先度を最低に。さらにniceの方でも
優先度を最低にしています。
 これでバックグラウンドでコピーさせています。もちろんコピーの優先度を最低にしてますので、
結果としてコピーの時間はかかりますが、システムの負荷は減るでしょう。
 最後にコピーが終了したら通知ウィンドウを表示させるようにしていますので、時間のかかるコ
ピーでも、コピー完了を忘れることを防ぎます。