cp
最近、大規模ディレクトリバックアップを作成するコマンドを実行しました。だから私は次のコマンドを使用しました。
cp -rv big_directory new_location
ファイルが大きいため、このコマンドを実行するのに時間がかかり、コピーの進行状況も確認したかったです。そのため、du
他の端末でも次のようにコマンドを使用しました。
du -sh new_location/*
ただし、このコマンドも実行するのに時間がかかります。特に、そのディレクトリに大容量ファイルがある場合はさらにそうです。
cp
コマンドの実行に10分かかります。du
コマンドを開始してから1分後に起動して実行するのに1分かかったとしますcp
。の出力をdu
信頼できるかどうかを知りたいです。du
起動時に(t = 1分)何が起こるのか信頼できる出力を提供しますか、それとも実行時間の終わりに(t = 2分)何が起こるのかを出力しますかdu
?明らかに、コピーのためにコマンドの開始と終了の間にdu
ディレクトリのサイズが変更されました。new_location
du
ベストアンサー1
@derobertがどのようにdu
機能するかを説明します。
彼は、非常に大量の小さなファイル/ディレクトリ(したがってメタデータのための多くのメモリ)がない限り、du
すぐに再実行すると、通常より速い結果が得られることには言及していません。
ファイルが大きいからといってdu
速度が遅くなるわけではありませんが、ファイルをコピーすると、ディレクトリキャッシュがメモリから不足する可能性が高いです。 (デスクトップの応答性が向上する可能性があります。を設定しvm.swappiness=10
、sysctl設定を使用してデータよりもメタデータの優先順位を指定しますvm.vfs_cache_pressure=60
(に入れます/etc/sysctl.d/99-local
。)
複数のプロセスが同時にファイルシステムにアクセスする場合、各システムコールはランタイムステータススナップショットに関する情報を取得します。たとえば、プロセスはファイルが存在することを確認してからファイルを開こうとしましたが、もはや存在しないことを発見できます。これは、他のプロセスが検証間の時間間隔で名前を変更または削除したためです。 (これにより問題が発生したり、エラーの原因になった場合、これを競合条件といいます。)
ディレクトリの巡回順序がdu
選択した順序と同じである場合、まだ変更されているディレクトリcp
はdu
実行がほとんど終わるまで到達しないため、最後にあまり時間がかかりません。 OTOH、新しいファイルdu
があるディレクトリを最初に合計しcp
てからしばらく時間をかけて残りを合計すると、結果が無効になります。