Domanda

Ho un elenco che sto archiviazione:

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

Quindi, la directory è 1.4GB. Il file è significativamente più piccolo, però:

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

Solo 897mb. Non è compresso in alcun modo:

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

Perché il file tar più piccolo il suo contenuto?

È stato utile?

Soluzione

Si ottiene una differenza a causa del modo in cui funziona il filesystem.

In poche parole il disco è fatto di cluster. Ogni cluster ha una dimensione fissa di - diciamo - 4 kilobyte. Se si memorizza un file 1kb in tale 3kb grappolo resta inutilizzato. I dettagli esatti variano a seconda del tipo di file system che si utilizza, ma la maggior parte dei file system funzionano in questo modo.

spazio

3kb sprecata non è molto per un singolo file, ma se hai un sacco di file molto piccoli i rifiuti può diventare una parte significativa del utilizzo del disco.

All'interno della tar-archivio i file non vengono memorizzati in gruppi, ma uno dopo l'altro. Ecco dove la differenza viene.

Altri suggerimenti

Non avendo conoscenza di ciò che il catrame si sta utilizzando o che tipo di sistema Unix che si sta utilizzando, ecco la mia ipotesi: OLDCODE contiene numerosi file più piccoli, che, se da loro stessi utilizzano lo spazio su disco in modo inefficiente, dal momento che lo spazio su disco viene allocato da alcuni sorta di blocco, anziché byte per byte. Nel file tar, sono concatenati, e fare il massimo utilizzo dello spazio su disco sono assegnati.

Questo ha qualcosa a che fare con la dimensione del blocco del filesystem. man 1 du su MacOSX 10.5.6 stati:

  

L'utilità du visualizza il file system Utilizzo blocco per ogni argomento di file e per ogni directory nella gerarchia del file radicata in ogni argomento directory. Se non viene specificato alcun file, viene visualizzato l'utilizzo del blocco della gerarchia radicata nella directory corrente.

[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    .

Come si vede anche un file di 2 byte vuole un intero blocco di 4 KB. Ci sono alcuni filesystem che evitano questo spreco di spazio blocco sottoallocazione .

Ci sono 2 possibilità.

Piccoli file

Molto probabilmente, non più piccolo dei suoi contenuti. Come Nils Pipenbrinck scritto , du visualizza la quantità di spazio alloca filesystem, che dal file sono memorizzati in blocchi del filesystem è più che la dimensione logica del file.

Per visualizzare la dimensione logica del file, utilizzare du --apparent-size. In questo caso, il risultato dovrebbe essere più piccolo del file tar.

file sparse

I file tar in grado di memorizzare i file sparse. Se l'archivio è stata creata usando --sparse , i fori in saranno registrati i file sparsi, in modo che il tarball potrebbe essere più piccola della dimensione logica dei file.

Se le informazioni scarsità nella vostra copia estratto è stato in qualche modo perso (ad esempio se è stato estratto il tarball su un file system che non supporta file sparsi, o se fosse zip e poi decompressi, ecc), allora sarà df segnalare la dimensione espansa.

du conta blocchi del disco, non file Dimensione Duder.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top