Linux系统磁盘空间占满的解决方法-No Space Left on Device错误

关于Linux磁盘被占满的问题,之前在使用WDCP面板时有遇到过,因为在面板后台开启了网站日志,但是日志没有定期删除,长此以往导致了VPS主机的磁盘空间被日志占满了。当磁盘空间达到100%时,网站就会出现一些莫名的错误,例如后台无法登录,无法评论以及页面空白等等。

不过最近在维护网络监控平台ping.wzfou.com时,发现磁盘空间还有不少,但是日志中依然报No Space Left on Device错误。经过排查,终于发现是Linux磁盘的inode被用完了,导致网站无法继续写入新的数据,最终的后台就是Smokeping也运行不正常,报表都无法显示。

不管是磁盘空间还有磁盘的inode空间,只要是被占用满了都会造成网站的不稳定。有时候我们可能没有怀疑到这一点,可能还会去寻找其它的问题。磁盘被占满最严重可能还会导致S#S¥H也无法进入,这时需要我们从VPS面板中执行释放磁盘空间的相关操作了。

Linux系统磁盘空间占满的解决办法-No Space Left on Device错误

这篇文章就来分享一下Linux系统磁盘空间占满的解决办法,主要还是记录一下查找磁盘空间命令的使用方法,以备日后不时之需。更多的Linux命令使用方法,这里还有:

  1. 三个命令工具Rsync,SCP,Tar-快速解决VPS远程网站搬家与数据同步
  2. Linux系统监控命令整理汇总-掌握CPU,内存,磁盘IO等找出性能瓶颈
  3. Linux Crontab命令定时任务基本语法与操作教程-VPS/服务器自动化

PS:2019年2月22日更新,当磁盘空间已经即将用尽时,这时候就要考虑扩容硬盘了:Linux VPS主机硬盘扩容方法-VPS新硬盘分区挂载和硬盘动态扩容

一、解决磁盘空间占用100%问题

1.1  查看当前磁盘剩余空间

命令:df -h,使用这个命令可以看到当前VPS主机的磁盘空间还有多少了,如果看到占用达到90%以上,这时你就要清理一下空间了。

Linux系统磁盘空间命令

1.2  查找大文件

使用以下命令查找在大文件

#当目录下的大于1G、100MB、10MB的文件
find . -type f -size +1024M
find . -type f -size +100M
find . -type f -size +10M

使用以上命令就可以摸索出大文件了,如果你的VPS的文件多的话,你还需要进入某一个目录下执行上述命令。

Linux系统磁盘空间查找大文件

1.3  查找大目录

使用以下命令找出大文件夹和目录:

sudo du -s * | sort -nr | head #显示前10个占用空间最大的文件或目录 
dudo du -hm --max-depth=2 | sort -nr | head -12 #显示前12个占用空间大的目录(包括二级目录) 

Linux系统磁盘空间排序

1.4  删除文件或者目录

具体使用规则:

rm -rf 目录名字   

-r 向下递归,不管有多少级目录,一并删除。

-f 直接强行删除,没有任何提示。

实例:

删除文件夹实例:

rm -rf /var/log/httpd

这句代码的意思是:删除/var/log/httpd目录以及其下所有文件、文件夹

删除文件实例:

rm -f /var/log/httpd/access.log

这个将会强制删除/var/log/httpd/access.log这个文件

注意:在linux中是没有设置回收站的,因此在使用rm命令的时候一定要小心些,删除之后的文件是无法恢复的。

Linux系统磁盘空间删除无法恢复

二、 解决磁盘inode占用100%问题

2.1  查看inode占用情况

硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。每个inode节点的大小,一般是128字节或256字节。inode与数据存储对应关系如下:

Linux系统磁盘空间inode对应

inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。

Linux系统磁盘空间索引点

使用命令df -ia可以查询当前inode占用情况:

Linux系统磁盘空间当前使用

2.2  查出inode占用大的目录

使用以下命令计算出当前目录下各个文件夹占用inode情况:


#当前各大文件夹占用inode情况
for i in /var/*; do echo $i; find $i |wc -l; done
#排序
sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n

多次使用以上命令就可以查出具体的占用大inode的目录了,然后上面的方法删除文件或者文件夹即可。

Linux系统磁盘空间多次查询

三、总结

inode一般来说是用不完的,除非是程序产生大量的日志,例如本次wzfou.com遇到的问题是/var/spool/postfix/maildrop/ 中有大量的文件,这是因为postfix运行不正常导致的。当然如果sendmail或者postfix正常运行,则会在/var/mail目录下也会堆积大量的邮件。

Linux系统磁盘空间大量日志

如果不用sendmail或者postfix的话,建议直接删除或者卸载它们:

apt-get remove sendmail*
yum remove sendmail
或者
yum remove postfix
sudo apt-get remove postfix
sudo apt-get remove --auto-remove postfix

有些朋友想到可以用脚本来监控VPS主机的inode使用情况,其实挖站否之前介绍的Zabbix可以实现服务器的inode监控,详细见:Zabbix安装与使用-强大的服务器性能监控工具掌控服务器软硬件资源

Linux系统磁盘空间监控

文章出自:挖站否 https://wzfou.com/disk-no-space/,版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。


分享到:
Avatar for Qi
关于站长(Qi),2008年开始混迹于免费资源圈中,有幸结识了不少的草根站长。之后自己摸爬滚打潜心学习Web服务器、VPS、域名等,兴趣广泛,杂而不精,但愿将自己经验与心得分享出来与大家共勉。
已有 5 条评论
  1. Avatar for z z

    好实用啊 今天刚好在打理已经荒废的站,,登陆linode看了下磁盘使用满了 正在发愁怎么清理。。。不过linode很慷慨的给我免费升级到25G的空间了。。

    2018年11月4日 15:25 回复
    • Avatar for Qi Qi

      Linode确实良心,每年免费升级一次配置。

      2018年11月4日 17:30 回复
  2. Avatar for 明明 明明

    监控站不错。

    2018年11月1日 08:13 回复
  3. Avatar for Nes Nes

    以前遇到过,找主机商解决了。

    2018年10月31日 08:48 回复
  4. Avatar for 永恒之光 永恒之光

    第一

    2018年10月30日 22:34来自iPhone 回复