每天早上,我的 Dovecot 服务都会宕机,我需要重新启动它,这种情况每天都在重复,所以我在寻找一些线索来找出它宕机的原因,我发现/var/log/邮件日志文件:
"failed to write to main log: length=165 result=-1 errno=28 (No space left on device)"
"write failed on panic log: length=122 result=-1 errno=28 (No space left on device)"
我发现显示此错误的时间与服务中断的时间相同,因此我认为这就是问题的原因。
顺便说一句,我真的不知道发生了什么,因为当我输入:df -h
我可以看到:
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 30G 27G 1.9G 94% /
tmpfs 499M 0 499M 0% /dev/shm
那么磁盘没有满,为什么会出现“设备上没有剩余空间”的警告?我不知道该尝试什么。
笔记:这个错误从两周前开始发生,但我的服务器已经运行了 6 个多月。
答案1
这是因为df
,我们du
以不同的方式计算了已用/可用空间。df
计算层次结构中文件使用的空间,同时du
计算 FS 的 inode。
如果您已旋转日志文件,并且该文件已被某个进程打开,则该进程将继续写入旧文件而不是新文件,因为文件描述符与 inode 相关联,而不是文件名。因此,您已写入似乎在几天前“旋转”的文件,但其 inode 仍在使用中,并且文件会不断增长,直到空闲 inode 耗尽。
为了获得正确的行为,您必须在日志文件轮换后重新启动进程。另一种方法是使用syslog
而不是直接登录文件。
请记住,问题不应该与之相关,dovecot
而应该与每个具有密集日志记录功能的软件相关apache
。
答案2
我建议你检查一下空闲的 inode 数量
DF-我
如果已满,则删除其中一些