
このように大きなディレクトリを削除する方法は?
stat session/
File: ‘session/’
Size: 321540096 Blocks: 628040 IO Block: 4096 directory
Device: 903h/2307d Inode: 11149319 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-09-29 14:34:40.910894275 +0200
Modify: 2022-09-29 14:35:09.598400050 +0200
Change: 2022-09-29 14:35:09.598400050 +0200
Birth: -
ディレクトリサイズ(コンテンツではなくディレクトリエントリ自体)が300 MBを超えています。 inodeの数が1,100万個を超えています。
このディレクトリにはサブディレクトリはなく、ファイルの束だけがあります。
一般的なコマンドは機能しません。私はこれを試しました:
rsync -a --delete empty_dir/ session/
rm -rf session
find . -type f --delete
私がls -f1
それにぶつかったら、ただ停止します。
私がmv -- * ../.tmp_to_delete
それにぶつかったら、ただ停止します。
私がdu
それにぶつかったら、ただ停止します。
現在、rsync --deleteは最大7MB / sの読み取り速度で2日間実行されており、ディレクトリのstat出力に変更はありません。
ディレクトリが大きすぎるのは問題のようです。
答え1
解決済み:4日後、rsyncは操作を完了しました。すべてのファイルが削除されました。ただし、単一のファイルを削除する前にディレクトリ情報を読み取るには少なくとも2日かかります。
同様の問題が発生する可能性がある人のための情報は次のとおりです。画面を使って忍耐強い。
答え2
ホームディレクトリを独自のファイルシステムに配置します。すべてのファイルを削除せずにマウント解除し、ファイルシステムを再作成して空のファイルシステムをマウントします。
答え3
アプリケーションがディレクトリにアクセスすると、ファイルの削除に時間がかかります。ディレクトリ自体を別の場所(同じボリューム!)に移動して新しいディレクトリを作成すると便利です。ただし、アプリケーションがまだ実行されている場合は、大きなディレクトリへのハンドルがある可能性があるため、新しいディレクトリを使用しない可能性があります。
だから:
- アプリケーションの停止
- ディレクトリの移動
- 新しいディレクトリの作成
- 申請開始
- ファイルを含む以前のディレクトリからファイルを削除する