磁盘空间满的问题

kinux  os pc 出现磁盘空间不足问题有:

问题原因

导致该问题的可能原因包括:

  • 磁盘分区空间使用率达到百分之百。
  • 磁盘分区inode使用率达到百分之百。
  • 僵尸文件:已删除文件因句柄被占用未释放导致相应空间未释放。
  • 挂载点覆盖:在原有文件系统的相应目录下已经存在大量文件。挂载了新磁盘后,导致使用 df 命令能统计到相关空间使用,而使用 su 命令统计不到

    处理办法

    不同的原因需要通过不同的方法解决:

  • 分区容量满
  • inode容量满
  • 修改inode数量
  • 僵尸文件分析删除
  • 挂载点覆盖

分区容量满

运行 df -h 查看磁盘使用 以及使用 du -sh * 查看

inode容量满

分析根目录下每个目录下面有多少个文件。

for i in /*; do echo $i; find $i | wc -ldone

df  -i  查看实际inode 命令

命令重新建立文件系统,指定inode节点数。

  1. mkfs.ext3 /dev/xvdb -1638400

运行以下命令查看修改后的inode节点数。

  1. dumpe2fs -/dev/xvdb | grep node

僵尸文件分析删除

如果磁盘和inode都没有问题,则需要查看是否存在未被清除句柄的僵死文件。这些文件实际上已经被删除,但是有服务程序在使用这些文件,导致这些文件一直被占用,无法释放磁盘空间。如果这些文件过多,会占用很大的磁盘空间。

  1. lsof |grep delete | more   就可以查看

挂载点覆盖

先取消磁盘挂载,再检查原挂载目录下的空间占用情况。

问题2

 df 发现var 目录下没有空间可以用,但是du 发现只使用了很少的空间,这是什么问题?

这就要看df du的实现原理了

2. df 和du 的工作原理

2.1 du的工作原理

du命令会对待统计文件逐个调用fstat这个系统调用,获取文件大小。它的数据是基于文件获取的,所以有很大的灵活性,不一定非要针对一个分区,可以跨越多个分区操作。如果针对的目录中文件很多,du速度就会很慢了。

2.2 df的工作原理

df命令使用的事statfs这个系统调用,直接读取分区的超级块信息获取分区使用情况。它的数据是基于分区元数据的,所以只能针对整个分区。由于df直接读取超级块,所以运行速度不受文件多少影响。

du和df不一致情况模拟

常见的df和du不一致情况就是文件删除的问题。当一个文件被删除后,在文件系统 目录中已经不可见了,所以du就不会再统计它了。然而如果此时还有运行的进程持有这个已经被删除了的文件的句柄,那么这个文件就不会真正在磁盘中被删除, 分区超级块中的信息也就不会更改。这样df仍旧会统计这个被删除了的文件
 
  • du -s命令通过将指定文件系统中所有的目录、符号链接和文件使用的块数累加得到该文件系统使用的总块数;
  • 而df命令通过查看文件系统磁盘块分配图得出总块数与剩余块数
http代理服务器(3-4-7层代理)-网络事件库公共组件、内核kernel驱动 摄像头驱动 tcpip网络协议栈、netfilter、bridge 好像看过!!!! 但行好事 莫问前程 --身高体重180的胖子
原文地址:https://www.cnblogs.com/codestack/p/11045940.html