Question

J'ai un répertoire que je suis l'archivage:

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

Ainsi, le répertoire est 1.4GB. Le fichier est nettement plus petit, bien que:

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

Seulement 897mb. Il est pas compressé de quelque façon que:

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

Pourquoi le fichier tar plus petit que son contenu?

Était-ce utile?

La solution

Vous obtenez une différence à cause de la façon dont le système de fichiers fonctionne.

En un mot disque est réalisé en clusters. Chaque groupe a une taille fixe - disons - 4 kilo-octets. Si vous enregistrez un fichier 1kb dans un tel 3kb de cluster sera utilisé. Les détails exacts varient en fonction du type de ce que vous utilisez un système de fichiers, mais la plupart des systèmes de fichiers fonctionnent de cette façon.

3kb espace perdu est pas beaucoup pour un seul fichier, mais si vous avez beaucoup de petits fichiers, les déchets peuvent devenir une partie importante de l'utilisation du disque.

A l'intérieur du archive tar les fichiers ne sont pas stockés dans des clusters, mais l'un après l'autre. C'est là vient de la différence.

Autres conseils

Avoir aucune connaissance de ce que le goudron vous utilisez ou quel type de système Unix que vous utilisez, voici ma conjecture: oldcode contient de nombreux fichiers plus petits, qui, lorsqu'ils sont eux-mêmes utilisent l'espace disque inefficacement, depuis l'espace disque est alloué par certains sorte de bloc, plutôt que octet par octet. Dans le fichier tar, ils sont chaînés, et utilisent au maximum l'espace disque sont assignés ils.

Cela a quelque chose à voir avec le système de fichiers de votre blocksize. homme 1 du sur MacOSX 10.5.6 états:

  

L'utilitaire affiche du système de fichiers l'utilisation du bloc pour chaque argument de fichier et pour chaque répertoire dans la hiérarchie des fichiers enracinée dans chaque argument de répertoire. Si aucun fichier est spécifié, l'utilisation du bloc de la hiérarchie ancrée dans le répertoire actuel est affiché.

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

Comme vous le voyez même un fichier de 2 octets prend un bloc entier de 4 Ko. Il y a des systèmes de fichiers qui permettent d'éviter ce gaspillage de l'espace par

Il y a 2 possibilités.

Les petits fichiers

Très probablement, il est pas plus petit que son contenu. Comme Nils Pipenbrinck a écrit , affiche la quantité du d'espace les Alloue du système de fichiers, qui, depuis les fichiers sont stockés dans des blocs de système de fichiers est plus de la taille logique du fichier.

Pour voir la taille logique du fichier, utilisez du --apparent-size. Dans ce cas, le résultat devrait être plus petit que le fichier tar.

Les fichiers fractionnés

fichiers tar peuvent stocker des fichiers rares. Si le tarball a été créée en utilisant , les --sparse trous dans les fichiers rares seront enregistrés, de sorte que le tarball pourrait être plus petite que la taille logique des fichiers.

Si les informations dans votre copie faible densité extrait a été en quelque sorte perdue (par exemple si vous avez extrait l'archive sur un système de fichiers qui ne supporte pas les fichiers rares, ou si elle était compressé et décompressé, etc.), sera df rapport de la taille élargie.

du disque de blocs dénombre, pas la taille du fichier Duder.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top