5

ディレクトリ内のファイルを分析して削除するデーモンを実行しています。何らかの理由でデーモンが実行されていない場合、ファイルがスタックされます。今日、そのディレクトリには90kのファイルがありました。デーモンを再起動すると、すべてのファイルが処理されました。

ただし、ディレクトリは大きいままです。「ls-dh」5.6M のサイズを返します。そのディレクトリを「最適化」するにはどうすればよいですか? そのディレクトリの名前を変更し、同じ名前と権限で新しいディレクトリを作成すると問題が解決することはすでにわかっています。ただし、ファイルは常にそこに書き込まれるため、ディレクトリの名前を変更して新しいディレクトリを作成する安全な方法はないようです。しばらくの間、ターゲット ディレクトリは存在しません。

a) ext3 ファイルシステム上のディレクトリを最適化できる方法/(シェル) プログラムはありますか? または b) ディレクトリにロックを作成して、名前の変更/作成が完了するまでファイルの書き込みをブロックする方法はありますか?

4

3 に答える 3

1

Ext3 には実際には適用できませんが、他のファイルシステムのユーザーには役立つかもしれません:

  • https://wiki.archlinux.org/index.php/Btrfs#Defragmentationによると、Btrfsを使用すると、ディレクトリのメタデータを最適化できるようbtrfs filesystem defragment /です。ルート フォルダーのメタデータを最適化します。これは、Btrfs のオンライン デフラグ サポートを使用します。

  • Ext4はオンラインでの最適化 (を使用) をサポートしていますe4defragが、これはディレクトリ メタデータには適用されないようです ( http://sourceforge.net/p/e2fsprogs/bugs/326/によると)。

ただし、これらのソリューションのいずれも試していません。

于 2015-04-27T12:46:33.270 に答える
1

「ファイルシステムのディレクトリを最適化します。このオプションにより、e2fsck はすべてのディレクトリを最適化しようとします。ファイルシステムがディレクトリのインデックス作成をサポートしている場合はそれらのインデックスを再作成するか、小さなディレクトリの場合はディレクトリを並べ替えて圧縮するか、従来の線形ディレクトリを使用するファイルシステムの場合はディレクトリを圧縮します。」-- fsck.ext3 -D

もちろん、マウントされたファイルシステムでこれを行うべきではありません。

于 2010-12-04T15:24:25.897 に答える
0

ディレクトリ内から空き領域を再利用する方法を知りません。

5MB はそれほど多くのスペースではないため、無視するのが最も簡単な場合があります。この問題 (ディレクトリにファイルが積み重なる) が定期的に発生する場合、ディレクトリが再びいっぱいになるたびに、その領域が再利用されます。

ディレクトリを縮小する機能がどうしても必要な場合は、うまくいくかもしれない (醜い) ハックがあります。

ディレクトリを空のディレクトリへのシンボリック リンクに置き換えます。この問題が再発する場合は、新しい空のディレクトリを作成し、新しいディレクトリを指すようにシンボリック リンクを変更できます。シンボリック リンクの変更はアトミックである必要があるため、着信ファイルが失われることはありません。その後、安全に古いディレクトリを空にして削除できます。

[追加編集: これは機能しないことが判明しました。Badaがコメントで指摘しているように、私が提案した方法でシンボリックリンクをアトミックに変更することはできません。これで私の元のポイントが残ります。私がよく知っているファイル システムには、ディレクトリ ブロック内の空き領域を再利用するメカニズムがありません。]

于 2010-11-29T19:14:22.873 に答える