ディレクトリサイズを縮小/リセットしますか?


11

ディレクトリエントリを縮小する方法はありますか?

私のdovecot maildirディレクトリのサイズはデフォルトの4096から数メガに増加しており、ディスククォータを台無しにしています。

私が見つけた唯一の方法は、ディレクトリを削除して再作成することです。私はどこかに魔法の機能があることを望んでいます-私は、ハンドコーディングされたアセンブラーを除いて、何に対してでもオープンです。

編集:子孫のために、dirents> 4096を見つけるには:

 find / -type d -size +4k -printf "%s\t%p\t%i\n" | sort -nr

回答:


6

数百万のファイルがあるディレクトリのrmも参照してください。接線方向に関連していますが、そこで議論します。

私が知る限り、少なくともext2 / 3では、いや、削除+再作成以外でそれらを縮小する(オンライン)方法はありません。マウントされていe2fsck -Dないと、いくつかのソースが機能する可能性がありますが、私はそのオプションの個人的な経験を主張することはできません。

さらに読むための参照:


1
最初のリンクは特に役に立ちました。具体的には(メールサーバー)私の問題に対処し、Ted Tsoが対話に
重きを置い

3

私は最近、NFSディレクトリを削除して再作成し、以前に肥大化した後にそのサイズを縮小する必要がありました。その過程で、rsyncとハードリンクを使用してこれを行う非常に効率的な方法を見つけました。この方法では、同じコンテンツでディレクトリを再作成するという目標を達成しながら、実際のファイルのコピーを回避できます。

メンテナンス期間中にこの操作を行うにはダウンタイムが必要だったため、再構築されたディレクトリをできるだけ早く利用可能にすることが重要でした。シンプルさがより重要な場合は、ソースディレクトリで最初のmoveコマンドを「rm -rf」に変更し、他の「rm -rf」コマンドをスキップします。

これらのコマンドをより大きなプロセスから抽出し、ディレクトリ名を抽象化したため、その翻訳で間違いを犯した場合はおaびします。

mkdir /tmp/holding_dir/
rsync -ai --delete --link-dest=/path/to/source_dir/ /path/to/source_dir/ /tmp/holding_dir/
mv /path/to/source_dir/ /tmp/deleteme/
mv /tmp/holding_dir/ /path/to/source_dir/

その後、ディレクトリを削除します。サイズに応じて、これを行うにはより高度な手法を使用する必要があります。たとえば、-deleteフラグを指定してrsyncを使用して空のディレクトリをこのディレクトリに同期すると、より効率的な場合があります。

rm -rf /tmp/deleteme/

2

このようにします。

cp -aloldir newdir && mvolddir tempname && mvnewdir olddir && rm -rtempname

ここで、olddirは縮小する ディレクトリnewdirtempnameは一時ファイル名です

cp -alコンテンツへのリンクを作成olddirnewdirを し、次の3つのコマンドはnewdirをし、クリーンアップでそれらを交換。


なめらか。cp -lについて知らなかった
ケビンブックス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.