Shrink/reset directory size?
Is there a way to shrink a directory entry?
My dovecot maildir directories have increased in size from the default 4096 to several megs, and it is messing with disk quotas.
The only way that I have found, is to delete and recreate the directory. I am hoping there is a magical function somewhere - I am open to anything, except for hand-coded assembler.
Edit: For posterity, to find dirents>4096:
find / -type d -size +4k -printf "%s\t%p\t%i\n" | sort -nr
See also rm on a directory with millions of files; tangentially related, but we discuss it there.
As far as I'm aware, at least on ext2/3, no, there's no (online) way to shrink them short of delete + recreate. Unmounted, several sources suggest e2fsck -D
might work, though I can claim no personal experience with that option.
Some references for further reading:
- http://linux.derkeiler.com/Mailing-Lists/Kernel/2009-05/threads.html#06569
- http://fedoraforum.org/forum/showthread.php?t=120654
I'd do it like this.
cp -al
oldirnewdir
&&
mv
olddirtempname
&&
mv
newdirolddir
&&
rm -r
tempname
where olddir is the directory you want to shrink newdir and tempname are temporary filenames
cp -al
creates links to the content of olddir in newdir
and the next three commands swap them with newdir and clean up.