出品|CSDN博客
对于Linuxc盘满的问题,我们一般的处理思路是用du查找可清除的大文件,之后临时删除让c盘使用率先降出来,进而早日保证c盘能继续写入。
然而,有一些情况的处理疗效不太一样,du/df呈现的结果可能就会让人蒙蔽不解。下边,我就分享下几个工作中遇见过的较诡异的c盘满问题。
被忽视的隐藏文件
1、认识swapfile
Linux的交换文件swapfile的形成场景较普遍,但是也是以隐藏文件的方式存在的,因而这儿主要谈谈swapfile这一类的隐藏文件。
当用vim打开一个文件时,就会形成一个.swp的临时隐藏交换文件,拿来备份缓冲区中的内容。
当文件非正常关掉(例如直接关掉终端或则笔记本断电等)时,.swp文件不会被删掉,这样就可以用此文件来恢复文件。(注意当正常关掉时,此文件会被删掉;且假如只是读取文件,不会形成.swp文件)
但是,假若vim意外退出后,又重新打开文件二次编辑,这么旧的.swp文件会继续保留,并形成新的.swo临时隐藏文件。
假如二次编辑的时侯,vim又异常退出了免费linux主机,这么都会继续形成新的临时隐藏文件.swn、.swm、.swl……
2、处理建议
有些隐藏文件的c盘占用也挺大:
:/tmp # ll -rth | grep G
total 17.7G
-rw------- 1 xxxx users 17.6G 2020-02-12 18:27 .sqlkfJTFl.swp
所以有时侯遇到大隐藏文件造成c盘满的情况,若果没能发觉这种隐藏文件,都会感觉诡异和困惑。
所以在排查c盘满问题的时侯,可以通过执行vim-r来查看和检测下所有临时交换文件的大小;或则通过ls-lha把所有隐藏文件都列下来瞧瞧大小。
假如不想留swapfile这个特点,可以考虑关闭swapfile:
vim /etc/vimrc
# 添加如下配置
set noswapfile # 禁止在编辑时候产生此文件;
然而注意这仅限于对文件损失可以容忍的情况下;假如不能容忍文件损失,那还是建议还是打开swapfile:
vim /etc/vimrc
# 添加如下配置
set swapfile # 则是在编辑时候产生此文件;
未释放的已删掉文件
1、du和df不一致
假如隐藏文件诱因排除了,还是发觉du下来的大小奇特,例如du发觉c盘并没有用满,并且df见到c盘使用率却是100%。
这又会是哪些缘由呢?
这时侯,一般就得怀疑有一些已删掉的文件,还被一些进程hold住句柄没释放,致使这种文件尽管已然删掉linux增加磁盘空间,也的确看不到了,并且却还占着c盘空间;
因而造成du和df下来的c盘使用结果不一致的情况。
2、处理建议
通过执行lsof|grepdeleted可以找到这些没有释放c盘空间的文件和进程,
之后通过重启对应进程,就可以达到释放已删掉文件占用的空间的目的。
这个贴子《清空热文件的常见错误操作》阐述了“已删掉文件还占用c盘”的形成场景和处理方法。
另外,对于这些情况,还有个错误的处理方式,这儿非常提醒下:
有些朋友在找到未释放已删掉文件的pid以后,可能会直接通过killpid来达到释放已删掉文件的目的。
这些做法确实才能释放已删掉文件,因而释放c盘空间,并且这些做法是有副作用的,害处可大可小。
假如在离线环境如此操作,影响通常不大;并且假如在生产环境如此操作的话linux增加磁盘空间,那就可能搞出故障来了。
我们假定如此一种场景:
生产环境的某程序因为某种Bug,仍然不会释放日志文件,而分时写入的日志文件又是有过期删掉机制的,这样仍然持续下去,都会发觉服务器上有大量的已过期删掉日志文件还占用着c盘空间,直至形成c盘满风险。
这么这个时侯假如直接通过killpid来处理的话,就直接把生产环境的在线程序直接杀死了;这个后果就可想而知了:在这个程序被守护进程拉上去之前,这个服务都是不可用的。
挂载引起的谜团
1、消失的空间
假如执行ls-lha并没有发觉大隐藏文件linux通配符,执行lsof|grepdeleted也没有发觉未释放的已删掉文件;并且df见到根目录确实达到100%了,而du下来的根目录实际使用空间却并没有用满。
这又会是哪些缘由呢?
出现这些情况的时侯,请追忆下近来这台c盘异常的机器,是否检修或则换过c盘?
根目录出现这些诡异现象,一般就是在检修/更换c盘的时侯(这儿假定是更换/data1),新c盘还没挂载就开始往/data1写数据了,这时侯因为还没挂载楼盘,所以写入数据占用的是根目录的空间。
之后换好/data1盘并重新挂载起来后,原先置于/data1的数据,也不会出现在挂载盘上,还是继续占用根目录的空间。
所以这时侯才会出现这样的现象:
挂载后du/data1并不大,而且挂载前/data1目录写入的数据实际却占用了根目录空间;并且这个数据在挂载后是看不到的,因而很难发觉。于是都会发觉根目录有一些空间虽然陡然消失了,相当奇特。
2、处理建议
2.1解决方式
如何确认是新的挂载盘掩藏了一些数据呢?把新的挂载盘/data1umount掉,之后再瞧瞧/data1占用的空间就晓得了。
假如umount提示busy,可以通过执行以下命令来解决:
fuser -kmvi /data1 && umount /data1
卸载后,才会发觉/data1目录下确实有大量文件,删掉后,再mount-a重新挂载,之后根目录消失的c盘空间,通常能够找回去了。
2.2测试验证
假如还不放心的话,清除完数据再度挂载后,可以简单测试下:
dd if=/dev/zero of=/data1 bs=1M count=20000
往/data1大约写个20G数据,再观察下根目录的空间是否受影响,假如不受影响就说明问题解决!
2.3给个建议
针对根目录这类诡异问题:建议在每次更换c盘重新做挂载动作之前,检测一下根目录的空间使用情况;假如存在错误写入数据的情况,须要及时清除,之后再进行楼盘挂载,切忌。
原文链接: