解決策 1:
何百万ものファイルがあるディレクトリでの rm も参照してください。接線的に関連していますが、そこで議論します.
私の知る限り、少なくともext2/3では、いいえ、削除+再作成以外にそれらを縮小する(オンライン)方法はありません。マウントされていない、いくつかのソースは e2fsck -D
を示唆しています うまくいくかもしれませんが、そのオプションに関する個人的な経験はありません.
さらに読むための参考文献:
- http://linux.derkeiler.com/Mailing-Lists/Kernel/2009-05/threads.html#06569
- http://fedoraforum.org/forum/showthread.php?t=120654
解決策 2:
最近、以前に肥大化した後、NFS ディレクトリを削除して再作成し、サイズを縮小する必要がありました。その過程で、rsync とハード リンクを使用してこれを行うかなり効率的な方法を見つけました。この方法では、実際のファイルのコピーを回避しながら、同じ内容でディレクトリを再作成するという目標を達成できます。
メンテナンス期間中にこの操作を行うためにダウンタイムを取る必要があったため、再構築されたディレクトリをできるだけ早く利用できるようにすることが重要でした。シンプルさがより重要な場合は、最初の移動コマンドをソース ディレクトリの「rm -rf」に変更し、他の「rm -rf」コマンドをスキップします。
これらのコマンドをより大きなプロセスから抽出し、ディレクトリ名を抽象化したので、その翻訳に誤りがあった場合はお詫び申し上げます。
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/
その後、ディレクトリを削除します。サイズによっては、より洗練されたテクニックを使用してこれを行う必要がある場合があります。たとえば、rsync を --delete フラグとともに使用して、空のディレクトリをこのディレクトリに同期すると、より効率的な場合があります。
rm -rf /tmp/deleteme/
解決策 3:
私ならこうします。
cp -al
oldir newdir
&&
mv
olddir 一時名
&&
mv
newdir olddir
&&
rm -r
一時名
ここで olddir 縮小したいディレクトリですnewdir および tempname 一時的なファイル名です
cp -al
olddir のコンテンツへのリンクを作成します newdir で そして次の 3 つのコマンドは、それらを newdir と交換してクリーンアップします。