×

服务器BT问题:不能新建、绑定等操作,提示: [Errno 28] No space left on device

作者:Terry2025.02.28来源:Web前端之家浏览:51评论:0
关键词:inodes

今天一台配置不错的服务器出现奇葩的问题,上面才上了40多个站,服务器是16H/32G的配置哟,唯一缺点就是硬盘小了点,200多G而已。但是不至于会出现问题啊。

新建站点和绑定域名,都会提示错误[Errno 28] No space left on device,如下图所示:

photo_2025-02-26_16-46-25.jpg

问题解析

根据上图报错提示,是硬盘不够的,但是我在宝塔面板里看,数据还有很多啊,没满。如下图:

image.png

当然我们也可以登录SSH里去查看硬盘的情况。输入命令:

df -h

结果如下:

image.png

原因到这个地方,对于一个非专业的服务器维护人员来说,就懵逼了,既然提示“ No space left on device”,但是事实上磁盘有空间啊。于是我疯狂查找答案,最后从一个大佬博客上找到了,是服务器的inodes占满了,对于inodes,估计很多人不知道啥玩意,包括我哈。先说下原因吧,我们可以输入命令:

df -i

去查找服务器的inodes剩下的内存,如下所示:

root@ubuntu:~# df -i
Filesystem       Inodes   IUsed    IFree IUse% Mounted on
tmpfs           4109141     682  4108459    1% /run
/dev/vda2      26212864  146029 26066835    1% /
tmpfs           4109141       4  4109137    1% /dev/shm
tmpfs           4109141       4  4109137    1% /run/lock
/dev/vdb1      13107200 13107200  0         100%  /www/wwwroot
tmpfs            821828      26   821802    1% /run/user/0

我们发现挂载目录/dev/vdb1内存已经100%了,难怪我们新建什么东西都不行的,原因就这么找到啦。接下来,我们就知道怎么去解决了,清理空间呗。

解决问题的方案

在我们寻找解决方案之前,先跟大家分享下inodes是啥东西吧。

介绍 inodes

理解inode,要从文件储存说起。

文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。

inode的内容

inode包含文件的元信息,具体来说有以下内容:


  • 文件的字节数

  • 文件拥有者的User ID

  • 文件的Group ID

  •  文件的读、写、执行权限

  • 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

  • 链接数,即有多少文件名指向这个inode

  • 文件数据block的位置

inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。

每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。

查看每个硬盘分区的inode总数和已经使用的数量,可以使用df -i命令。

df -i

查看每个inode节点的大小,可以用如下命令:


sudo dumpe2fs -h /dev/hda | grep "Inode size"

由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。

解决inode内存问题

了解完inode的基础知识后,我们就要去解决我们最开始提到的问题啦。接下来,我们就分享昂的方法,走起!

首先,既然是inode内存不足,说明服务器上的文件太多了,导致问题,这个时候我们可以找运维商扩大内存,去解决,这个对于我们来说不可取。

其次呢,我们对内存不足的磁盘进行分析,去看下是什么东西占用的内存多,然后删除下就好。

我们进入/www/wwwroot,然后看下目录的大小,命令如下:

cd /www/wwwroot

du -sh *

微信图片_20250228144604.png

上述截图图片不是完整版哈,我们发现的是做泛站的两个目录缓存太高了,我们需要去删除cache目录下的东西。

cd /www/wwwroot/fan_SA.com

然后删除:

rm -rf /www/wwwroot/fan_SA.com/cathe/xxx

等待一会,删除完,我们再去执行df -i 命令后,发现内存下来了。

image.png

这个时候,我们再去宝塔上去新建站点和一些操作,发现就没问题啦。

总结

其实关于 inodes 内存问题,也是第一次遇到啊,虽然解决问题的过程有些折腾人,但是结果还是好的。以后还是要多学习下服务器相关的知识点吧。

您的支持是我们创作的动力!
温馨提示:本文作者系Terry ,经Web前端之家编辑修改或补充,转载请注明出处和本文链接:
https://jiangweishan.com/article/inodeserverzhishi.html

网友评论文明上网理性发言 已有0人参与

发表评论: