Vi esta pregunta en stackoverflow, pero no me gustaron las respuestas, y realmente es una pregunta que debería estar aquí en U&L de todos modos.
Básicamente se usa un inodo para cada archivo en el sistema de archivos. Por lo tanto, quedarse sin inodos generalmente significa que tienes muchos archivos pequeños por ahí. Entonces la pregunta realmente se convierte en "¿qué directorio tiene una gran cantidad de archivos?"
En este caso, el sistema de archivos que nos interesa es el sistema de archivos raíz /, por lo que podemos usar el siguiente comando:
find / -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n
Esto volcará una lista de cada directorio en el sistema de archivos con el prefijo de la cantidad de archivos (y subdirectorios) en ese directorio. Por lo tanto, el directorio con el mayor número de archivos estará en la parte inferior.
En mi caso, esto resulta lo siguiente:
1202 /usr/share/man/man1
2714 /usr/share/man/man3
2826 /var/lib/dpkg/info
306588 /var/spool/postfix/maildrop
Así que básicamente /var/spool/postfix/maildropestá consumiendo todos los inodes.
Tenga en cuenta que esta respuesta tiene tres advertencias en las que puedo pensar. No maneja adecuadamente nada con líneas nuevas en la ruta. Sé que mi sistema de archivos no tiene archivos con líneas nuevas, y dado que esto solo se usa para consumo humano, no vale la pena resolver el problema potencial (y siempre se puede reemplazar \ncon \0y usar sort -zarriba). Tampoco maneja si los archivos se extienden entre una gran cantidad de directorios. Sin embargo, esto no es probable, por lo que considero que el riesgo es aceptable. También contará los enlaces duros a un mismo archivo (por lo tanto, usando solo un inodo) varias veces. De nuevo, es poco probable que dé falsos positivos.
La razón clave por la que no me gustaron las respuestas de stackoverflow es que todas cruzan los límites del sistema de archivos. Dado que mi problema estaba en el sistema de archivos raíz, esto significa que atravesaría cada sistema de archivos montado. Lanzar -xdevlos comandos de búsqueda ni siquiera funcionaría correctamente.
Por ejemplo, la respuesta más votada es esta:
for i in `find . -type d `; do echo `ls -a $i | wc -l` $i; done | sort -n
Si cambiamos esto en lugar de
for i in `find . -xdev -type d `; do echo `ls -a $i | wc -l` $i; done | sort -n
a pesar de que /mnt/fooes un montaje, también es un directorio en el sistema de archivos raíz, por lo que aparecerá find . -mount -type dy luego ls -a $ipasará al , que se sumergirá en el montaje.
En findmi respuesta, en su lugar, se enumera el directorio de cada archivo en el montaje. Básicamente, con una estructura de archivos como:
/foo/bar
/foo/baz
/pop/tart
terminamos con
/foo
/foo
/pop
Entonces solo tenemos que contar el número de líneas duplicadas.
/tmpy luego el sistema está configurado para montar un tmpfs/tmp. Entonces no podrá encontrar los archivosfindsolo. Senario improbable, pero vale la pena señalar.-printfparece ser una extensión de GNU para encontrar, ya que la versión BSD disponible en OS X no es compatible.Esto se vuelve a publicar desde aquí a instancias del autor de la pregunta:
Y si quieres permanecer en el mismo sistema de archivos que haces:
Aquí hay un ejemplo de salida:
AHORA CON LS:
Varias personas mencionaron que no tienen coreutils actualizados y que la opción --inodes no está disponible para ellos. Entonces, aquí está ls:
Si tiene curiosidad, el corazón y el alma de ese tedioso trozo de
regexallí está reemplazando elfilenamede cada uno dels'slos resultados de búsqueda recursiva con el nombre del directorio en el que se encontró. A partir de ahí, solo es cuestión de apretar números de inodo repetidos y luego contar nombres de directorio repetidos y ordenarlos en consecuencia.La
-Uopción es especialmente útil con la clasificación, ya que específicamente no se clasifica, y en su lugar presenta la lista de directorios en orden original, o, en otras palabras, porinodenúmero.Y, por supuesto,
-1es increíblemente útil, ya que garantiza un único resultado por línea, independientemente de las posibles nuevas líneas incluidas en los nombres de archivo u otros problemas espectacularmente desafortunados que pueden ocurrir cuando intenta analizar una lista.Y, por supuesto,
-Apara todos y-ipara el inodo y-Rpara el recursivo y eso es todo.El método subyacente a esto es que reemplazo cada uno de los nombres de archivo de ls con su nombre de directorio que contiene en sed. Después de eso ... Bueno, yo también estoy un poco confusa. Estoy bastante seguro de que está contando con precisión los archivos, como puede ver aquí:
Esto me proporciona resultados prácticamente idénticos al
ducomando:DU:
LS:
Creo que la
includecosa solo depende del directorio en el que se ve el programa al principio, porque son los mismos archivos y están vinculados. Un poco como la cosa de arriba. Sin embargo, podría estar equivocado al respecto, y agradezco la corrección ...DU DEMO
Haga un directorio de prueba:
Algunos directorios secundarios:
Crea algunos archivos:
Algunos enlaces duros:
Mira los enlaces duros:
Se cuentan solo, pero sube un directorio ...
Luego ejecuté mi script de ejecución desde abajo y:
Y de Graeme:
Así que creo que esto muestra que la única forma de contar inodos es por inodo. Y debido a que contar archivos significa contar inodos, no puede contar doblemente inodos: para contar archivos con precisión, los inodos no pueden contarse más de una vez.
fuente
--inodes¿Qué versión agregada ? ¿Qué "variantes" / "sabores" / "posix-wannabes" / "implementaciones" / lo que sea que tenga?Utilicé esta respuesta de SO Q&A titulada: ¿Dónde se usan todos mis inodes? cuando nuestro NAS se agotó hace unos 2 años:
Ejemplo
Comprobación de los inodos del dispositivo
Dependiendo de su NAS, es posible que no ofrezca un
dfcomando con todas las funciones . Entonces, en estos casos, puede recurrir a usar en sutune2fslugar:Cruzando los límites del sistema de archivos
Puede usar el
-xdevinterruptor para dirigirfindla búsqueda restringida solo al dispositivo donde está iniciando la búsqueda.Ejemplo
Digamos que tengo mi
/homedirectorio de montaje automático a través de recursos compartidos NFS desde mi NAS, cuyo nombre es mulder.Tenga en cuenta que el punto de montaje todavía se considera local para el sistema.
Ahora cuando inicio
find:¡No encontró
/homeninguno de los contenidos montados automáticamente porque están en un dispositivo diferente!Tipos de sistema de archivos
Usted puede utilizar el interruptor para
find,-fstypepara controlar qué tipo de sistemas de archivosfindestudiará.Ejemplo
¿Qué sistema de archivos tengo?
Entonces puedes usar esto para controlar el cruce:
solo ext3
solo nfs
ext3 y ext4
fuente
/está lleno, y tienes sistemas de archivos de red montados, no quieres sumergirte en los sistemas de archivos de red.-fstypetofind.-xtypeexcluye los sistemas de archivos, sino que busca mirar el tipo de archivo. Solo estoy encontrando ejemplos como este:find . \( -fstype nfs -prune \)findcruzar los límites del sistema de archivos. En su ex. menciona "Me gusta si está lleno, y tienes sistemas de archivos de red montados, no quieres sumergirte en los sistemas de archivos de red".Comando para encontrar el inodo utilizado:
fuente
Para enumerar el uso detallado del inodo para
/, use el siguiente comando:fuente
Definitivamente responda con la máxima cantidad de votos positivos para ayudar a comprender el concepto de inodes en Linux y Unix, sin embargo, realmente no ayuda cuando se trata de resolver el problema real de eliminar o eliminar los inodes del disco. Una forma más sencilla de hacer esto en sistemas basados en ubuntu es eliminar los encabezados e imágenes no deseadas del kernel de Linux.
Haría eso por ti. En mi caso, el uso de inodes fue del 78% debido a lo cual recibí una alerta.
Después de ejecutar el
sudo apt-get autoremovecomando se había reducido al 29%Esta fue solo mi observación que me ahorró tiempo. La gente puede encontrar una solución mejor que esta.
fuente
Me resulta más rápido y fácil profundizar usando el siguiente comando:
Luego puede ir a,
varpor ejemplo, y ver cuál es el gran inodo que usa directorios allí.fuente
Cada respuesta hasta ahora asume que el problema es con muchos archivos en un solo directorio, en lugar de muchos subdirectorios que contribuyen al problema. Afortunadamente, la solución es simplemente usar menos banderas.
O con opciones más cortas:
du --inodes -x | sort -n. Lamentablemente, no todas las versionesdutienen la opción de inodes.fuente