バックアップを作成するために rsnapshot を使用しようとしていますが、使用できません。ディレクトリ(50GB)を比較して数分で複製(すべてのファイルをハードリンク)でき、ディレクトリ全体を約30分でcpできますが、削除するには1時間以上かかります。直接使用する場合でもrm -rfv
、単一のファイルをrmするのに最大0.5秒かかる場合があるのに対し、cp
およびlink
コマンドは即座に完了します。
なぜrmはとても遅いのですか?ハードリンクを再帰的に削除するより速い方法はありますか?ファイルをコピーする方が、削除するよりも短時間で済むことは意味がありません。
私が取り組んでいるファイルシステムは、usbを介して接続された外部ストレージドライブで、fuseblkと入力します(これはntfsだと思います)。私のコンピューターはubuntu linuxを実行しています。
上からの出力:
Cpu(s): 3.0%us, 1.5%sy, 0.0%ni, 54.8%id, 40.6%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 8063700k total, 3602416k used, 4461284k free, 557604k buffers
最終的に、何をするかに関係なく、rm
は、削除するすべての単一ファイルでunlink
を実行する必要があります(親ディレクトリでrm -r
を呼び出した場合でも)。削除するファイルが多い場合、これには長い時間がかかる可能性があります。
rm -r
を実行すると、特に時間がかかるプロセスが2つあります。
readdir
、続いて、unlink
への多数の呼び出し。すべてのファイルを検索し、すべてのファイルを削除して削除するのには、本当に長い時間がかかる場合があります。
しばらくの間ディレクトリを使用できなくなるためにこの「使用不可」を見つけた場合は、削除する前に親ディレクトリを移動することを検討してください。これにより、その名前を解放して、プログラムが再び使用できるようになります。
ファイルシステムが本当にis NTFSであると仮定すると(質問からは不明です)、NTFSは通常、ファイルの大きな帯を削除するのが非常に遅くなります。目的に応じて、より適切なファイルシステムを使用することを検討してください(他の特定のニーズがない場合は、最新のextファイルシステムの削除パフォーマンスは非常に優れています)。一般的に、ヒューズ自体もそれほど高速ではありません。 Fuseを使用しない方法でこれを実行できるかどうかを検討することを検討してください。
まあ、私はかつてあなたと同じような問題を抱えていました。あなたの「は」が高いことがわかりました。
iostat -x 1
ディスクの使用率が高いかどうかを確認します。高い場合は、ディスクが非常にビジーであることを意味します。一部のotherプロセスが継続的にディスクに書き込んでいるかどうかを確認します。
シンプルにするために、
vmstat 1
bが高いか、またはr <bかどうかを確認します。それは何かが間違っていることを示しています。あなたの状況では、ディスクioが本来の理由だと思います。