Site icon 时鹏亮的Blog

nginx: [emerg] open() “/var/run/nginx.pid” failed (28: No space left on device)的问题定位

请知悉:本文最近一次更新为 1 year 前,文中内容可能已经过时。

很明显,如果仅仅是磁盘空间满了,也就不值得写一篇博客了。

了解过Linux的同学应该听说过inode吧,本次记录就是inode满了所致。发现nginx无法重启后,第一时间执行指令查看磁盘空间剩余情况。

df -h

发现空间充足,恩,那必定是出在inode数上了,一时间想不起如何定位inode数多的文件夹了,浪费了些时间翻资料。

知乎上找到个指令:

for i in /var/spool/*; do echo $i; find $i |wc -l; done

执行后定位发现/var/spool/clientmqueue下占用了三十多万inode,果断删了解决问题。

查询问题的时候,还询问过ChatGPT:“如何定位inode数量多的文件夹”,问题解决的时候回去看,发现它也给出了答案:

要定位inode数量多的文件夹,可以使用以下命令:

find /path/to/directory -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n

解释一下这个命令的每个部分:

find /path/to/directory:搜索目标文件夹以及其中的子文件夹。
-xdev:限制搜索仅在当前文件系统内进行,并排除挂载点和其他文件系统。
-type f:仅返回文件,而不是目录或符号链接。
cut -d "/" -f 2:从完整的文件路径中提取第二个字段(即文件所在的顶级目录)。
sort:按字母顺序排序。
uniq -c:计算每个唯一值的出现次数。
sort -n:按数字顺序排序,使最常见的顶级目录出现在列表顶部。

执行此命令后,您将获得一个按照顶级目录计算文件计数的列表。例如,它可能会显示某个文件夹 /var/log 中有大量的小文件,导致 inode 使用率过高。

一旦您确定了占用 inode 最多的文件夹,就可以通过删除、归档或移动文件来释放 inode。另外,还可以考虑使用 inode 更高的文件系统(如 XFS),以便更好地处理大量小文件。

微调了下从根目录遍历,指令如下:

find / -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n

想来日后也许会用到。


参考资料

Linux中inode使用率满了解决办法( inode节点满处理方法)


如您从本文得到了有价值的信息或帮助,请考虑扫描文末二维码捐赠和鼓励。

尊重他人劳动成果。转载请务必附上原文链接,我将感激不尽。


与《nginx: [emerg] open() “/var/run/nginx.pid” failed (28: No space left on device)的问题定位》相关的博文:

Exit mobile version