Pregunta

Tengo un directorio que estoy archivando:

$ du -sh oldcode
1400848
$ tar cf oldcode.tar oldcode

Así que el directorio es de 1,4 GB. El archivo es significativamente menor, sin embargo:

$ ls -l oldcode.tar
-rw-r--r-- 1 ieure ieure 940339200 2002-01-30 10:33 oldcode.tar

Sólo 897mb. No es comprimido de cualquier manera:

$ file oldcode.tar
oldcode.tar: POSIX tar archive

¿Por qué es el archivo tar más pequeño que su contenido?

¿Fue útil?

Solución

Se obtiene una diferencia debido a la forma en que funciona sistema de archivos.

En pocas palabras su disco está hecho de racimos. Cada grupo tiene un tamaño fijo de - digamos - 4 kilobytes. Si almacena un archivo de 1 kb en un 3 kb tal cúmulo vaya a utilizarla. Los detalles exactos varían con el tipo de sistema de archivos que utiliza, pero la mayoría de los sistemas de archivos funcionan de esa manera.

3 kb espacio perdido no es mucho para un solo archivo, pero si usted tiene un montón de archivos muy pequeños los residuos puede llegar a ser una parte importante del uso del disco.

En el interior del archivo tar los archivos no se almacenan en racimos, pero uno tras otro. Ahí es donde la diferencia viene.

Otros consejos

Al no tener conocimiento de lo que el tar sea que estés usando o qué tipo de sistema Unix que utiliza, aquí está mi suposición: oldcode contiene numerosos archivos más pequeños, que cuando se usan por sí mismos el espacio en disco innecesariamente, ya que el espacio de disco se asigna por algunos tipo de bloque, en lugar de byte a byte. En el archivo de alquitrán, que están concatenados, y hacer el máximo uso del espacio en disco que están asignados.

Esto tiene algo que ver con el tamaño de bloque del sistema de ficheros. hombre 1 du en MacOSX 10.5.6 estados:

  

La utilidad du muestra el sistema de archivos Uso del bloque para cada argumento de archivo y para cada directorio en la jerarquía de archivos arraigada en cada argumento directorio. Si no se especifica ningún archivo, se muestra el uso de bloques de la jerarquía arraigada en el directorio actual.

[mirko@borg foo]$ ls -la
total 0
drwxr-xr-x   2 mirko  wheel   68 Jan 30 21:20 .
drwxrwxrwt  10 root   wheel  340 Jan 30 21:16 ..
[mirko@borg foo]$ du -sh
0B  .
[mirko@borg foo]$ touch foo
[mirko@borg foo]$ ls -la
total 0
drwxr-xr-x   3 mirko  wheel  102 Jan 30 21:20 .
drwxrwxrwt  10 root   wheel  340 Jan 30 21:16 ..
-rw-r--r--   1 mirko  wheel    0 Jan 30 21:20 foo
[mirko@borg foo]$ du -sh
0B  .
[mirko@borg foo]$ echo 1 > foo
[mirko@borg foo]$ ls -la
total 8
drwxr-xr-x   3 mirko  wheel  102 Jan 30 21:20 .
drwxrwxrwt  10 root   wheel  340 Jan 30 21:16 ..
-rw-r--r--   1 mirko  wheel    2 Jan 30 21:20 foo
[mirko@borg foo]$ du -sh
4.0K    .

Como se puede ver incluso un archivo de 2 bytes toma un bloque entero de 4 kb. Hay algunos sistemas de ficheros que evitar este desperdicio de espacio por bloque subasignaciones .

Hay 2 posibilidades.

Los archivos pequeños

Lo más probable es que no menor que su contenido. Como Nils Pipenbrinck escribió du, muestra la cantidad de espacio de los asigna sistemas de ficheros, que desde los archivos se almacenan en bloques del sistema de ficheros es más que el tamaño lógico del archivo.

Para ver el tamaño lógico del archivo, utilice du --apparent-size. En este caso, el resultado debe ser menor que el archivo tar.

Los archivos dispersos

Los archivos de alquitrán pueden almacenar archivos dispersos. Si el archivo comprimido se ha creado usando --sparse , los agujeros en se registrarán los archivos dispersos, por lo que el archivo comprimido podría ser más pequeño que el tamaño lógico de los archivos.

Si la información de poca densidad en su copia extraída se pierde alguna manera (por ejemplo, si extrajo el paquete de archivos en un sistema de archivos que no admite archivos dispersos, o si fue comprimido y luego descomprimido, etc.), entonces se df informar el tamaño ampliado.

du recuentos bloques de disco, no presenta duder tamaño.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top