背景
我遇到了一个小的 logrotate 失误...Logrotate 会错误地旋转存档日志,导致我的文件数量呈二次增长/var/log/
。当我意识到有什么不对劲的时候,/var/log/
已经包含了几百万个文件...
我设法(在经历了一些头发脱落和 find/sed/grep 魔法之后)删除了所有有问题的文件并修复了我的 logrotate 配置。并认为一切都很好......
问题
每当我ls
/du -hs
或以其他方式列出内容/var/log/
(现在包含 80mb 的档案/日志和最多几百个文件)时,执行该操作的过程都会挂起一两分钟。我确实相信这与 logrotate 故障有某种关系,但我不确定,可能是其他原因。无论如何,我不知道从哪里开始调试或寻找修复方法。请帮忙 :3
其他信息
uname -a
Linux xxx 3.3.8-gentoo #18 SMP Sat Sep 21 22:44:40 CEST 2013 x86_64 Intel(R)
Core(TM)2 CPU 4400 @ 2.00GHz GenuineIntel GNU/Linux
cat /proc/meminfo
MemTotal: 2051552 kB
MemFree: 75612 kB
Buffers: 9016 kB
Cached: 1740608 kB
SwapCached: 0 kB
CFQ IO scheduler + SLUB allocator
我是这样想的:目录中有多少个文件太多?(从网络下载数据)是相关的,但我不再保留这些文件了。
编辑
即使调用之后问题仍然存在,init 1
所以我认为可以安全地假设除了 FS 之外没有其他进程可以归咎。
解决方案(根据接受的答案应用)
init 1
mv /var/log /var/log1
mkdir /var/log
chmod --reference=/var/log1 /var/log
chown --reference=/var/log1 /var/log
tar -C /var/log1 -cvp . | tar -C /var/log -xvp
rm -rf /var/log1
init 5
答案1
目录的大小只会增加,不会缩小。尝试将所有文件移出到临时目录(如 log2),然后 rmdir 旧目录并将临时目录重命名为新的永久目录。
答案2
从man e2fsck
:
-D Optimize directories in filesystem. This option causes e2fsck to try to optimize all directories,
either by reindexing them if the filesystem supports directory indexing, or by sorting and com‐
pressing directories for smaller directories, or for filesystems using traditional linear directo‐
ries.
Even without the -D option, e2fsck may sometimes optimize a few directories --- for example, if di‐
rectory indexing is enabled and a directory is not indexed and would benefit from being indexed, or
if the index structures are corrupted and need to be rebuilt. The -D option forces all directories
in the filesystem to be optimized. This can sometimes make them a little smaller and slightly
faster to search, but in practice, you should rarely need to use this option.
The -D option will detect directory entries with duplicate names in a single directory, which
e2fsck normally does not enforce for performance reasons.
换句话说,如果您有一个可以离线的文件系统卷,那么您只需e2fsck -Df <block_device>
在其上运行它,它就会缩小所有目录。包括文件系统中的根目录,否则您无法删除它,除非重新格式化该卷。就我而言,它成功地将卷上的根目录从大约 56MiB(以前有超过 1M 的文件)缩小到大约 220KiB(大约 3-4K 的文件)。