2011-04-17 19 views
19

¿por qué la salida de du a menudo es tan diferente de du -b? -b es la abreviatura de --apparent-size --block-size=1. solo usando --apparent-size me da el mismo resultado la mayor parte del tiempo, pero --block-size=1 parece ser el truco. Me pregunto si la salida es correcta incluso, y ¿qué números son los que quiero? (es decir, tamaño real del archivo, si se ha copiado a otro dispositivo de almacenamiento)¿por qué la salida de `du` a menudo es tan diferente de` du -b`

+6

¿Por qué el voto a favor? Esta parece una muy buena pregunta. Tenga la cortesía de comentar si va a rechazar una pregunta o una respuesta para que todos puedan aprender algo. Un voto negativo anónimo es un potencial momento de enseñanza desechado. –

+1

@ Pete: probablemente porque no está relacionado con StackOverflow. Espero que otros usuarios de gran reputación lo noten. –

Respuesta

21

tamaño aparente es el número de bytes sus aplicaciones piensan que son en el archivo. Es la cantidad de datos que se transferirían a través de la red (sin contar los encabezados del protocolo) si decidiera enviar el archivo a través de FTP o HTTP. También es el resultado de cat theFile | wc -c, y la cantidad de espacio de direcciones que tomaría el archivo si cargó todo usando mmap.

El uso de disco es la cantidad de espacio que no se puede usar para otra cosa porque el archivo está ocupando ese espacio.

En la mayoría de los casos, el tamaño aparente es menor que el uso del disco porque el uso del disco cuenta el tamaño completo del último bloque (parcial) del archivo y el tamaño aparente solo cuenta los datos que están en ese último bloque. Sin embargo, el tamaño aparente es mayor cuando tiene un archivo disperso (los archivos dispersos se crean cuando busca un lugar más allá del final del archivo, y luego escribe algo allí; el sistema operativo no se molesta en crear muchos bloques llenos de ceros) - solo crea un bloque para la parte del archivo en la que decidiste escribir).

+0

¡gracias! esa es una explicación completa. entonces ¿por qué necesito tener '--block-size = 1' para tener el mismo resultado que' wc -c theFile' (guardando el proceso cat). parece que 'du' solo emite la cantidad correcta de bytes, cuando especifico -h, -k, -m, -B1, etc. pero tal vez esa es realmente otra pregunta? 'du' por defecto genera el uso de bloques, ¿no el uso de bytes? – knittl

+0

@knittl: No lo sé. –

+0

Buena explicación, pero no habla de '--block-size = 1' presente en la pregunta - -1. –

2

Porque de forma predeterminada, du da el uso del disco, que es igual o mayor que el tamaño del archivo. Como se dijo bajo --apparent de tamaño

print apparent sizes, rather than disk usage; although the apparent size is usually smaller, it may be 
larger due to holes in (`sparse') files, internal fragmentation, indirect blocks, and the like 
+0

, entonces, ¿qué es exactamente el tamaño aparente? y encuentro exactamente lo contrario: el tamaño aparente casi siempre es varias magnitudes más alto que el uso del disco – knittl

0

Comparar (por ejemplo) du -bm a du -m.

Los -b conjuntos --apparent-size --block-size=1, pero entonces el m anula el bloque de tamaño para ser 1M.

similares para -bh frente -h: la -bh significa --apparent-size --block-size=1 --human-readable, y otra vez los h anulaciones de ese bloque de tamaño.

2

archivos y carpetas tienen su tamaño real y el tamaño en disco

  • --apparent tamaño es archivo o carpeta a tamaño real

  • tamaño en disco es la cantidad de bytes del archivo o la carpeta toma el disco Lo mismo cuando se utiliza solo du

Si se encuentra con esa aparente de tamaño es casi siempre varias magnitudes mayor que el uso del disco, entonces significa que usted tiene una gran cantidad de archivos (`dispersos ') de los archivos con la fragmentación interna o bloques indirectos.

Cuestiones relacionadas