缩小/重置目录大小?


11

有没有办法缩小目录条目?

我的dovecot maildir目录的大小已从默认的4096增加到几个兆,并且它与磁盘配额有关。

我发现的唯一方法是删除并重新创建目录。我希望某个地方有一个神奇的功能-我对任何东西都开放,除了手工编码的汇编程序。

编辑:对于后代,查找> 4096的地价:

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

Answers:


6

另请参见rm包含数百万个文件的目录;切线相关,但我们在那里进行讨论。

据我所知,至少在ext2 / 3上,不,没有(在线)缩小它们的方式,而不需要删除+重新创建。卸载后,有一些消息来源暗示e2fsck -D可能可行,尽管我不能声称自己会使用该选项。

一些参考资料供进一步阅读:


1
第一个链接特别有用:它专门解决了我的问题(邮件服务器),而Ted Tso在对话中
发挥了重要作用

3

最近,我不得不删除并重新创建一个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/

2

我会这样

cp -aloldir newdir && mvolddir 临时名称&& mvnewdir olddir && rm -r临时名称

其中olddir是要收缩的目录 newdir,tempname是临时文件名

cp -alnewdir中创建指向olddir内容的链接, 接下来的三个命令与newdir交换它们并进行清理。


光滑 从未听说过cp -l
Kevin Buchs
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.