关于Linux磁盘被占满的问题,我们不管是使用wdcp、bt面板、amh面板或者是军哥的lnmp,都会碰到,No space left on device是提示磁盘没有空间,如果我们用的是BT(宝塔面板),因为磁盘没有空间导致面板无法写入session,所以我们会无法登录面板(新面板已修复此问题)!
为什么会突然间磁盘没有空间了,大鸟这类解释下,因为我们可能开启了网站日志,网站日志可以说是吃磁盘的大户,如果我们日志没有定期删除,长此以往导致了VPS主机的磁盘空间被日志占满了。当磁盘空间达到100%时,网站就会出现一些莫名的错误,例如后台无法登录,无法评论以及页面空白等等。也有可能会导致我们的不能登录面板。当磁盘被占满最严重还可能还会导致S-S-H也无法进入,这时就需要我们从VPS面板中执行释放磁盘空间的相关操作了!
大鸟今天就来分享一下Linux系统下使用BT(宝塔面板)的时候磁盘空间被占满的解决办法,当然只要是Linux系统这篇文章都使用,大鸟主要还是想记录一下查找磁盘空间命令的使用方法,以备日后不时之需。
大鸟这里先说下BT(宝塔面板)对与No space left on device错误的常用解决方法。
一、清理网站日志/php站点session/系统邮件/临时文件
cd /www/server/panel && python tools.pyc clear
二、清空面板回收站
rm -rf /www/Recycle_bin/*
三、清除mysql二进制日志(操作过程中会停止重启数据库)
/etc/init.d/mysqld stop rm -f /www/server/data/ib_logfile* rm -f /www/server/data/mysql-bin.* /etc/init.d/mysqld start
需要注意的是 执行rm命令时是不会返回任何提示的,直到能再次输入命令之前它都是正在删除文件的状态能输入命令的时候即删除完成。
如果上面的常见方法还是不能帮你解决问题,那么我们深入一下,比如我们可以查看下系统里面的大文件,大目录等等。
四、解决磁盘空间占用100%问题
4.1 查看当前磁盘剩余空间
命令:df -h
,使用这个命令可以看到当前VPS主机的磁盘空间还有多少了,如果看到占用达到90%以上,这时你就要清理一下空间了。
4.2 查找大文件
使用以下命令查找在大文件
#当目录下的大于1G、100MB、10MB的文件 find . -type f -size +1024M find . -type f -size +100M find . -type f -size +10M
使用以上命令就可以摸索出大文件了,如果你的VPS的文件多的话,你还需要进入某一个目录下执行上述命令。
4.3 查找大目录
使用以下命令找出大文件夹和目录:
sudo du -s * | sort -nr | head #显示前10个占用空间最大的文件或目录 dudo du -hm --max-depth=2 | sort -nr | head -12 #显示前12个占用空间大的目录(包括二级目录)
4.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命令的时候一定要小心些,删除之后的文件是无法恢复的。
五、 解决磁盘inode占用100%问题
5.1 查看inode占用情况
硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。每个inode节点的大小,一般是128字节或256字节。inode与数据存储对应关系如下:
inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。
使用命令df -ia
可以查询当前inode占用情况:
5.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的目录了,然后上面的方法删除文件或者文件夹即可。
5.3、sendmail或者postfix
inode一般来说是用不完的,除非是程序产生大量的日志,如果是/var/spool/postfix/maildrop/ 中有大量的文件,而且我们还在使用postfix的话,可以确定是因为postfix运行不正常导致的。当然如果sendmail或者postfix正常运行,则会在/var/mail目录下也会堆积大量的邮件。
如果不用sendmail或者postfix的话,建议直接删除或者卸载它们:
apt-get remove sendmail* yum remove sendmail 或者 yum remove postfix sudo apt-get remove postfix sudo apt-get remove --auto-remove postfix
六、总结
一般我们用BT(宝塔面板)的话,前面3条命令就可以解决,但是不排除遇到奇葩的问题,所以如果你遇到奇葩的问题,不妨用这些方法解决看看。其实我们用df -h
的时候会看到很多的数据,只要Use%这一列没有一个达到90%就可以了,一般只需要关注系统盘,即第一行,若有挂载数据盘到www目录,也要注意。