轻量应用服务器磁盘空间及Inode满的问题如何排查解决?
157阅读
0评论
0点赞
本文针对轻量应用服务器在Linux环境下遇到的磁盘空间不足问题进行了详细的分析与解决。首先介绍了可能的原因,包括磁盘分区空间或Inode使用率达到100%、存在僵尸文件以及挂载点覆盖等。随后提供了具体的解决方案,如清理大文件、升级配置、增加Inode数量和处理僵尸文件等。
在使用轻量应用服务器的Linux实例时,如果遇到“No space left on device
”的错误提示,表明磁盘空间不足。本文将指导您如何诊断并解决磁盘空间不足的问题。
问题原因
磁盘空间不足的问题通常由以下几个原因引起:
- 磁盘分区空间使用率达到100%:这通常是因为磁盘上的文件或目录占用的空间过大。
- 磁盘分区Inode使用率达到100%:即使磁盘空间仍有余地,也可能因为Inode资源耗尽而无法创建新的文件或目录。
- 存在已删除未释放的僵尸文件:这类文件虽然已被删除,但由于文件句柄被打开,导致文件空间未能被释放。
- 挂载点覆盖:在原有文件系统的目录下挂载新磁盘后,挂载点被覆盖,可能导致系统内的应用继续读写原有文件系统空间,从而出现空间不足的情况。
- inotify watches达到上限:inotify是Linux系统的一种监控文件系统事件的机制,该错误与磁盘空间无关。
解决方案
一、磁盘分区空间使用率达到100%
清理占用空间较大的文件或目录
-
使用救援连接Linux服务器:具体操作请参见使用救援连接Linux服务器。
-
查看磁盘使用率:
df -h
-
查找占用空间较大的目录:
cd / du -sh *
-
逐级查看占用空间较大的子目录:
cd /usr du -sh *
-
删除不再使用的文件或目录:根据业务需求决定哪些文件或目录可以安全删除。
升级配置、扩容数据盘或挂载数据盘
如果通过清理文件无法释放足够的空间,可以考虑升级配置、扩容磁盘或挂载数据盘。具体操作请参见升级配置、挂载数据盘和扩容数据盘。
二、磁盘分区Inode使用率达到100%
查询Inode使用率
- 使用救援连接Linux服务器:具体操作请参见使用救援连接Linux服务器。
- 查询Inode使用率:
df -i
清理Inode占用高的文件或目录
-
分析根目录下的每个二级目录下有多少个文件:
for i in /*; do echo $i; find $i | wc -l; done
-
逐层进入Inode占用最高的目录,继续执行上述命令,逐步定位占用过高空间的文件或目录,并进行相应清理。
增加Inode数量
- 卸载文件系统:
umount /home
- 重新建立文件系统,增加Inode节点数:
mkfs.ext3 /dev/xvdb -N 1638400
- 重新挂载目录:
mount -a
- 确认修改后的Inode节点数:
dumpe2fs -h /dev/xvdb | grep node
三、存在僵尸文件
-
使用救援连接Linux服务器:具体操作请参见使用救援连接Linux服务器。
-
安装lsof:
# Alibaba Cloud Linux、CentOS等系统 yum install -y lsof
或
# Debian、Ubuntu等系统 apt-get install -y lsof
-
查看僵尸文件占用情况:
lsof |grep delete | sort -k7 -rn | more
-
释放句柄,清除僵尸文件:
- 重启服务器清除:重启服务器,系统会退出现有进程,释放调用的deleted文件的句柄。
- 通过kill命令清除:
- 列出PID进程号:
lsof |grep delete
- 停止占用这些文件的服务进程:
kill <进程号>
- 列出PID进程号:
四、挂载点覆盖
但当我们把/dev/vdb1挂载到/home
目录后,如下图所示,可以看到系统盘/dev/vda1使用率还是95%,整个根分区下最大的目录仅有/usr
占用超过1GB,无法找到具体哪个目录占用高,/home
目录统计到的使用空间仅为20KB,不是此前看到的24GB空间占用,此现象即为挂载点覆盖。
解决方法:
- 取消磁盘分区挂载:这一步骤可能会导致应用服务中断,请选择合适的业务时间进行。
- 检查原挂载目录下的空间占用情况。
评论(0)
暂无评论,期待您的发言...
发表评论