2010-11-29 15 views
5

¿cuál es la mejor y la forma más rápida de para calcular el tamaño de los directorios? Por ejemplo vamos a tener la siguiente estructura:La forma más rápida de calcular el tamaño de los directorios

/users 
     /a 
     /b 
     /c 
     /... 

Necesitamos que la salida sea por directorio de usuario:

a = 1224KB 
b = 3533KB 
c = 3324KB 
... 

Planeamos tener decenas tal vez incluso cientos de miles de directorios bajo/usuarios. El siguiente comando de shell funciona:

du -cms /users/a | grep total | awk '{print $1}' 

Pero tendremos que llamarlo N número de veces. El punto entero, es que la salida; el tamaño del directorio de cada usuario se almacenará en nuestra base de datos. Además, nos gustaría actualizarlo con la mayor frecuencia posible, pero sin bloquear todos los recursos en el servidor. ¿Es posible hacer que calcule el tamaño del directorio de usuarios cada minuto? ¿Qué tal cada 5 minutos?

Ahora que estoy pensando en ello un poco más, ¿tendría sentido usar node.js? De esta forma, podemos calcular el tamaño de los directorios e incluso insertarlos en la base de datos, todo en una transacción. Podríamos hacer eso también en PHP y Python, pero no estamos seguros de que sea tan rápido.

Gracias.

+0

Gracias, he vuelto y marcado respuestas. – Justin

+0

Ninguna de las respuestas está marcada como aceptada. – JigarGandhi

Respuesta

4

¿Para qué necesita esta información? Si solo sirve para recordar a los usuarios que sus directorios personales son demasiado grandes, debe agregar cuotas límites al sistema de archivos. Puede establecer la cuota en 1000 GB si solo desea los números sin realmente limitar el uso del disco.

Los números suelen ser precisos cada vez que accede a algo en el disco. El único inconveniente es que le dicen qué tan grandes son los archivos que son propiedad de por un usuario en particular, en lugar de qué tan grandes son los archivos debajo de su directorio de inicio. Pero tal vez puedas vivir con eso.

+0

Lo necesitamos para la facturación. Estamos facturando en uso de disco. Además, queremos que los usuarios puedan ver el espacio de disco que están usando en su panel de control, en tiempo real, como sea posible. – Justin

+2

En ese caso, me basaría en los números dados por el sistema de cuota de disco. Y si no confía en ellos, aún puede calcular el uso real del disco una vez al día para ver si los dos números son diferentes.Pero tenga en cuenta que cosas como los enlaces duros pueden dificultar el cálculo preciso del uso del disco. El sistema de cuota de disco incorporado ya se encarga de todo eso. –

4

Creo que lo que busca es:

du -cm --max-depth=1 /users | awk '{user = substr($2,7,300); 
>         ans = user ": " $1; 
>         print ans}' 

Los números mágicos 7 está quitando la subcadena/usuarios /, y 300 es sólo un gran número arbitrario (awk no es uno de mis mejores lenguajes = D, pero supongo que esa parte no se escribirá en awk de todos modos.) Es más rápido ya que no implica greping para el total y el ciclo está contenido dentro de du. Apuesto a que se puede hacer más rápido, pero esto debería ser lo suficientemente rápido.

5

¿Por qué no:

du -sm /users/* 

(la parte más lenta todavía es probable que sea du que atraviesa el sistema de archivos para calcular el tamaño, sin embargo).

1

no es tan lento pero le mostrará el tamaño de las carpetas: du-SH/*> total.size.files.txt

Cuestiones relacionadas