La implementación falla: "No queda espacio en el dispositivo". df -h muestra un 35% gratis en /var. Nadie mira df -i: 100% de inodos utilizados en storage/framework/sessions: 4 millones de archivos de 100 bytes.
Los inodos son el techo invisible de archivos pequeños.
Entendiendo los inodos
Cada archivo, enlace simbólico, socket = 1 inodo (simplificado). Creación imposible si la tabla de inodos está llena incluso con GB libres.
df -i antes de cada incidente "espacial".
Diagnóstico
para d en /*; hacer echo $(buscar $d -xdev | wc -l) $d; done, lento pero revelador.
Más rápido: find /var/www -xdev -type f | corte -d/ -f1-5 | destino | único -c | ordenar -n.
Causas web clásicas
Controlador de archivos de sesiones, caché de vista compilada, trabajos en cola fallidos, extracción zip temporal, registros de varios archivos por solicitud.
| Arreglar | Acción |
|---|---|
| Sesiones | Redis/controlador de base de datos |
| Caché | TTL + ciruela programada |
| Error en la cola | Horizonte/trabajo de limpieza |
| Subir temperatura | cron tmpwatch |
Limpieza sin roturas
Dejar de escribir (modo de mantenimiento), purga dirigida, no ciega rm -rf en sesiones activas.
Verifique la retención/auditoría legal antes de depurar los registros.
Arquitectura
Separe /var/cache o sesiones en un volumen dedicado. Fragmentación de subdirectorios hash (aa/bb/file). Supervise el % de inodo como % de disco.
##Prevención continua
Inodo de alerta 85% como disco 85%. Cron plum cache todas las noches con archivos eliminados de métricas.
Sesiones: migre Redis antes del incidente del inodo: la actualización urgente cuesta más.
Evite millones de archivos planos: subdirectorios hash ab/cd/ef123.
Contenedores: límite de rotación de registros tamaño máximo del archivo json del controlador.
Compatibilidad con tickets de inodo de cuota compartida: solicite la cifra antes del plan de actualización, a veces gratis.
Archivo de sesiones de migración → Redis
Plan: sesiones temporales de escritura dual, configuración invertida, purgar sesiones de archivos después de 24 h TTL máximo.
Inodo de medición antes/después: corrección de prueba.
Prefijo de caché del marco: clave de caché de versión (v2_) para una purga masiva segura.
Miles de archivos de Maildir: migración a base de datos u objeto para archivos adjuntos: corrección de inodo, purga temporal, no duradera.
Caché local de artefactos de CI: limpieza de ramas obsoletas: cada rama = miles de archivos.
Herramientas de diagnóstico
ncdu interactivo para explorar millones de archivos pequeños. Sólo experto en debugfs.
Cola de correo exim/qmail: cada archivo de mensajes: purgue la cola si llega un ataque de spam.
Capacidad del plan: recuento de inodos en mkfs si se reconstruye FS: ajuste mkfs.ext4 -N.
Resumen operativo
Los inodos agotados indican un diseño inadecuado (sesiones de archivos, caché ilimitado) más que falta de espacio en GB. df -i sistemático sobre "no queda espacio". Migración de sesiones de Redis, plum cache, fragmentación de directorios hash.
Contenedores y compartidos: cuotas de panel de inodo – ticket de soporte antes de la saturación.
Plan de remediación de 48 horas
Día 1: confirme df -i, ubique el directorio superior, habilite el mantenimiento si es necesario, elimine el subconjunto seguro de caché. Día 2: migrar sesiones de Redis, implementar poda cron, agregar alerta de inodo al 85%. Semana: estrategia de refactorización de caché, subdirectorios hash, revisión de capacidad con soporte de host.
Comunicación interna: incidente de inodo ≠ disco lleno: un mensaje claro evita una mala acción financiera "comprar Go".
Mantenga un runbook fechado, métricas de antes y después, revisión posterior al incidente: la disciplina acumulativa evita el pánico del viernes por la noche.
Mantenga un runbook fechado, métricas de antes y después, revisión posterior al incidente: la disciplina acumulativa evita el pánico del viernes por la noche.
Mantenga un runbook fechado, métricas de antes y después, revisión posterior al incidente: la disciplina acumulativa evita el pánico del viernes por la noche.
Mantenga un runbook fechado, métricas de antes y después, revisión posterior al incidente: la disciplina acumulativa evita el pánico del viernes por la noche.
Mantenga un runbook fechado, métricas de antes y después, revisión posterior al incidente: la disciplina acumulativa evita el pánico del viernes por la noche.
Mantenga un runbook fechado, métricas de antes y después, revisión posterior al incidente: la disciplina acumulativa evita el pánico del viernes por la noche.
Prevención de inodos
Alerta 85%. Migración de sesiones de Redis. Subdirectorios hash. Ciruela cron. No es necesario el soporte de cuota de inodo antes del plan de actualización.
Entrenamiento: inodo ≠ GB libres. Sesiones de repositorio de plantillas predeterminadas de Redis.
Contenedores y caché
Tamaño máximo del registro del archivo json. Prefijo de caché con versión v2 para una purga segura.
Mantenga un runbook fechado, métricas de antes y después, revisión posterior al incidente: la disciplina acumulativa evita el pánico del viernes por la noche.
Decide y avanza sin puntos ciegos
- Confirme con
df -i: no confundir con disco lleno en GB; mensaje claro a las finanzas. - Localice el directorio defectuoso: sesiones de caché, miniaturas, registros fragmentados, millones de archivos pequeños.
- Migrar sesiones a Redis: antes del incidente, si es posible; La modernización urgente cuesta más.
- Subdirectorios hash —
ab/cd/ef123en lugar de millones de archivos planos. - Inodo de alerta al 85% — como disco al 85%; cron ciruela todas las noches con métrica.
Solicite la cuota de inodo al soporte compartido antes de actualizar; compare a través del directorio y el comparador.
Preguntas frecuentes
¿Diferencia de espacio en disco e inodos?
El disco puede mostrar GB libres mientras que el sistema de archivos no tiene más inodos para crear un archivo, algo común en millones de pequeños archivos o sesiones de caché.
¿Qué hacer urgentemente?
Confirme df -i, identifique el directorio superior, purgue el caché seguro o migre sesiones a Redis. No compre GB adicionales: el problema no es la capacidad del bloque.
Si su caché escribe un archivo por solicitud, el límite de inodo viene antes que el límite del disco: cuente.
