一次Linux磁盘空间清理的经历

      最近,在Linux上运行BPM应用总是报没有空间的错误。经过一番调查和周折,终于找出了问题的症结,并顺利解决。今天,我把过程总结一下,方便自己或其他有类似问题的朋友参考。这里不对具体命令的具体各种参数做深入介绍,网上相关文档很多。只求尽量给出涉及命令运行的具体场景。

      出现磁盘满后,第一个执行的命令就是df,通过它查看文件系统的挂载情况,该命令可以给出每个文件系统的磁盘占用情况。以期来找到使用率接近100%的文件系统,这样就找到了我们调查的入口点。

     根据经验,BPM应用正是在/data目录下运行。下一步可以执行du -m /data/* | sort -nr | head -10查找在 /data目录下,到底哪个目录或文件占用了大部分空间,结合自己应用的特点就能轻易定位到占用大空间的准确目录或文件。另外,如果你够细心,你会发现有些挂载点空间总量 > 已使用 +  空间余量,但有的文件系统这个正好相等。这主要和对应的文件系统有关系,有的文件系统,像ext2,ext3, 为管理员预留了一部分空间作为系统管理只用。

       如上图,du命令列出了前10个占用空间最多的目录,最左侧的数字是以M为单位。凭应用经验,我知道RDC_Full_PDP目录比较可疑。进入SOA1目录,通过ls -lh 命令进行查看。

      你肯定发现上图中列出的对于RDC_Full_PDP目录对应的大小才559M,和之前用du命令获得的20328M的数字差了不是一点半点。如果有这种想法,你需要了解一下目录内容只是一组包含文件名及其对应索引节点的索引节点文件条目。索引节点包括文件地址,拥有者,类型,权限,地址等信息。一个文件名及其所对应节点信息加起来一般也就几十个字节。ls命令对于目录的大小就是指这些索引节点条目的所占空间总和。那么559M的文件节点,可想而知这里存放了多少个文件。

      下一步,就是确定这个目录里的文件是否属于无用过时数据,我这次的场景恰恰是log信息。如下图示

     确定这些信息无用后,我们就可以直接把它们删除掉。但由于文件数量巨大不管你是用

rm ./RDC_Full_PDP/* 

     还是

for filename in `ls ./RDC_Full_PDP/*`

do

 rm $filename

 done

   或者使用通配符,删除其中一部分

find ./RDC_Full_PDP/ -name Get_RDC_Full_File_2* -exec rm {} \;


  都会报参数列表过长的错误

 

这时候,我们可以使用xargs命令,将find命令的结果通过管道符作为参数传递给rm命令删除与某个通配符匹配的记录。

find ./RDC_Full_PDP/ -name Get_RDC_Full_File_2* -print0 | xargs -0 rm 

或者将大于两周的文件删除

find ./RDC_Full_PDP/ -mtime +14 -print0 | xargs -0 rm 



 

 

 

你可能感兴趣的:(一次Linux磁盘空间清理的经历)