Je suis vraiment confus par cela. Pour faire quelques expériences avec GlusterFS, j'ai créé deux machines virtuelles avec VirtualBox, exécutant Ubuntu 12.04, chacune avec 10 Go de stockage. J'ai écrit un script qui a créé beaucoup de petits fichiers dans beaucoup de dossiers. Chaque fichier était 100k de données aléatoires générées par :
dd if=/dev/zero of=#{name} bs=1 count=0 seek=100K
En copiant les fichiers d'une machine à l'autre, le destinataire manque d'espace. Ce qui aurait dû être impossible, puisqu'ils sont tous deux de la même taille et que je n'y ai rien stocké. En essayant de comprendre ce qui ne va pas, j'ai trouvé une situation vraiment confuse. Tout ceci se passe sur la machine source.
Selon df, je n'utilise que 26% de l'espace :
root@revisionist:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/revisionist-root 9.2G 2.3G 6.5G 26% /
udev 237M 4.0K 237M 1% /dev
tmpfs 50M 292K 49M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 246M 0 246M 0% /run/shm
/dev/sda1 228M 48M 169M 22% /boot
selon du, l'ensemble de la structure des fichiers que j'ai créés prend 772M :
root@revisionist:~# du -h files/
...
4.0K files/3x/ey/hs
8.0K files/3x/ey
508K files/3x
772M files/
ce qui est manifestement faux, car ce seul dossier contient un seul fichier de 100K :
root@revisionist:~# ls -lh files/3x/ey/hs
total 0
-rw-r--r-- 1 root root 100K May 19 11:30 3xeyhst4lnkzg5abzeasiw.txt
Si je cible ce répertoire et ce fichier avec du, les données sont clairement fausses :
root@revisionist:~# du -h files/3x/ey/hs/
4.0K files/3x/ey/hs/
root@revisionist:~# du -h files/3x/ey/hs/3xeyhst4lnkzg5abzeasiw.txt
0 files/3x/ey/hs/3xeyhst4lnkzg5abzeasiw.txt
Cela m'a conduit à trouver l'option --apparent-size qui est documentée comme suit :
--taille apparente
imprimer les tailles apparentes, plutôt que l'utilisation du disque ; bien que la taille apparente soit généralement plus petite, elle peut être plus grande en raison des trous dans les fichiers (`sparse'), de la fragmentation interne, des blocs indirects, etc.
et en effet, cela semble mieux :
root@revisionist:~# du -h --apparent-size files/3x/ey/hs/3xeyhst4lnkzg5abzeasiw.txt
100K files/3x/ey/hs/3xeyhst4lnkzg5abzeasiw.txt
root@revisionist:~# du -h --apparent-size files/3x/ey/hs
104K files/3x/ey/hs
mais lorsque je l'exécute pour l'ensemble de la structure, je me retrouve avec un résultat surprenant :
root@revisionist:~# du -h --apparent-size files
...
104K files/3x/ey/hs
108K files/3x/ey
6.8M files/3x
11G files
Comment ça peut être 11G ? Qu'est-ce qui se passe ? Il s'agit d'un arrondi ? mais alors pourquoi cela ne tient-il pas sur l'autre machine ?