熟悉Linux操作系统的人都清楚,Linux在使用一定时间,需要对磁盘的空间进行扫描,以便节省更多的磁盘空间。但很多人都不知道怎样清理Linux磁盘?对于Linux磁盘已满的问题,我们通常的解决方案是使用du查找可以清除的大文件,然后临时删除它们以首先减少磁盘使用率,以确保磁盘可以继续写入。
怎样清理Linux磁盘?
1、确定是不是真的是磁盘空间不足
输入命令:df –lh 查看磁盘信息
2、如何定位最大文件目录
输入命令: cd / 进入根目录。
输入命令:du -h max-depth=1 寻找当前目录,哪个文件夹占用空间最大
3、如何定位最大文件
输入命令:ls –lhS 将文件以从大到小顺序展现
4、确认文件未被占用
删除文件谁都会:rm –f catalina.out 但是,最好确认下是否要下载下来让开发人员分析日志。
但是也有些不一样的情况影响我们的推进效果。下面我们就来看一下不同情况,如果清理Linux磁盘。
一、被忽略的隐藏文件
1、认识 swapfile
Linux 的交换文件 swapfile 的产生场景较普遍,而且也是以隐藏文件的形式存在的,因此这里主要聊聊 swapfile 这一类的隐藏文件。
当用 vim 打开一个文件时,都会产生一个 .swp 的临时隐藏交换文件,用来备份缓冲区中的内容。
当文件非正常关闭(比如直接关闭终端或者电脑断电等)时,.swp文件不会被删除,这样就可以用此文件来恢复文件。(注意当正常关闭时,此文件会被删除;且如果只是读取文件,不会产生 .swp 文件)
而且,如果 vim 意外退出后,又重新打开文件二次编辑,那么旧的 .swp 文件会继续保留,并产生新的 .swo 临时隐藏文件。
如果二次编辑的时候,vim 又异常退出了,那么还会继续产生新的临时隐藏文件.swn、.swm、 .swl …
2、处理建议
有些隐藏文件的磁盘占用也挺大:
1.:/tmp # ll -rth | grep G
2.total 17.7G
3.-rw------- 1 xxxx users 17.6G 2020-02-12 18:27 .sqlkfJTFl.swp
所以有时候碰到大隐藏文件导致磁盘满的情况,如果没能发现这些隐藏文件,就会觉得离奇和疑惑。
所以在排查磁盘满问题的时候,可以通过执行 vim -r 来查看和检查下所有临时交换文件的大小;或者通过 ls -lha 把所有隐藏文件都列出来看看大小。
更粗暴地,如果不想留 swapfile 这个特性,可以考虑关掉 swapfile :
1.vim /etc/vimrc
2.# 添加如下配置
3.set noswapfile # 禁止在编辑时候产生此文件;
但是注意这仅限于对文件损失可以容忍的情况下;
如果不能容忍文件损失,那还是建议还是打开 swapfile:
1.vim /etc/vimrc
2.# 添加如下配置
3.set swapfile # 则是在编辑时候产生此文件。
二、未释放的已删除文件
1、du 和 df 不一致
如果隐藏文件因素排除了,还是发现 du 出来的大小诡异,比如 du 发现磁盘并没有用满,但是 df 看到磁盘使用率却是 100% 。
这又会是什么原因呢?
这时候,通常就得怀疑有一些已删除的文件,还被一些进程 hold 住句柄没释放,导致这些文件虽然已经删除,也的确看不到了,但是却还占着磁盘空间;从而导致 du 和 df 出来的磁盘使用结果不一致的情况。
2、处理建议
通过执行 lsof | grep deleted 可以找到那些没有释放磁盘空间的文件和进程,然后通过重启对应进程,就可以达到释放已删除文件占用的空间的目的。
另外,对于这种情况,还有个错误的处理方法,这里特别提醒下:
有些同学在找到未释放已删除文件的 pid 之后,可能会直接通过 kill pid 来达到释放已删除文件的目的。这种做法确实能够释放已删除文件,从而释放磁盘空间,但是这种做法是有副作用的,危害可大可小。
如果在离线环境这么操作,影响一般不大;但是如果在生产环境这么操作的话,那就可能搞出故障来了。
我们假设这么一种场景:
生产环境的某程序由于某种bug,一直不会释放日志文件,而分时写入的日志文件又是有过期删除机制的,这样一直持续下去,就会发现服务器上有大量的已过期删除日志文件还占用着磁盘空间,直到产生磁盘满风险。
那么这个时候如果直接通过 kill pid 来处理的话,就直接把生产环境的在线程序直接干掉了;这个后果就可想而知了:在这个程序被守护进程拉起来之前,这个服务都是不可用的。
好了,关于怎样清理Linux磁盘的全部内容,想了解更多关于Linux的信息,请继续关注我们吧。