削除したい非常に小さなファイルが大量にあるディレクトリがあり、rm -rf /path/to/the/dir
でディレクトリを削除するだけでもすでに数日かかります。
これが遅くなっているのは奇妙に聞こえるかもしれませんが、dirは通常のファイルシステムのdirではありません。これは、クラスターのLustreファイルシステムのディレクトリです。
LusterがマウントされているクラスターのノードAでrm
コマンドを実行していますが、Lustreのバックエンドは2つのZFSファイルシステムであり、1つはノードBに、もう1つはノードCにあるため、すべてのネットワークトラフィックがrm
が遅くなる原因。
誰かが私の方法よりもディレクトリを削除するより速い方法を知っていますか?
いくつかのGNUコマンド、たとえばtarやrmは、Lustre上の大きなクラスのファイルを操作する場合は非効率的です。たとえば、数百万のファイルがある場合、rm -rf *数日かかる場合があり、他のユーザーの光沢にかなりの影響を与える可能性があります。
その理由は、ワイルドカードを拡張するのにかかる時間にあります。
これを行うためのより良い方法は、削除または風袋引きするファイルのリストを生成し、それらを一度に1つずつ、または小さなセットで実行することです。
削除する前にファイルを確認するの良い方法は次のとおりです。
$ lfs find <dir> -t f > rmlist.txt
$ vi rmlist.txt
$ sed -e 's:^:/bin/rm :' rmlist.txt > rmlist.sh
$ sh rmlist.sh
# the directory structure will remain, but unless there are many directories, we can simply delete it:
$ rm -rf <dir>
Luster IOの便利なリファレンスのいくつか:
1。 https://www.nics.tennessee.edu/computing-resources/file-systems/io-lustre-tips
2。 https://www.rc.colorado.edu/support/examples-and-tutorials/parallel-io-on-janus-lustre.html
ありがとう!
Munlinkを使用します。
find -P $dir -type f -o -type l -print0 | xargs -0 munlink
...そして空のディレクトリを削除します:
find -P $dir -depth -type d -empty -delete
検索結果をより多くの引数で更新しました。参照: https://support.pawsey.org.au/documentation/display/US/Deleting+large+numbers+of+files+on+scratch+and+group