"No space left on device" (磁盘空间不足)问题解决

5,827 阅读3分钟
  1. 首先介绍两个命令

    df -h
    #查看磁盘使用情况
    df -i
    #查看inode使用情况
    
  2. block满了

    通常解决方法是删除大文件,不要直接删除,先确认数据是否重要,否则就掉坑里了。

  3. inode用光了

    出现这种情况,是小文件占用较多的inode,创建文件或目录占用一个inode,通常这些小文件是定时任务引起的,删除需慎重。

linux系统磁盘block、inode占满处理

  1. block占满处理办法

    需要用到的命令如下:

    ll
    #列出当前目录下的文件
    df –vh
    #查看磁盘使用情况
    cd 目录名
    #进入某个目录
    du -sh *
    #统计当前目录内的文件大小
    rm -rf 文件名|目录
    #删除某个文件或者目录(操作不可逆,删除前请确认文件是否无用)
    ls | grep -Ev 'home'|xargs du -sh
    #统计除home目录外其它目录文件大小
    
  • 通过df -vh 查看是哪个分区占满
  • cd 和du 命令查看是哪个目录最大
  • 继续执行cd和du 命令找到最大的文件或者目录
  • 找到最大的文件,通过rm -rf 文件名 命令删除

PS:删除操作前请确认文件是否无用,确认后再删除,如果文件都有用,请考虑升级磁盘大小,如果cd 命令报错请查看进入的是否是目录,通过 ll 命令查看,目录名为蓝色,文件名为白色,另外du 命令长时间没有反应,请 Ctrl + C 结束命令,执行 ll 命令,进入du 命令最后显示目录的下个目录,继续查找

  1. inode 占满处理办法

    需要用到的命令和脚本如下:

    ll
    #列出当前目录下的文件
    df –ih
    #查看磁盘Inode使用情况
    cd
    #目录名 进入某个目录
    du -ah *
    #统计当前目录内及子目录的文件大小
    rm -rf  文件名|目录
    #删除某个文件或者目录(操作不可逆,删除前请确认文件是否无用)
    ls |xargs rm -rf
    #删除当前目录下的全部文件
    check_inode_counts.pl
    #脚本快速统计目录下每个目录占用Inode大小
    find */ ! -type l | cut -d / -f 1 | uniq -c
    #统计当前目录下每个目录占用Inode大小(执行慢默认不使用此命令)
    
  • 使用df -ih 查看是哪个分区占满
  • 下载check_inode_counts.pl脚本执行,依次执行以下命令:
    wget http://downinfo.myhostadmin.net/check_inode_counts.txt
    mv check_inode_counts.txt check_inode_counts.pl
    perl check_inode_counts.pl /
    
    继续执行等于50000的目录,如果没有就是最大值目录占用高。 比如perl check_inode_counts.pl /统计到/home目录等于50000,继续执行perl check_inode_counts.pl /home,一层目录一层目录的执行找到最大占用,如图
  • 继续查找,直到找到占用inode对应较大目录,注意一般都是多个目录。 执行ll命令后会出现很多类似的文件
  • 命令 cat 文件名 查看文件是否异常,异常则删除,不异常再继续查找
    删除此目录下的全部异常文件

PS:如果当前目录下文件全部正常,请执行 cd ../ 返回上层目录,继续上述方法查找。删除操作前请确认文件是否无用,确认后再删除。如果文件都有用,请考虑升级磁盘大小,另外上面删除命令如果卡死可以使用 find . -name ".html"|xargs -t -n5 rm -rf 命令,其中 ".html" 是上面看见的异常文件后缀名

注意:删除文件前请确认文件是否无用,不确定的请咨询网站程序员,另以上方法只在找到问题并处理,您需要自行分析一下产生的原因,如果是备份或者日志占满,需要修改或关闭备份或者日志,如果是木马程序生成大量文件,除删除文件外还需要找到程序漏洞并修复!

转载自

linux系统磁盘block、inode占满处理

“no space left on device”(磁盘空间不足)问题解决