ubuntu16.04中磁盘空间被错误日志占满, 开机失败

http://www.javashuo.com/article/p-epydjtcl-dk.htmlhtml

http://www.javashuo.com/article/p-wvxtlxev-me.htmlapache

https://www.cnblogs.com/allen-3/p/6104832.htmlubuntu

https://zhidao.baidu.com/question/555158273.html服务器

https://www.jb51.net/LINUXjishu/224652.html运维

今天打开ubuntu中的eclipse,发现工程项目被删了,去workspace中查看工程还在,可是不少文件都被删了,原本工程文件应该有200多M,如今只有70M左右。接着系统提示磁盘空间不足,仔细查看原来是/var/log/cups/目录下有两个错误日志文件error_log和error_log.1占用了20G的磁盘空间。打开错误日子,里面都是eclipse

W [12/Mar/2017:20:38:28 +0800] Notifier for subscription 32 (dbus://) went away, retrying!
E [12/Mar/2017:20:38:28 +0800] File \"/usr/lib/cups/notifier/dbus\" has insecure permissions (0100777/uid=0/gid=0).大数据

接下来想去百度下这是什么缘由形成的,可是系统开机开不了。用命令行把这两个错误日志强制删除ui

rm -f error_logspa

rm -f error_log.1操作系统

清空回收站

rm -fr $HOME/.local/share/Trash/files/*

-------------------------------------------------------------

#Ps:使用的是Ubuntu14.04 x64

注意:如下的图片是我修好以后的图片,只是说明我是怎样解决问题的。。。

 

 

1 博主我最近使用Ubuntu时,常常出现一个大问题。那就是磁盘写入量特别的大,达到了90多MB/s(我在这里看的数据)

                    

并且,硬盘灯一直狂闪。

我使用磁盘使用分析器(命令:sudo baobab):看了一下文件分布。。。下图

                

2 在这里,你能够看到哪一个文件的容量比较大,经比较,我发现/var/log/cups文件特别的大,删除后error_log等文件后,仍是迅速增长这些文件,

经查询发现,多是cups服务捣鬼,到这里,有两个方法:

@完全删除log文件(简单,粗暴,可是不可以查看各类log 文件)

@中止cups服务

命令:sudo update-rc.d cups remove

---------------------------------------------

 

同时出现var/log/cups/error_log无限写入致使ubuntu系统空间不足和sudo 命令不可用的状况,究其缘由是由于对/usr文件赋值权限过大,由于要写入/usr文件中一个文件,就将/usr赋予777的权限。之后对/usr赋值要当心 解决方法基本思路就是将权限恢复

---------------------------------------------

那我以为你应该看看是什么缘由致使这个问题的才行!

若是你已经知道问题所在,而且忽略这个问题,并且能够把error_log这里的内容清空的话可使用以下命令:
crontab -e
*/2 * * * * echo "" > /var/log/cups/error_log

上面的操做要用root用户来操做!

-----------------------------------------------------------

一、错误现象

运维的监控系统发来通知,报告一台服务器空间满了,登录服务器查看,根分区确实没有空间了,以下图所示:

这里首先说明一下服务器的一些删除策略,因为Linux没有回收站功能,咱们的线上服务器全部要删除的文件都会首先移动到系统/tmp目录下,而后按期清除/tmp目录下的数据。这个策略自己没有问题,可是经过检查发现这台服务器的系统分区中并无单独划分/tmp分区,这样/tmp下的数据实际上是占用了根分区的空间。既然找到了问题,那么删除/tmp目录下一些大数据便可,执行以下命令,检查/tmp下最大的三个数据文件,以下图所示:

[root@localhost~ ]# du -s /tmp/*|sort -nr|head -3
69206016 /tmp/access_log
36 /tmp/hsperfdata_root
36 /tmp/hsperfdata_mapred

经过命令输出发如今/tmp目录下有个66G大小的文件access_log,这个文件应该是apache产生的访问日志文件,从日志大小来看,应该是好久没有清理apache日志文件了,基本断定是这个文件致使的根空间爆满,在确认此文件能够删除后,执行以下删除操做:

[root@localhost ~]#  rm  /tmp/access_log

接着查看系统根分区空间是否释放,以下图所示:

从输出能够看到,根分区空间仍然没有释放,这是怎么回事?

二、解决思路

通常说来不会出现删除文件后空间不释放的状况,可是也存在例外,好比文件被进程锁定,或者有进程一直在向这个文件写数据等等,要理解这个问题,就须要知道Linux下文件的存储机制和存储结构。

一个文件在文件系统中的存放分为两个部分:数据部分和指针部分,指针位于文件系统的meta-data中,数据被删除后,这个指针就从meta-data中清除了,而数据部分存储在磁盘中,数据对应的指针从meta-data中清除后,文件数据部分占用的空间就能够被覆盖并写入新的内容,之因此出现删除access_log文件后,空间还没释放,就是由于httpd进程还在一直向这个文件写入内容,致使虽然删除了access_log文件,但文件对应的指针部分因为进程锁定,并未从meta-data中清除,而因为指针并未被删除,那么系统内核就认为文件并未被删除,所以经过df命令查询空间并未释放也就不足为奇了。

三、问题排查

既然有了解决问题的思路,那么接下来看看是否有进程一直在向acess.log文件中写数据,这里须要用到Linux下的lsof命令,经过这个命令能够获取一个已经被删除但仍然被应用程序占用的文件列表,命令执行以下图所示:

从输出结果能够看到,/tmp/acess.log文件被进程httpd锁定,而httpd进程还一直向这个文件写入日志数据,从第七列可知,这个日志文件大小仅70G,而系统根分区总大小才100G,由此可知,这个文件就是致使系统根分区空间耗尽的罪魁祸首,在最后一列的“deleted”状态,说明这个日志文件已经被删除,但因为进程还在一直向此文件写入数据,空间并未释放。

四、解决问题

到这里问题就基本排查清楚了,解决这一类问题的方法有不少种,最简单的方法是关闭或者重启httpd进程,固然也能够重启操做系统,不过这并非最好的方法,对待这种进程不停对文件写日志的操做,要释放文件占用的磁盘空间,最好的方法是在线清空这个文件,能够经过以下命令完成:

[root@localhost ~]# echo " " >/tmp/acess.log

经过这种方法,磁盘空间不但能够立刻释放,也可保障进程继续向文件写入日志,这种方法常常用于在线清理Apache、Tomcat、Nginx等Web服务产生的日志文件。谢谢阅读,但愿能帮到你们,请继续关注脚本之家,咱们会努力分享更多优秀的文章。

以上就是LINUX运维实战案例之文件已删除但空间不释放问题的分析与解决办法,本文出自 “技术成就梦想” 博客,谢绝转载!谢谢阅读,但愿能帮到你们,请继续关注脚本之家,咱们会努力分享更多优秀的文章。

--------------------------------------------------------