为什么这两个命令报告可用空间的方式如此不同?这种情况从去年开始不时在几个 Ubuntu 18.04 虚拟机上发生。
df
报告 100% 已使用,而du -smh
仅显示 4.0G(总)中的 2.3G 在使用中。
当系统日志服务器停机进行维护时,通常会出现错误消息rsyslog
或syslog-ng
填充错误消息。/var
# df -mh /var
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/new_vg-var 4.0G 3.9G 0 100% /var
# du -smh /var
2.3G /var
# fuser /var
df
查询文件系统中使用的总块数,参见 man 3 statvfs。快速准确地计算卷,但没有关于哪些文件的详细信息。du
循环遍历文件并将它们的大小相加。速度较慢,但可以按文件大小打印。差异可能意味着已删除的文件仍被某些程序打开。这种大文件最常见的是日志或数据库,但也可以是任何东西。
根本原因是您的远程日志记录配置。
短期,正确轮换日志文件,例如通过运行
logrotate
ad-hoc。请注意,/etc/logrotate.d/*syslog 中的典型配置会向 rsyslog 发送 HUP 信号以重新打开新的日志文件。考虑增加 /var 的大小以处理日志文件的实际大小。
修改日志记录配置以在远程关闭和磁盘空间不足时执行适当的操作。rsyslog 可以配置为使用有限空间的队列并在队列满时丢弃消息。来自 SLES 知识库的rsyslog 配置示例,需要针对您的日志记录设置进行定制:
df 大于 du 的最常见原因:
du
在整个文件系统上运行。du -s /filesystem/*
,你错过了顶部的点文件。重新运行为du -sx /filesystem
du
无法到达文件来确定大小。可以通过卸载阴影文件系统或通常使用原始文件系统的循环安装来调整它们的大小。du
无法再访问它们以进行阅读,但它们仍然占用空间。尝试lsof +aL1 /filesystem
查找孤立文件和保持它们打开的进程。当进程关闭文件时,空间将被释放。df 小于 du 的最常见原因:
du
正在下降到它并计算那个空间。重新运行为du -sx /filesystem