削除したい非常に小さなファイルがたくさん含まれているディレクトリがありますが、単にディレクトリを削除するrm -rf /path/to/the/dir
のに数日かかりました。
これが遅いことは奇妙に聞こえますが、ディレクトリは通常のファイルシステムのディレクトリではありません。クラスタのLustreファイルシステム上のディレクトリ。
rm
LustreがインストールされているクラスタノードAでこのコマンドを実行していますが、LusterのバックエンドにはノードBとノードCに1つずつ合計2つのZFSファイルシステムがあるため、すべてのネットワークトラフィックが速度低下の原因になる可能性がありますrm
。
私よりもディレクトリを削除するより速い方法を知っている人はいますか?
答え1
次のようないくつかのGNUコマンドTarとrmは、Lustreで大容量ファイルを扱うときには非効率的です。。たとえば、何百万ものファイルがある場合、rm -rf *は数日かかることがあり、他のユーザーのLustreに大きな影響を与える可能性があります。
その理由は、ワイルドカード拡張にかかる時間による。
より良いアプローチは、削除または圧縮し、一度に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>
Lustre 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
ありがとうございます!
答え2
マンリンクを使用してください。
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+Lustre+Filesystems
答え3
これまでに十分な評判が得られていないため、@Atisomのソリューションについて言及できないため、ここに新しい答えがあります。
Atisomソリューションに表示されているコマンドは一致または機能find
しません。find
-type f
-type l -print0
機能させるには、角かっこを追加してください。
find -P $dir \( -type f -o -type l \) -print0 | xargs -0 munlink