为什么虚拟主机会有 inode 限制

背景

最近一个虚拟主机群里经常会有群成员问, inode 节点是什么,为什么有 inode 节点不足的告警。在我的印象中,很多国内的虚拟主机商在销售主机时,很少会提及 inode 限制,大多只是 cpu内存磁盘容量 。虽然 inode 节点的限制对于一般的博客网站来说影响不大(文件站和图片站除外),但也有很多主机商设置了 inode 告警,来提醒用户注意,由此引发了以上及以下讨论。

什么是 inode

inode 是文件元数据(index node),主要存储了文件的 大小权限属主属组时间戳数据块指针 内容。

为什么会有 inode

每个文件系统存储的数据类型可分为两大块: 元数据区数据区

元数据区主要是存储文件的 inode ,用来索引及查找数据区内的文件(存储在不同的块中,由数据块指针引导)。

inode 为什么会有限制

由于元数据区的内容也是存储在磁盘上,并且是在磁盘分区时一次性划分的,所以需要占用固定的磁盘空间用来存储 inode

既然空间固定,那 inode 的数量在文件系统创建后也就是固定的。虽然在创建文件系统时可以指定 inode 个数和比例,但就像一本固定页数的书一样,如果分配的目录页数多了,内容的部分自然就少了。所以inode节点数对于虚拟主机的用户来说是固定的,是由主机商经过权衡后分配的结果(除非使用VPS挂载新硬盘自行分区,或自己搭建服务器)。

inode 用完时,即使数据区还有剩余空间,也不能用了,因为数据不能索引,存了也白存。所以现在很多主机商都设置了 inode 告警来提醒用户,避免用户因大意用完 inode 节点而引起的麻烦。

链接文件

既然说到了 inode ,就顺便说说链接文件,因为这偶尔也是造成 inode 节点占用过多的原因。

所谓的链接文件,就是访问同一个文件不同路径。

硬链接

指向同一个 inode 的多个文件路径。

特性:

(1) 目录不支持硬链接;
(2) 硬链接不能跨文件系统;
(3) 创建硬链接会增加inode引用计数;

创建:

1
ln  src  link_file

符号链接

指向一个文件路径的另一个文件路径。

特性:

(1) 符号链接与文件是两人个各自独立的文件,各有自己的 inode ;对原文件创建符号链接不会增加引用计数;
(2) 支持对目录创建符号链接,可以跨文件系统;
(3) 删除符号链接文件不影响原文件;但删除原文件,符号指定的路径即不存在,此时会变成无效链接;

注意:符号链接文件的大小是其指定的文件的路径字符串的字节数;

创建:

1
ln -s  src link_file