Linux 磁盘经常出现一些的问题的总结
Linux磁盘空间经常会出现一些或多或少的问题。比如磁盘空间不足。但是有些时候是真的磁盘空间不足吗?
常规流程
在收到一条告警信息的时候,一定要先检查一下磁盘是否真的空间不足。否则,走下去的可能就是一条弯路!
查看信息
优先推荐使用df -h
命令,否则用du -h
的话,就要遍历磁盘中的所有文件,这是绝对不允许的。
1 | df -h |
因此我们可以结合着使用,先在根目录下找出那个子目录是最大的,然后使用 du -sh
来排查。
查看最大的文件目录
查询当前目录,哪个目录占用空间最大。
1 | du -sh --max-depth=1 |
查看最大的文件
1 | ls -lhS |
综上所述,如果找到了占用空间最大的文件或者目录。说明这是一般的问题。
特殊情况
已删除文件被进程所占用
有时候文件已经被删除了,但是进程依然在使用它。因此导致,在进程运行期间,Linux并不会释放该文件的存储空间。因此需要找出这个进程,杀死或者重启。
1 | lsof |grep deleted |
inode不足
文件系统中有一些元数据,用来保存文件的相关信息。文件系统中的inode数量是固定的,因此可能inode已经耗尽了,而文件系统本身还没用完。如果真的不足了,那就删除无用和过去的文件来释放吧。可以用以下命令检查:
1 | df -i |
inode不足引发的问题
现象
发现6400多的进程都是sleep状态,load值较高,内存使用率持续上升
处理
偶然发现inode使用率到了100%,排查哪个目录下文件过多
- 检查哪个磁盘出现的问题
- 检查哪个目录
for i in /*; do echo $i; find $i |wc -l|sort -nr; done
- 然后逐级查下去
最终发现是/var/spool/maildrop 有问题,直接rm -rf ,但是提示
1 | Argument list too long |
在linux中删除大量文件时,直接用rm会出现:-bash: /bin/rm: 参数列表过长
错误。
这时可以用find命令来结合使用。
例:
1 | # rm * -rf 改为: |
坏块
最后一个很常见的问题就是坏的文件系统块。除非另有标记,否则操作系统很可能会认为这些块都是可用的,这会导致文件系统损坏或者硬盘坏死。最好是使用带 -cc 标志的 fsck 搜索并标记出这些块。记住,你不能使用正在使用的文件系统中的 fsck 命令。你应该会要用到 live CD。最后这种情况,目前的确没有遇到过。
总结
以上内容是常见的磁盘空间不足的处理访问,基本能覆盖绝大部分场景。很多时候单纯处理问题并不困难,复杂的是找出事件的原因。对病下药,才是正道。其实,这个问题还可以延伸一下,比如现在是磁盘空间不足,那么是什么导致不足的呢?之后如何规避呢,写一些脚本,还是某代码有问题。。。。。。
参考资料:[1] Nick Congleton 如何解决 Linux 中“磁盘空间不足”的问题