Jak zkontroluji využití inodů v HestiaCP? Co způsobuje nemožnost zapisovat soubory, i když je na disku dostatek místa?

前两天有个朋友半夜给我发消息,说他的服务器炸了。

具体症状特别诡异,网站突然开始报错,日志也写不进去,新建文件直接提示磁盘已满。

可他 df -h 一看却吓了一跳,磁盘明明还躺着大几十 G 的空闲空间,怎么就满了呢。

我当时就跟他说,兄弟,你这不是空间满了,你是 Inode 爆了。

他回了我一个问号,Inode 到底是个啥。

其实很多人第一次踩这个坑的时候,反应都跟他一模一样,因为学校里压根没人教过这玩意。

先把 Inode 这回事说清楚

你把它想成图书馆的索引卡,一下就好懂了。

磁盘空间相当于书架,能摆多少本书看的是容量,这个大家都好理解。

Inode 相当于每一本书对应的那张索引卡,记录着它叫什么、放在哪、谁动过。

在 Linux 里,每一个文件、每一个目录,都得占用一个 Inode,不管这个文件有多小。

哪怕是个空文件,系统也认认真真给它吃掉一个索引卡。

系统能创建的文件总数是有上限的,这个上限就是 Inode 总数。

一旦 Inode 用光,哪怕你的磁盘还空着几百 G,操作系统也拒绝再新建任何文件。

日志写不进、缓存建不了、网站直接瘫痪,就是你看到的那个诡异场面。

说真的,这个坑特别阴,因为它报错的地点根本不在你盯着看的地方。

第一招,df -i 一眼看全局

在 HestiaCP 环境里,你直接 SSH 进终端,敲这一行就行。

df -i

它会把每个挂载分区的 Inode 总数、已用数、剩余数一股脑列出来。

输出里有个列叫 IUse%,这就是你该盯的关键指标。

哪个分区的 IUse% 到了 100%,哪怕那个分区磁盘空间还富余,它也已经没法再新建任何文件或者日志了。

我当时就建议那个朋友先跑这个,一秒Polohování是不是 Inode 的问题,比瞎猜快多了。

第二招,find 精准数某个用户

确认是 Inode 的问题之后,下一步就是找到底谁在疯狂吃索引卡。

HestiaCP 每个用户都有独立的主目录,你直接数某个网站目录下的文件和目录总量就行。

find /home/用户名/web/你的域名/public_html | wc -l

把「用户名」和「你的域名」换成你真实的路径,终端返回的那个纯数字,就是该目录下所有文件和文件夹的总和。

一个文件或者目录,就对应一个 Inode,所以这个数就是它的 Inode 占用。

Jak zkontroluji využití inodů v HestiaCP? Co způsobuje nemožnost zapisovat soubory, i když je na disku dostatek místa?

如果你懒得一个一个查,想一次性看全站所有用户的占用分布,也有一行循环命令。

for d in /home/*; do echo -n "$d: "; find "$d" 2>/dev/null | wc -l; done

这行会把 /home 下每个用户目录的文件总数都打出来,谁家目录异常偏高,一眼就能揪出来。

第三招,揪出吃 Inode 最多的子目录

有时候你已经知道某个网站 Inode 高得离谱,但满屏文件根本不知道问题出在哪。

这种时候就要往下钻一层,找出聚集了大量小文件的子文件夹,比如缓存目录、会话目录、日志目录这些重灾区。

find /home/用户名/web/你的域名/public_html -type d -exec sh -c 'echo -n "{}: "; find "{}" -maxdepth 1 | wc -l' \; | sort -n -r -k 2 | head -n 10

这串命令会把占用文件最多的前 10 个子文件夹排出来。

排在列表最前面的那个路径,就是大量小文件扎堆的地方。

我当时就跟朋友说,八成是某个缓存插件在偷偷生小文件,跑完这行基本就能实锤。

第四招,repquota 看配额上限

如果你的服务器启用了 Linux 文件系统配额,那还能换一个视角看问题。

repquota -a

这条命令会把所有用户的文件数量限制和实测占用都拉出来。

重点看输出里的 File Limits 区域,used 列就是已经用了多少个文件。

soft 和 hard 列就是软硬限制阈值,一旦 used 顶到 hard,系统就直接开始拒绝新建文件。

这跟你磁盘还剩多少空间,完全是两个维度的故事。

收个尾,把排查思路串起来

回到开头那个半夜炸服的朋友。

他按我说的四步走了一遍,先是 df -i 确认 Inode 真满了。

再用 find 定位到是某个遗弃旧站的缓存目录在疯狂生小文件。

最后 repquota 一看,果然顶到了 hard 限制。

清理掉那堆垃圾缓存之后,网站当场就活过来了。

所以下次你再遇到「磁盘明明有空间却写不进文件」这种诡异场面,别急着加硬盘。

先 df -i 看一眼 Inode,很可能真相就藏在那张你从没注意过的索引卡上。

我是真的觉得,这种藏在系统底层的小常识,比背一百条优化清单都管用。

发表 评论

您的邮箱地址不会被公开。必填项已用*标注

Přejděte na začátek