故障排查:
使用命令查看磁盘使用量
# 使用人类可读的格式(预设值是不加这个选项的...)
df -h
# --inodes 列出 inode 资讯,不列出已使用 block
df -i
# 查看当前目录下各个文件及目录占用空间大小
du -sh /
情况一:一般磁盘空间满了,是由于服务器上面跑的服务日志引起的占用太多空间,去删除多于的大文件就可以了。
# 从根盘开始查找大于100字节的文件(字节数可以自己设置)
find / -size +100c -print
# 也可以使用如下命令将文件列出来(注意空格)
find / -size +100c -exec ls -l {} \;
情况二:如果df -hT查询出来磁盘占用满了,但是使用 du -sh 查看没有那么多。
原因:使用rm 命令删除文件时,只有当前文件不存在任何link才会被删除当有进程访问这个文件时,这个文件实际占用空间不会被释放。du 是根据文件名进行空间统计,使用rm 时该文件对系统来说已经不可见,所以不会统计这个文件。使用df 则是磁盘实际占用的数量
解决方法:
# 查看正在使用的已删除得文件
lsof|grep delete
# 发现存在多个这样文件,kill 掉进程文件删除成功
kill <进程id>
情况三:因为认为的误操作,导致某些进程在没有执行完成时被kill 掉了,但是缓存中的程序没有释放,仍然在运行,这会产生一些临时文件占用的磁盘空间资源,这种现象的特点是爆发式增长,在很短时间内就将磁盘空间占满。
- 如果因为父进程被杀掉,子进程还运行导致,那么最简单,kill子进程,就会释放;
- 如果能用ipcs 命令确认是那个用户进程,那么也不困难,顺着使用ipcrm 命令就行;
- 执行进程的用户是比较关键用户如:root用户、有实例的oracle 用户、在线生产用户等。那么建议在确定一位是共享缓存的原因导致的问题后重启服务器;