Pourquoi un fichier RAT serait plus petit que son contenu?
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?
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. Très probablement, il est pas plus petit que son contenu. Comme Nils Pipenbrinck a écrit , affiche la quantité Pour voir la taille logique du fichier, utilisez fichiers tar peuvent stocker des fichiers rares. Si le tarball a été créée en utilisant , les 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 Les petits fichiers
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. du --apparent-size
. Dans ce cas, le résultat devrait être plus petit que le fichier tar. Les fichiers fractionnés
--sparse
trous dans les fichiers rares seront enregistrés, de sorte que le tarball pourrait être plus petite que la taille logique des fichiers. df
rapport de la taille élargie.
du disque de blocs dénombre, pas la taille du fichier Duder.