缩小/重置目录大小?

缩小/重置目录大小?

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

我的 dovecot maildir 目录的大小从默认 4096达到几兆,而且会干扰磁盘配额。

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

编辑:为了后代,找到 dirents>4096:

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

答案1

也可以看看rm 包含数百万个文件的目录(原始问题没有直接关系,但我们仍然在那里讨论了这个问题)。

据我所知,至少在 ext2/3 上,没有,没有(在线)方法可以缩小它们,除非删除 + 重新创建。卸载,一些消息来源建议e2fsck -D可能有效,尽管我没有使用过此选项的亲身体验。

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

答案2

我会这样做。

cp -al奥尔迪尔新目录&& mv旧目录临时名称&& mv新目录旧目录&& rm -r临时名称

在哪里旧目录是要收缩的目录 新目录临时名称是临时文件名

cp -al创建指向以下内容的链接旧目录新目录 接下来的三个命令将它们与 newdir 交换并清理。

答案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/

然后,我们删除该目录。根据大小,您可能需要使用更复杂的技术来执行此操作。例如,使用带有 --delete 标志的 rsync 将空目录同步到此目录可能会更有效。

rm -rf /tmp/deleteme/

相关内容