云服务器 ECS Linux 磁盘空间常见问题处理方法有哪些-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

云服务器 ECS Linux 磁盘空间常见问题处理方法有哪些

2017-10-24 10:33:06 2078 0

本文简要介绍云服务器 ECS Linux 服务器磁盘空间遇到的常见问题及解决办法。

磁盘空间满(含 inode 满)问题处理方法



问题现象


在云服务器 ECS Linux 系统内创建文件时,出现类似如下空间不足提示:
  1. No space left on device …


问题分析


导致该问题的可能原因包括:
  •   磁盘分区空间使用率达到百分之百。
  •   磁盘分区 inode 使用率达到百分之百。
  •    僵尸文件:已删除文件因句柄被占用未释放导致相应空间未释放。


处理办法


要解决该问题,根据不同的问题原因,建议分别通过如下方式进行处理:
  •   分区容量满
  • [url=https://help.aliyun.com/knowledge_detail/52870.html?spm=5176.7841174.2.1.2ontkr#inode 容量满的处理] inode 容量满[/url]
  •   [url=https://help.aliyun.com/knowledge_detail/52870.html?spm=5176.7841174.2.1.2ontkr#修改 inode 数量]修改 inode 数量[/url]
  •   僵尸文件分析与删除




分区容量满的处理


登录服务器,使用 df -h查看磁盘使用率,其中的 mounted on指的是挂载的目录:

循环执行如下指令,看下哪个目录大,进入该目录,直到找到最精确的的文件或目录:
  1. cd /du -sh *


最后,结合业务情况等判断对相关文件或目录进行删除,或者购买更大的数据盘来分担处理。


inode 容量满的处理


登录服务器,运行下面的命令分析根目录下每个目录下面有多少个文件:
  1. for i in /*; do echo $i; find $i | wc -l; done  


然后,逐层进入 inode 占用最高的目录,继续执行上述指令,逐步定位占用过高空间的文件或目录,最后进行相应清理。

修改 inode 数量


ECS Linux 的 inode节点中,记录了文件的类型、大小、权限、所有者、文件连接的数目、创建时间与更新时间等重要的信息,还有一个比较重要的内容就是指向数据块的指针。一般情况不需要特殊配置,如果存放文件很多,需要配置。有时磁盘空间有剩余但是不能存放文件,可能是由于 inode 耗尽所致。 df -i 可以查询 inode 的使用情况:

可以参阅如下步骤调整 inode 节点数量:
注:inode 的调整需要重新格式化磁盘,请确保数据已经得到有效备份后再进行下述操作。
1、卸载系统文件。比如:
  1. umount /home

2、重新建立文件系统,指定 inode 节点数:
  1. mkfs.ext3 /dev/xvdb -N 1638400

3、修改 fstab 文件:
  1. vim /etc/fstab

4、查看修改后的 inode 节点数:
  1. dumpe2fs -h /dev/xvdb | grep node



僵尸文件分析与删除


如果磁盘和 inode 都没有问题,则需要查看是否存在未被清除句柄的僵死文件。这些文件实际上已经被删除,但是有服务程序在使用这些文件,导致这些文件一直被占用,无法释放磁盘空间,使用如下命令可以查看死文件占用情况:
  1. lsof |grep delete | more


如果这些文件过多,会占用很大的磁盘空间。可以通过如下方法来释放句柄,以清除僵尸文件:
  • 重启服务器。
  • 正常停止或杀掉占用这些文件的服务进程。


使用 df 和 du 查看磁盘空间大小不一致



问题现象


云服务器 ECS Linux 服务器,使用 df -h 查看文件系统使用率,可以看到 /dev/xvdb1 磁盘占用了约 27G,挂载目录为 /opt。

但进入到 opt 目录中执行 du -sh ,显示空间总占用量约 2.4G,和 du 查看到的结果不一致。


问题分析

  1. du - estimate file space usage  

du 命令会对统计文件逐个调用 fstat 这个系统调用,获取文件大小。它的数据是基于文件获取,可以跨多个分区操作。
  1. df - report file system disk space usage

而 df 命令使用 statfs 这个系统调用,直接读取分区的超级块信息获取分区使用情况。它的数据基于分区元数据,只能针对整个分区。
导致这个两个命令查看磁盘容量不一致的原因是,用户删除了大量的文件被删除后,在文件系统目录中已经不可见了,所以 du 就不会再统计它。然而如果此时还有运行的进程持有这个已经被删除的文件句柄,那么这个文件就不会真正在磁盘中被删除,分区超级块中的信息也就不会更改,df 仍会统计这个被删除的文件。

处理办法


可通过 lsof 命令查询处于 deleted 状态的文件。被删除的文件在系统中被标记为deleted。如果系统有大量 deleted 状态的文件,会导致 du 和 df 统计结果不一致。    
  1. lsof |grep deleted       //在opt目录下执行lsof |grep deleted


然后,通过如下方法处理:
1、根据 lsof 列出的 pid 直接 kill 相应进程或者重启对应的服务。示例:
  1. kill -9 692

注:如果服务器正在运行业务,kill 会导致进程直接终止,可能会影响到业务,请慎重操作。
2、重启服务器验证效果:
重启服务器系统会退出现有的进程,开机后重新加载。该过程会释放调用的 deleted 文件的句柄。

通过 df 查看磁盘空间为负数



问题现象


使用云服务器 ECS Linux 服务器时,有时通过 df -h 命令查看磁盘使用情况是显示负值,如下图:


问题分析


Linux 系统磁盘分区有保留区的概念,会给 root 或指定用户预留 5% 或更大的空间,当使用到这块保留区的空间时,fdisk 的计算将会是负数。

处理办法


需要通过 rm 命令清理删除磁盘中的大文件,释放预留空间的占用后,再通过 df 查询磁盘占用即可恢复正常。


如果问题还未能解决,您可以到阿里云社区进行 免费咨询,或联系 云市场商家寻求帮助。
取消 提交回答
全部回答(0)
相关问答

162

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 226221浏览量 回答数 162

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 157747浏览量 回答数 145

18

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 646854浏览量 回答数 18

38

回答

安全组详解,新手必看教程

我的中国 2017-11-30 15:23:46 259891浏览量 回答数 38

294

回答

Linux Bash严重漏洞修复紧急通知(已全部给出最终修复方案)

qilu 2014-09-25 13:26:50 434627浏览量 回答数 294

249

回答

【史上最详细】阿里云ECS安装wordpress教程

爱映疯wp 2014-03-09 23:55:43 254080浏览量 回答数 249

249

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 305685浏览量 回答数 249

40

回答

阿里云ecs从购买到环境搭建和建站!!(phpstudy一件包)

梦丫头 2014-07-29 20:51:49 162545浏览量 回答数 40

24

回答

【精品问答】python技术1000问(1)

问问小秘 2019-11-15 13:25:00 475839浏览量 回答数 24

13

回答

游戏云精彩帖汇总

nono20011908 2014-08-22 11:00:12 203992浏览量 回答数 13
+关注
boxti
12535
10037
文章
1327
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载