Directorio de artigos
Hai un par de días, un amigo envioume unha mensaxe a altas horas da noite dicíndome que o seu servidor colapsara.
Os síntomas específicos eran particularmente estraños: o sitio web comezou a mostrar erros de súpeto, non se podían escribir rexistros e a creación de novos ficheiros avisaba inmediatamente de que o disco estaba cheo.
Pero cando comprobou con `df -h`, quedou abraiado ao descubrir que o disco tiña claramente decenas de gigabytes de espazo libre. Como podía estar cheo?
Díxenlle nese mesmo instante: "Irmán, non só estás cheo de espazo de almacenamento, senón que o teu Inode está sobrecargado".
Respondeu cun signo de interrogación: Que é exactamente un inodo?
其实很多人第一次踩这个坑的时候,反应都跟他一模一样,因为学校里压根没人教过这玩意。
Primeiro, aclaremos o que é un inodo.
Pensa niso como unha ficha dunha biblioteca e será doado de entender.
O espazo en disco é coma unha estantería; a cantidade de libros que podes poñer nela depende da súa capacidade, o que é doado de entender para todos.
Inode 相当于每一本书对应的那张索引卡,记录着它叫什么、放在哪、谁动过。
en Linux Neste contexto, cada ficheiro e cada directorio debe ocupar un inode, non importa o pequeno que sexa o ficheiro.
Mesmo se é un ficheiro baleiro, o sistema seguirá consumindo unha ficha de índice para el.
O sistema ten un límite para o número total de ficheiros que pode crear; este límite é o número total de nodos internos.
Unha vez que o inode se esgota, mesmo se o disco aínda ten centos de gigabytes de espazo libre, o sistema operativo rexeitará crear novos ficheiros.
日志写不进、缓存建不了、网站直接瘫痪,就是你看到的那个诡异场面。
Sinceramente, esta é unha situación realmente complicada porque a mensaxe de erro envíase desde unha localización que non estás mirando.
O primeiro truco é usar `df -i` para obter unha visión xeral rápida.
No entorno HestiaCP , simplemente podes acceder ao terminal mediante SSH e escribir esta liña.
df -iListará o número total de nodos, o número usado e o número restante para cada partición montada.
Na saída, hai unha columna chamada IUse%, que é a métrica clave que debes ter en conta.
Se o IUse% dunha partición chega ao 100%, mesmo se esa partición aínda ten moito espazo en disco, xa non poderá crear novos ficheiros ou rexistros.
Suxerínlle ao meu amigo que executase isto primeiro, para que puidese identificar se o problema estaba no inode nun segundo , o que sería moito máis rápido que adiviñar.
O segundo método é usar `find` para contar con precisión un usuario específico.
Despois de confirmar que o problema está no innodo, o seguinte paso é descubrir quen está a consumir a tarxeta índice de forma excesiva.
HestiaCP ten un directorio principal separado para cada usuario. Podes simplemente contar o número total de ficheiros e directorios nun directorio de sitio web específico.
find /home/用户名/web/你的域名/public_html | wc -lSubstitúe "nome de usuario" e "o teu nome de dominio" pola túa ruta real. O número puro que devolve o terminal é a suma de todos os ficheiros e cartafoles dese directorio.
Cada ficheiro ou directorio correspóndese cun inodo, polo que este número representa o uso do inodo.

Se che dá preguiza comprobar cada un individualmente e queres ver a distribución de uso de todos os usuarios en todo o sitio á vez, tamén hai un comando de bucle único.
for d in /home/*; do echo -n "$d: "; find "$d" 2>/dev/null | wc -l; doneEsta liña imprimirá o número total de ficheiros en cada directorio de usuario en /home, o que facilitará a detección de que directorio de usuario ten un número anormalmente alto de ficheiros.
第三招,揪出吃 Inode 最多的子目录
Ás veces sabes que un sitio web ten valores de inode ridiculamente altos, pero aínda así non podes descubrir que lle pasa á pantalla chea de ficheiros.
Nestes casos, cómpre profundizar un nivel para atopar subcartafoles que conteñan un gran número de ficheiros pequenos, como directorios de caché, directorios de sesión e directorios de rexistro; estas son as áreas máis problemáticas.
find /home/用户名/web/你的域名/public_html -type d -exec sh -c 'echo -n "{}: "; find "{}" -maxdepth 1 | wc -l' \; | sort -n -r -k 2 | head -n 10Este comando listará as 10 subcartafoles principais que consomen máis ficheiros.
A ruta que se atopa na parte superior da lista é onde se agrupan un gran número de ficheiros pequenos.
我当时就跟朋友说,八成是某个缓存插件在偷偷生小文件,跑完这行基本就能实锤。
第四招,repquota 看配额上限
Se o teu servidor ten activadas as cotas do sistema de ficheiros de Linux, podes ver o problema desde unha perspectiva diferente.
repquota -aEste comando mostrará o límite de ficheiros e o uso real de ficheiros para todos os usuarios.
Preste moita atención á sección Límites de ficheiros na saída; a columna utilizada indica cantos ficheiros se usaron.
soft 和 hard 列就是软硬限制阈值,一旦 used 顶到 hard,系统就直接开始拒绝新建文件。
Esta é unha historia completamente diferente de canto espazo che queda no disco.
Para concluír, conectemos os puntos da investigación.
Volvamos ao amigo que fixo que o servidor colapsase no medio da noite ao principio.
Seguiu os catro pasos que describín, comezando con `df -i` para confirmar que o inode estaba realmente cheo.
Despois, usando a función "find", localizamos o directorio da caché dun sitio web antigo e abandonado que estaba xerando ficheiros pequenos coma unha loucura.
Finalmente, ao comprobar `repquota` confirmouse que efectivamente alcanzara o límite estrito.
清理掉那堆垃圾缓存之后,网站当场就活过来了。
Entón, a próxima vez que te atopes con esta estraña situación na que "o disco claramente ten espazo pero non podes escribir ficheiros", non te apresures a engadir un disco duro.
Primeiro, usa `df -i` para botar unha ollada ao inode; a verdade ben pode estar agochada nesa tarxeta de índice que nunca notaches antes.
Creo sinceramente que estes pequenos anacos de sentido común agochados no núcleo do sistema son máis útiles que memorizar cen listas de optimización.
Esperemos que o artigo "Como comprobar o uso do inodo en HestiaCP? O culpable da dispoñibilidade do espazo en disco pero da incapacidade de escribir ficheiros" compartido no blog de Chen Weiliang ( https://www.chenweiliang.com/ ) che sexa útil.
Non dubides en compartir a ligazón deste artigo: https://www.chenweiliang.com/cwl-34619.html
