Se me olvidó copiar a la lista:

---------- Mensaje reenviado ----------
De: Igor Zubiaurre <[email protected]>
Fecha: 20 de abril de 2010 13:22
Asunto: Re: [CRySoL] Borrado de 15 millones de ficheros
Para: Fernando Sancho [email protected]

El 20 de abril de 2010 10:41, Fernando Sancho <[email protected]> escribió:


Aquí os propongo un problema que me tiene dando vueltas como un tonto los
> últimos días.
>
> Tengo un servidor dando servicio de forja mediante Redmine (
> http://www.redmine.org/). La versión que tengo en producción tiene un bug
> que no conocía, y es que no borra los ficheros que mantienen las sesiones
> abiertas. En aproximadamente 10 meses ha llegado a prácticamente agotar el
> espacio de i-nodos disponibles en la partición. como puede verse en la
> salida del comando df -i
>
>  df -i /var
> Filesystem            Inodes   IUsed   IFree IUse% Mounted on
> /dev/mapper/lvm00-var
>                      16842752 15448231 1394521   92% /var
>
> Para que el sitio siguiese funcionando renombré el directorio y lo recreé
> de nuevo vacío. El problema lo tengo a la hora de borrarlo. Todos los
> métodos que he intentado me dejan el sistema prácticamente inusable al cabo
> de unas horas y realmente no llegan a borrar nada. Este es el directorio en
> cuestión
>
>  drwxr-xr-x 2 www-data www-data 871227392 2010-04-19 16:57 sessions.bak
>
> Como podéis ver, el directorio ocupa 831MB y calculo que dentro hay unos 15
> millones de ficheros. No los he contado, pero creo que al ser ficheros casi
> vacíos hay uno por i-nodo y si el total de i-nodos ocupados en la partición
> es de 15 millones y medio, unos 15 millones deben estar ahí dentro.
>
> He probado con:
>
> rm -rf sessions.bak
> find sessions.bak -print0 | xargs -0 rm -f
>
> En ambos casos al cabo de un rato el sistema se queda en 98% waiting y no
> veo que la cuenta de i-nodos decrezca lo mas mínimo.
>
> Cualquier otra combinación de parámetros intentará analizar primero el
> contenido del directorio y se eternizaría aun mas.
>

Imagino que find así a pelo trata de poner en cola los 15M de archivos y eso
es lo que satura la E/S. No sé si head recibe todo su input antes de cortar
o corta cuando le parece y deja de recibir. Si es lo segundo, podría
servirte para limitar la lista a paquetes de tamaño controlado. Habría que
repetir muchas veces, pero quizá no te sature el sistema. La idea sería
llegar a un bucle de, pongamos, N llamadas consecutivas (no paralelas) que
limpien M archivos cada vez. Algo como N=3000; M=5000.
_______________________________________________
CRySoL mailing list
http://crysol.inf-cr.uclm.es/
https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol

Responder a