Unsaon nako pagsusi sa paggamit sa inode sa HestiaCP? Unsa ang hinungdan sa kawalay katakos sa pagsulat og mga file bisan kung adunay daghang espasyo sa disk?

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

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

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

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

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

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

先把 Inode 这回事说清楚

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

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

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

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

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

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

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

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

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

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

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

df -i

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

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

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

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

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

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

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

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

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

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

Unsaon nako pagsusi sa paggamit sa inode sa HestiaCP? Unsa ang hinungdan sa kawalay katakos sa pagsulat og mga file bisan kung adunay daghang espasyo sa disk?

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

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,很可能真相就藏在那张你从没注意过的索引卡上。

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

发表 评论

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

Linukot nga basahon sa Taas