かつて何千ものファイルがありましたが、今はほとんどありませんが、 "ls"と "find"がまだ遅いディレクトリを修正する方法は何ですか? [コピー]

かつて何千ものファイルがありましたが、今はほとんどありませんが、

motionディスクがいっぱいになるまでユーティリティを使用してJPEGファイルをロードできるディレクトリがあります。その後、「何千ものファイルを含む大容量ディレクトリを効率的に削除する」を読んで、jpegファイルを削除してディレクトリをクリーンアップする必要があるというアイデアを得ました。それ以降はファイル数が約10〜20個ですが、そのディレクトリのファイル名を見るのはまだ非常に遅いです。

問題は、このディレクトリに再度アクセスできるようにするにはどうすればよいですか?

ベストアンサー1

とにかくext4ではできません。

ディレクトリが大きくなると、ext4はディレクトリサイズ(つまり、コンテンツのサイズではなくディレクトリ自体のサイズ)を縮小しません。 AFAIK、これはいくつかの(ほとんど?)異なるfsタイプに当てはまりますが、すべてではありません。これは、ファイルが削除または移動されても、ディレクトリに数千または数百万のファイルが含まれる一部のファイルシステムのパフォーマンスに重大な影響を与える可能性があります。

ただし、ディレクトリに多数のファイルが含まれている場合、すべてのファイルシステムで深刻なパフォーマンス問題が発生するわけではありません(IIRC、これはxfsでは問題ではなく、ext3またはext2よりもext4では問題が少ない)。

回避策は、コンテンツを同じ名前の新しいディレクトリに移動することです。たとえば、

mv dir dir.old
mkdir dir
chmod --reference=dir.old/ dir/
chown --reference=dir.old/ dir/
mv dir.old/* dir/
rmdir dir.old

chmod新しいchownディレクトリに正確に以前のバージョンと所有者、グループ、権限は同じです。 ACLを使用している場合は、ACLもコピーする必要があります。

注:ディレクトリが実際にファイルシステムのマウントポイントの場合は機能しません。ファイルシステムの最上位ディレクトリを縮小する唯一の方法であるAFAIKは、バックアップし、mkfsに再フォーマットして復元することです。

修正する:この質問を閉じる2番目の冗長リンクについては、fsumountを使用してこれらのオプションの機能の詳細については、参考資料を参照してください。e2fsck -C0 -f -D /dev/XXXman e2fsck

また、注:backup-reformat-restoreを使用してもmvbackup-reformat-restoreを使用fsckしても、ディレクトリとその中のファイルがどのプロセスでも使用されていない場合はこれを行う必要があります。ディレクトリ内のファイルを使用するすべてのプロセスを停止します。必要に応じてシングルユーザー/緊急モードで再起動します。

おすすめ記事