Tengo una unidad de disco donde el uso del inodo es 100% (usando el df -i
comando). Sin embargo, después de eliminar archivos sustancialmente, el uso sigue siendo del 100%.
¿Cuál es la forma correcta de hacerlo entonces?
¿Cómo es posible que una unidad de disco con menos uso de espacio en disco pueda tener un mayor uso de Inode que una unidad de disco con mayor uso de espacio en disco?
¿Es posible si comprimo muchos archivos que reducirían el recuento de inodos utilizados?
linux
unix
memory-management
inode
Neversaint
fuente
fuente
Respuestas:
Es bastante fácil para un disco tener una gran cantidad de inodos utilizados incluso si el disco no está muy lleno.
Se asigna un inodo a un archivo, por lo que, si tiene miles de millones de archivos, todos de 1 byte cada uno, se quedará sin inodos mucho antes de quedarse sin disco.
También es posible que eliminar archivos no reduzca el recuento de inodos si los archivos tienen múltiples enlaces duros. Como dije, los inodes pertenecen al archivo, no a la entrada del directorio. Si un archivo tiene dos entradas de directorio vinculadas, eliminar una no liberará el inodo.
Además, puede eliminar una entrada de directorio pero, si un proceso en ejecución todavía tiene el archivo abierto, el inodo no se liberará.
Mi consejo inicial sería eliminar todos los archivos que pueda, luego reiniciar el cuadro para asegurarse de que no quedan procesos que mantengan los archivos abiertos.
Si hace eso y aún tiene un problema, infórmenos.
Por cierto, si está buscando los directorios que contienen muchos archivos, este script puede ayudarlo:
fuente
>/tmp/count_em_$$
solo funcionará si tiene espacio para ello ... si ese es el caso, vea la respuesta de @ Simon./tmp
no afectará a sus otros sistemas de archivos.ls -A
lugar dels -a
. ¿Por qué querrías contar? y ..?Si tiene mala suerte, ha utilizado aproximadamente el 100% de todos los inodos y no puede crear el scipt. Puedes verificar esto con
df -ih
.Entonces este comando bash puede ayudarte:
Y sí, esto llevará tiempo, pero puede ubicar el directorio con la mayoría de los archivos.
fuente
awk
podría mantener un hash del directorio y el recuento de archivos sin unificar y ordenar millones de líneas. Dicho esto, tal vez aquí hay una mejora:find . -maxdepth 1 -type d | grep -v '^\.$' | xargs -n 1 -i{} find {} -xdev -type f | cut -d "/" -f 2 | uniq -c | sort -n
esto solo ordena la última lista.sort
puede no mantener todo en la memoria y tratará de volver automáticamente a escribir un archivo temporal. Un proceso que obviamente fallaría ...sort
me falló, pero pude dar lo--buffer-size=10G
que funcionó.Mi situación era que me había quedado sin inodes y ya había eliminado todo lo que podía.
Estoy en un Ubuntu 12.04LTS y no pude eliminar los viejos núcleos de Linux que ocupaban alrededor de 400,000 inodes porque apt estaba roto debido a la falta de un paquete. Y no pude instalar el nuevo paquete porque no tenía inodos, así que estaba atascado.
Terminé eliminando algunos viejos núcleos de Linux a mano para liberar alrededor de 10,000 inodes
Esto fue suficiente para luego permitirme instalar el paquete que falta y arreglar mi apt
y luego elimine el resto de los viejos núcleos de Linux con apt
Las cosas están mucho mejor ahora
fuente
sudo rm -rf /usr/src/linux-headers-3.2.0-2*
si estoy seguro de que no estoy usando ese núcleo?$ sudo apt-get autoremove
solo, hizo el truco para mí.Mi solución:
Intenta encontrar si este es un problema de inodes con:
Trate de encontrar carpetas raíz con gran cantidad de inodos:
Intenta encontrar carpetas específicas:
Si se trata de encabezados de Linux, intente eliminar el más antiguo con:
Personalmente los moví a una carpeta montada (porque para mí el último comando falló) e instalé el último con:
Esto resolvió mi problema.
fuente
SpamAssasin-Temp
.find /var/spool/MailScanner/incoming/SpamAssassin-Temp -mtime +1 -print | xargs rm -f
hizo el trabajo :) Gracias!for i in /usr/src/*; do echo -en "$i\t"; find $i 2>/dev/null |wc -l; done
for i in /src/*; do echo "$i, `find $i |wc -l`"; done|sort -nrk 2|head -10
mostrar el directorio más grande del top 10Tuve el mismo problema, lo solucioné eliminando las sesiones de directorio de php
Puede estar debajo
/var/lib/php5
si está utilizando una versión anterior de php.Recreala con el siguiente permiso
Permiso por defecto para el directorio en Debian mostró
drwx-wx-wt
(1733)fuente
rm -rf /var/lib/php/sessions/*
probablemente sería un comando mejor: no eliminará el directorio de la sesión, solo su contenido ... Entonces no tendrá que preocuparse porExperimentamos esto en una cuenta de HostGator (que establece límites de inodo en todo su alojamiento) después de un ataque de spam. Dejó un gran número de registros de cola en /root/.cpanel/comet. Si esto sucede y encuentra que no tiene inodos libres, puede ejecutar esta utilidad cpanel a través de shell:
fuente
Puede usar RSYNC para ELIMINAR la gran cantidad de archivos
Cree una carpeta en blanco con 0 archivos y el comando sincronizará sus carpetas de prueba con una gran cantidad de archivos (he eliminado casi 5 millones de archivos con este método).
Gracias a http://www.slashroot.in/which-is-the-fastest-method-to-delete-files-in-linux
fuente
rm *
para muchos archivos, debido a la expansión del comodín y pasando / procesando cada argumento, perorm test/
está bien para eliminar unatest/
carpeta que contiene muchos archivos.eaccelerator podría estar causando el problema ya que compila PHP en bloques ... He tenido este problema con un servidor Amazon AWS en un sitio con una gran carga. Libere Inodes eliminando la memoria caché del acelerador en / var / cache / eaccelerator si continúa teniendo problemas.
(o cualquiera que sea su directorio de caché)
fuente
Enfrentamos un problema similar recientemente, en caso de que un proceso se refiera a un archivo eliminado, el Inode no se lanzará, por lo que debe verificar lsof /, y matar / reiniciar el proceso liberará los inodos.
Corrígeme si me equivoco aquí.
fuente
Como se dijo anteriormente, el sistema de archivos puede quedarse sin inodos, si hay muchos archivos pequeños. He proporcionado algunos medios para encontrar directorios que contienen la mayoría de los archivos aquí .
fuente
Respuesta tardía: en mi caso, fueron mis archivos de sesión bajo
que usaban Inodes.
Incluso no pude abrir mi crontab o hacer un nuevo directorio y mucho menos activar la operación de eliminación. Como uso PHP, tenemos esta guía donde copié el código del ejemplo 1 y configuré un cronjob para ejecutar esa parte del código.
Si se pregunta cómo logré abrir mi crontab, bueno, eliminé algunas sesiones manualmente a través de la CLI.
¡Espero que esto ayude!
fuente
podías ver esta información
fuente
Muchas respuestas a esta hasta ahora y todas las anteriores parecen concretas. Creo que estará seguro al usarlo a
stat
medida que avanza, pero dependiendo del sistema operativo, es posible que se produzcan algunos errores de inodo. Por lo tanto, implementar su propiastat
funcionalidad de llamada64bit
para evitar cualquier problema de desbordamiento parece bastante compatible.fuente
Si usa docker, elimine todas las imágenes. Usaron mucho espacio ...
Pare todos los contenedores
Eliminar todos los contenedores
Eliminar todas las imágenes
Trabaja para mi
fuente