/var 文件系统很快就满了。甚至 inode 的使用率也达到 100%。我们必须定期清除日志。由于这个原因,我们也无法使用 ssh。我们最终不得不进行硬重启。我们无法确定确切的根本原因。请帮助我们找出确切的原因并解决问题。
在存储空间有限的服务器上,防止 /var 填满磁盘空间的正确方法是什么?
答案1
/var
是应用程序存储大多数数据的位置。这包括日志文件,库甚至二进制数据对于以下应用程序MySQL或者MongoDB。
谈到你的问题,正如你提到的频繁清除日志,你需要监视写入/var/log
最多的内容并设置适当的日志旋转政策相同。
/var
要根据磁盘使用情况查找前 10 个目录(内部):
sudo du -h /var | sort -hr | head -n10
/var/log
按磁盘使用率查找前 10 个文件(内部)
sudo find /var/log -maxdepth 2 ! -path . -printf "%s %p\n" | sort -rn -k1 | head
机器可用的磁盘大小是多少?
它多久会充满一次?
上述两个命令的输出是什么?
答案2
首先,管道 onhead -n10
只会打印出 中的前 10 个目录条目/var
。如果您有超过 10 个目录,则不会报告它们。其次,du -h
并不是这里使用的最佳工具,因为它会报告重复分配,因为正在报告子目录。
尝试这个来更好地了解下所有一级目录的分配/var
:
# find /var -maxdepth 1 -type d -exec du -smh '{}' \;
21G /var
18G /var/lib
4.0K /var/local
384K /var/www
86M /var/cache
3.3G /var/log
12K /var/mail
16K /var/lost+found
7.8M /var/backups
840K /var/spool
4.0K /var/tmp
4.0K /var/opt
如果您需要深入研究其中一个顶层,以报告父级下的分配,只需将子目录添加到原始命令即可。我可以很容易地看到我的系统elasticsearch
中 18G 分配背后的罪魁祸首:/var
# find /var/lib -maxdepth 1 -type d -exec du -smh '{}' \;
18G /var/lib
...
8.0K /var/lib/vim
18G /var/lib/elasticsearch
@fpmurphy 建议yum
目录可能与您的问题有关。据此推断,每当您使用yum
下载的所有用于更新系统的软件包时/var/cache/yum
,默认情况下都会保留在目录中。您可能需要检查文件的内容/etc/yum.conf
并检查keepcache
环境。您所发的帖子表明keepcache
其值为1
。
如果/var/cache/yum
确实已填满,您可能yum clean all
现在需要运行来修复。有证据表明但是这个命令可能无法像宣传的那样工作谨慎/var
。如果可能的话, 我建议分配更多的空间。