¿Cómo ver el uso del disco con menos sobrecarga en bash?

8
du -csh /

Lo anterior tomará una gran cantidad de tiempo para calcular, ¿hay alguna manera de ver el resultado menos preciso con menos sobrecarga?

ACTUALIZAR

Lo que quiero saber es el tamaño total bajo un directorio específico.

apache
fuente

Respuestas:

9

En cuanto a una versión más optimizada du, no tengo conocimiento de una. Las cosas que vienen a la mente son:

  1. Almacene estos archivos en un disco RAM o algo así.
  2. Si solo una aplicación escribe en esta carpeta y en su subcarpeta, haga que la aplicación realice un seguimiento.
  3. Si todos estos archivos tienen aproximadamente el mismo tamaño y una cantidad uniforme de ellos distribuidos entre directorios, puede contar la cantidad de subdirectorios y multiplicarlos por archivo por directorio y luego por tamaño. Puede hacerlo rápidamente simplemente usando el recuento de enlaces duros para el directorio si solo tiene una estructura profunda de directorio ( stat -c '%h') - 2.
  4. Haga que todos estos archivos sean propiedad de un usuario específico y use el mecanismo de cuota.
  5. Use una partición dedicada y solo use df. Un sistema de archivos virtual (un archivo en un sistema de archivos que se monta a través de loopback) también podría hacer esto.

De todo esto, las opciones de cuota y partición dedicada son probablemente las más fáciles y eficientes.

Kyle Brandt
fuente
6

El problema es que 'du' tiene que enumerar cada objeto en el subárbol. Esta es una operación intensiva de metadatos, y lleva un tiempo para la mayoría de los sistemas de archivos Linux. Algunos sistemas de archivos, NTFS y NSS de Novell vienen a la mente, tienen la capacidad de realizar un seguimiento de los tamaños de directorio como este en los metadatos, lo que hace que esta operación sea mucho más rápida. En general, si su sistema de archivos admite cuotas de directorio de algún tipo, tiene que hacer un seguimiento de estos datos internamente para la aplicación, cada cambio de tamaño se replica en el árbol de directorios hasta el punto de cuota (NTFS) o cada directorio (NSS) ) cuando sucede, por lo que obtener un tamaño de árbol de directorios es muy rápido.

Desafortunadamente, no hay una manera de hacer que correr más rápido, solo soluciones.

  • Ejecute 'du' en modo por lotes y viva con resultados no en vivo
  • Cree un nuevo sistema de archivos y use 'df' en su lugar
  • Cree un archivo grande que contendrá su directorio, monte en bucle, formatee y use 'df' en ese nuevo punto de montaje. Si necesita más espacio, desmonte el montaje de bucle invertido, extienda el archivo y vuelva a montar.
sysadmin1138
fuente
+1 Esta es una respuesta muy útil.
Richard Holloway
4
du -h --max-depth=1

Le da los tamaños en formato KB / MB / GB humano desde su directorio de trabajo actual.

David Rickman
fuente
Creo que quieren saber por qué tarda tanto tiempo en generar y responder du. Creo que Windows también actúa igual. Si hace clic con el botón derecho en un directorio, debe esperar mientras se calcula el tamaño de cada subdirectorio. Es solo la forma en que funciona el sistema de archivos.
The Unix Janitor
Sí, a menos que ejecuten un servicio de indexación o algo así.
David Rickman
3

Con las herramientas estándar, debe obtener el tamaño de cada archivo en el directorio cada vez que desee saber el tamaño total. Una forma posiblemente más eficiente de hacerlo sería tener un "monitor de tamaño de directorio", que realiza un seguimiento del tamaño actual del directorio. No existe tal cosa (que yo sepa), pero podría implementar uno con inotify. Posiblemente no con bash (y inotify-tools), pero probablemente podría usar python y pyinotify, por ejemplo.

Dan Andreatta
fuente
2

Puede que te resulte gt5útil. Almacena la duinformación más reciente y hace una diferencia contra ella la próxima vez que se ejecuta. Muestra su salida usando un navegador en modo texto como links.

Pausado hasta nuevo aviso.
fuente
2

Además, considere la opción -x en du - "un sistema de archivos" si está haciendo

du -xh / --max-depth=1 

Solo verá el resumen del uso del disco en su partición raíz, y no intentará agregar / proc, / sys, / dev, etc.

Jason
fuente
2

si solo desea el uso del disco para el sistema de archivos raíz, entonces

df -h /


fuente
1

No. ¿Podrías hacer una copia periódica a un archivo de texto, en un trabajo cron configurado para ejecutarse durante la noche, de modo que no tengas datos actuales disponibles de inmediato?

Tenga en cuenta que medir el espacio en disco utilizado por una carpeta que contiene un gran número de archivos en Windows de manera similar lleva algún tiempo.

xenny
fuente
0

df -h hará el truco

Antoine Benkemoun
fuente
Lo que quiero saber es el tamaño total bajo un directorio específico.
apache
0

df -kh /

Esto le mostrará la cantidad de espacio en disco utilizado y disponible.

El conserje de Unix
fuente
0

Quizás

df -h

el texto adicional ya que una respuesta breve y concisa no es suficiente para que serverfault piense que soy humano.


fuente
Pero necesito saber el tamaño total en un directorio específico
apache
entonces el uso tendrá que usar du
The Unix Janitor
Pero en Windows, puedo ver el espacio total utilizado sin gastos generales, ¿por qué no puedo en Linux?
apache
¿En serio? NTFS no es ext3
El conserje de Unix
1
@apache, oh, hay gastos generales, intente ver el tamaño de una carpeta de 20GB con muchos archivos de 10-20 MB Hay def arriba.
Zypher
0

Para encontrar el espacio debajo de ese directorio, enumérelo en lugar de /. Para encontrar el espacio en directorios fooy bar, enumere ambos:

du -csh foo bar
mpez0
fuente
0

Debe usar dnotify para calcular el uso del disco si el sistema de archivos no se cambia con frecuencia.

Mircea Vutcovici
fuente