【过关斩将3】磁盘有空间但无法创建文件


大家好,我是高胜寒,本文是过关斩将系列的第3篇文章, 也是循序渐进学运维系列的第50篇文章。

面试原题

我们去面试的时候,面试官通常会问一个问题: “小伙子,你在这些年的工作中,遇到过什么棘手的问题没有?”

面试题剖析

面试官问这个问题,无非想知道以下几件事情:

  1. 你有没有过处理疑难问题的经验
  2. 你解决问题的思路和能力如何
  3. 你是怎么解决的
  4. 你解决完这个问题有哪些收获

面试错误示范

面对这样的问题,很多小伙伴手无足措,甚至回答出了让面试官啼笑皆非的答案,我们来看看小王的经历。

面试官: 你遇到过什么棘手的问题?
小王: 遇到过一次宕机事故,数据库宕机。
面试官: 宕机多久?
小王: 两三天吧
面试官: 这么长时间,那你是怎么解决的?
小王: 我当时刚到公司,就在旁边看老员工做。
面试官: 那你还记得老员工是怎么解决的吗?
小王: 时间太久了,忘了。

在这里插入图片描述

面试者啥也不会的能力,淋漓尽致的展现了出来,让面试官吐血而亡。

(正经脸)为了解决啥也不会的尴尬,我们今天来聊聊磁盘有空间但是无法创建文件的处理方案。

问题再现

问题出现: 小王今天要往磁盘里创建内检,发现系统提示磁盘不足,使用df -h查看了一下磁盘的使用情况,发现磁盘只使用了90%,还有3G的剩余空间,但是无法创建文件。

小王的排查思路

小王查看了一下自己使用的用户是root,之前备份的md5值也没有任何的告警,可以确认服务器没有被黑。

小王又使用df -h 命令查看下磁盘的可用空间
[root@gaosh-1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 20G 18G 1.9G 90% /
tmpfs 1.8G 228K 1.8G 1% /dev/shm

小王判断: 既然有空间,而且自己也有权限,一定是可以创建文件的,小王突然想起了inode节点问题,是不是inode号不够了。

毕竟我们创建的任何一个文件都需要消耗一个inode号,我们找个正常机器来测试下inode,看看是不是创建文件的时候消耗inode 号

查看inode号的使用情况

可以看到现在的inode -free 有1177557
在这里插入图片描述
可以看到inode消耗了两个,一个文件消耗一个。

想起了这个原理之后,小王查看了一下自己的/data目录的索引节点,发现inode已经使用百分比了

# df -i  
文件系统         Inode     已用(I)     可用(I)         已用(I)%   挂载点
/data           5242880   5242880    0              100%        /

查找原因:

小王通过排查,发现/data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。

解决方案:

解决方案1:删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。
解决方案2 : 在/data备份好一些文件,然后删除这些文件,释放一些inode。然后创建一个文件夹/data/cache2。将/data/cache2 挂载到另外一块硬盘上去,下次写数据就直接写在/data/cache2,事实上就相当于写在第二块硬盘上了。

提问环节

磁盘分完区之后,inode号还可以增加吗?

答: 不可以, inode的总数是在格式化的时候就固定下来的。

融会贯通

接下来,我们看看,面试遇到面试官问,小伙子,你遇到的最棘手的问题是啥啊,你试着把本文的内容变成你的,讲述给面试官。

小王: 好的,面试官,说到棘手的问题的话,我在上家公司有遇到这么一个问题,有一次一个开发找我请教,说他的磁盘还有空间,但是无法创建文件。

我查看了一下,当时开发的测试目录剩余空间还有两个G,创建文件自然是绰绰有余的,而且开发用的用户也有在此目录创建文件的权限。

我试着创建了一下也是不成功, 要创建文件必须满足两个条件,一个是要有足够的磁盘空间,另一个是要有足够的inode号,既然磁盘空间还有,就有可能是inode号不足导致的

我使用 df -i 查看了一下,发现开发这台测试机上的inode号已经耗尽了,我询问了一下开发,目录下都是存的什么问题, 开发反馈说是小图片。

那么真相就浮出水面了,每个小文件占用一个inode号,但是一个小图片占用的空间可能没有达到block的大小,但是占用了一个inode,长久积累下来就变成了 空间还有,但inode号耗尽的情况。

于是让开发确认了一下哪些是不需要的空间,予以删除,释放空间,同时创建了 data2目录挂载到了一块新硬盘上,扩充了空间。这样问题就解决了。

总结:

关于棘手问题,再来回顾下遇到这个问题的回答思路:

  1. 问题产生时候的情景再现
  2. 阐述分析问题的过程
  3. 阐述解决问题的思路
  4. 阐述如何解决的
  5. 通过这次棘手问题,你学到了哪些,或者你做了哪些措施来确保后期不再复现。

猜你喜欢

转载自blog.csdn.net/xinshuzhan/article/details/106977980