5

我正在运行一个守护进程,它分析目录中的文件,然后删除它们。万一守护进程由于某种原因没有运行,文件就会堆积在那里。今天我在那个目录中有 90k 个文件。再次启动守护程序后,它处理了所有文件。

但是,目录仍然很大;“ls -dh。” 返回大小为 5.6M。如何“整理”该目录?我已经发现重命名该目录,并创建一个具有相同名称和权限的新目录可以解决问题。但是,随着文件随时写入其中,似乎没有一种安全的方法来重命名目录并创建一个新目录,因为暂时不存在目标目录。

所以a)有没有一种方法/一个(shell)程序可以对ext3文件系统上的目录进行碎片整理?或b)有没有办法在目录上创建一个锁,以便尝试写入文件块直到重命名/创建完成?

4

3 回答 3

1

“优化文件系统中的目录。此选项使 e2fsck 尝试优化所有目录,如果文件系统支持目录索引,则通过重新索引它们,或者通过对较小目录或使用传统线性目录的文件系统进行排序和压缩目录。” -- fsck.ext3 -D

当然,这不应该在已安装的文件系统上完成。

于 2010-12-04T15:24:25.897 回答
1

不适用于 Ext3,但可能对其他文件系统的用户有用:

不过,我还没有尝试过这两种解决方案。

于 2015-04-27T12:46:33.270 回答
0

我不知道从目录中回收可用空间的方法。

5MB 不是很大的空间,所以忽略它可能是最简单的。如果这个问题(目录中的文件堆积)经常发生,那么只要目录再次填满,就会重新使用该空间。

如果您迫切需要缩小目录的能力,这里有一个(丑陋的)黑客可能会起作用。

将目录替换为指向空目录的符号链接。如果此问题再次出现,您可以创建一个新的空目录,然后更改符号链接以指向新目录。更改符号链接应该是原子的,因此您不会丢失任何传入的文件。然后您可以安全地清空并删除旧目录。

[编辑添加:事实证明这不起作用。正如 Bada 在评论中指出的那样,您不能以我建议的方式自动更改符号链接。这让我有了我原来的观点。我熟悉的文件系统不提供回收目录块内可用空间的机制。]

于 2010-11-29T19:14:22.873 回答