Zuljin

Fundador
Miembro del Equipo
Fundador
ADMIN
Se incorporó
15 Enero 2004
Mensajes
11.872
En la revisión diaria de logs de un servidor productivo me encuentro con que el aplicativo no puede escribir logs de auditoría. Obviamente lo primero que hago es revisar el espacio en disco, el cual está bien, tengo bastante espacio disponible. Sin embargo, igual no se pueden crear nuevos archivos. Tate, los inodos, me dije.

Con el comando df -i reviso el estado de los inodos y efectivamente el volumen (que es un volumen montado de un storage externo) al 100%, siendo que el resto de los volúmenes estaba holgadísimo, al 7% de ocupación máxima de inodes.

Me puse a borrar archivos del directorio de archivos de auditoría para liberar inodos, y luego puse en el crontab la instrucción de que todos los días borre los archivos con más de 30 días de antigüedad.

Sin embargo, no me gusta ser huevón dos veces, así que voy a revisar que otro directorio tiene muchos archivos, y lo que necesito es una forma de listar todos los directorios y la cantidad de archivos que contienen, para ver si en otro lugar también se están generando archivos de auditoría, traza, logs, etc, y ponerlo en borrado automático en el crontab. Pillé esto en google

http://www.iteramos.com/pregunta/27262/howto-libre-uso-de-inodes

Código:
#!/bin/bash # count_em - count files in all subdirectories under current directory. echo 'echo $(ls -a "$1" | wc -l) $1' >/tmp/count_em_$$ chmod 700 /tmp/count_em_$$ find . -mount -type d -print0 | xargs -0 -n1 /tmp/count_em_$$ | sort -n rm -f /tmp/count_em_$$

No lo he probado porque todavía estoy borrando archivos, pero apenas pueda ejecutarlo les comento.
 

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.602
cámbiate a btrFS, anda la raja para cuando tienes que tener muuuuuuuchos archivos.

Y ojo que tu comando al final borra los archivos, no los lista. Tb "ls -al" te dará un error de demasiados argumentos si tienes 65k+ archivos en un mismo directorio. Lo mejor es sólo usar find y pasarle eso a bash archivo por archivo, dura más pero es más confiable.

Si quieres saber cuántos archivos tiene un directorio (con recursión) mejor ejecutar esto:

Código:
find . | wc -l

Y restarle uno al resultado (ya que tb lista el directorio actual).

Saludos.
 
Upvote 0

Zuljin

Fundador
Miembro del Equipo
Fundador
ADMIN
Se incorporó
15 Enero 2004
Mensajes
11.872
En estricto rigor la aplicación no necesita todos esos archivos: son sólo archivos de los, auditoría y traza que va dejando por si alguien quiere analizar o debugear alguna cosa. Pero no son necesarios, y esa es la razón del por qué borro los más antiguos a 30 días. Es por esa razón también de que voy a seguir usando el filesystem por default del sistema operativo, que es ext4 para RedHat 6 y XFS para RedHat 7.

El comando que me diste sólo me entrega la cantidad total de archivos. Yo necesito un listado con cada directorio y su cantidad de archivos.
 
Última modificación:
Upvote 0

yakko

pingüino mal genio
Se incorporó
24 Agosto 2004
Mensajes
16.883
quieres ver todos los subdirectorios o sólo los directorios dentro de X path?
 
Upvote 0

Zuljin

Fundador
Miembro del Equipo
Fundador
ADMIN
Se incorporó
15 Enero 2004
Mensajes
11.872
quieres ver todos los subdirectorios o sólo los directorios dentro de X path?

Todos los directorios dentro de X path (que es donde reside la aplicación), y sula cantidad de archivos de cada directorio. Así pillo en dónde más se me están generando archivos de log, auditoría, traza y lo que sea.
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.602
ah verdad que está XFS tb que no tiene esos límites. Tb es buena opción, anda igual de bien que btrFS siempre y cuando sean archivos un poco más grandes (típicamente unos 512kb?), si son archivos chicos anda como el hoyo.

El listado lo podrías hacer con el siguiente script:

Código:
#!/bin/bash

find $1 -type d -print0 | while read -d '' -r dir; do
  files=("$dir"/*)
  printf "%5d files in directory %s\n" "${#files[@]}" "$dir"
done

Llamar con:

Código:
./lala [DIRECTORIO]
 
Upvote 0

Nautiluscl

El Psy Congroo
Se incorporó
7 Agosto 2007
Mensajes
4.222
Sorry el oftopic, lei "problema con indoor" y pense que este era foro weed :zippy

Enviado desde mi Nexus 4 mediante Tapatalk
 
Upvote 0

Nautiluscl

El Psy Congroo
Se incorporó
7 Agosto 2007
Mensajes
4.222
En pocas palabras que es un i nodo?

No me manden a google :(

Enviado desde mi Nexus 4 mediante Tapatalk
 
Upvote 0

Archeus

Fanático
Se incorporó
22 Junio 2008
Mensajes
1.196
En pocas palabras que es un i nodo?

No me manden a google :(

Enviado desde mi Nexus 4 mediante Tapatalk
te traigo google entonces XD

In a Unix-style file system, the inode is a data structure used to represent a filesystem object, which can be one of various things including a file or a directory. Each inode stores the attributes and disk block location(s) of the filesystem object's data

Sent from my MotoG3 using Tapatalk
 
Upvote 0

Cosme

Gold Member
Se incorporó
27 Febrero 2005
Mensajes
8.281
En pocas palabras que es un i nodo?

No me manden a google :(

Enviado desde mi Nexus 4 mediante Tapatalk


un inodo es como la cabecera de un paquete TCP/IP ;

Explicandolo simple, un inodo es una tabla que tiene la informacion relativa al archivo (menos el nombre); cuando miras una carpeta con archivos, lo que ves es la representación de los archivos por medio de su inodo.
 
Upvote 0

Zuljin

Fundador
Miembro del Equipo
Fundador
ADMIN
Se incorporó
15 Enero 2004
Mensajes
11.872
@Nautiluscl , cuento corto...

El inodes me llegó al 100%. Eso significa que no podía seguir creando nuevos archivos en ese volumen, aún cuando me quedaba MUCHO espacio disponible.
 
Upvote 0

Miguelwill

I am online
Miembro del Equipo
MOD
Se incorporó
23 Febrero 2004
Mensajes
12.403
un inodo es como la cabecera de un paquete TCP/IP ;

Explicandolo simple, un inodo es una tabla que tiene la informacion relativa al archivo (menos el nombre); cuando miras una carpeta con archivos, lo que ves es la representación de los archivos por medio de su inodo.

yo siempre uso la representación como un "puntero", que entre otros datos, tiene la dirección del o los grupos de bloques que guardan la información que "forman" al archivo, pero creo que es una explicación aun mas técnica :xd

sobre la busqueda, estuvo interesante el codigo de unreal, ahi le saca provecho a la potencia de bash, en mi caso habria usado "find -type d" para armar una lista de directorios, recorrerla con "for" y a cada dir le habria enviado un "find -type f | wc -l "
pero despues de pensarlo, habria sido algo reiterativo, y habria sido mejor hacer solo un for con la lista de directorios de la ruta entregada, y ahi hacer el find -type f a los directorios iniciales y no a cada subdirectorio :D
 
Upvote 0

Nautiluscl

El Psy Congroo
Se incorporó
7 Agosto 2007
Mensajes
4.222
Es una partición separada para guardar la tabla que contiene la ubicación y propiedades de los archivos?

Enviado desde mi Nexus 4 mediante Tapatalk
 
Upvote 0

Miguelwill

I am online
Miembro del Equipo
MOD
Se incorporó
23 Febrero 2004
Mensajes
12.403
quizas esto te pueda ayudar

Structure%20of%20inode%20of%20a%20file.png


el "file content" seria el "contenido" o "datos" del archivo

en linux se usan "grupos" de bloques con tamaños definidos, los cuales se van rellenando paulatinamente, y cuando se llenan, recien ahi se piden mas bloques, de esa forma se evita que aumente la fragmentacion de forma desproporcionada
 
Upvote 0

Zuljin

Fundador
Miembro del Equipo
Fundador
ADMIN
Se incorporó
15 Enero 2004
Mensajes
11.872
Update...

¿Alguien sabe cómo monitorear los inodes? Al igual que para el espacio usado, si la utilización de inodes llegue a 90% (por ejemplo) que mande una alerta.

Acá tengo Oracle Cloud Control 12c, System Center Operation Manager 2012 de Microsoft y el viejo icinga. Googleando veo que hay scripts para nagios/icinga, pero quiero evitarme la fatiga de meter un script en icinga.
 
Upvote 0

Miguelwill

I am online
Miembro del Equipo
MOD
Se incorporó
23 Febrero 2004
Mensajes
12.403
podrias usar nagios-nrpe
el plugin de espacio en disco informa tanto el uso de espacio en MB como en inodos
 
Upvote 0

yakko

pingüino mal genio
Se incorporó
24 Agosto 2004
Mensajes
16.883
Update...

¿Alguien sabe cómo monitorear los inodes? Al igual que para el espacio usado, si la utilización de inodes llegue a 90% (por ejemplo) que mande una alerta.

Acá tengo Oracle Cloud Control 12c, System Center Operation Manager 2012 de Microsoft y el viejo icinga. Googleando veo que hay scripts para nagios/icinga, pero quiero evitarme la fatiga de meter un script en icinga.
el chequeo normal de espacio en disco de nagios también revisa inodos.

puedes ver si hay algún oid de snmp que te muestre esa info.
 
Upvote 0
Subir