J'ai un environnement virtualisé très haute densité avec des conteneurs, j'essaie donc de rendre chaque conteneur vraiment petit. "Vraiment petit" signifie 87 Mo sur la base Ubuntu 14.04 (Trusty Tahr) sans rompre la compatibilité du gestionnaire de paquets.
J'utilise donc LVM comme stockage de sauvegarde pour mes conteneurs et récemment, j'ai trouvé des nombres très étranges. Les voici.
Créons un volume logique de 100 Mio (ouais, puissance de 2).
sudo lvcreate -L100M -n test1 /dev/purgatory
Je voudrais vérifier la taille, alors je publie sudo lvs --units k
test1 purgatory -wi-a---- 102400.00k
Doux, c'est vraiment 100 MiB.
Faisons maintenant un système de fichiers ext4 . Et bien sûr, nous nous souvenons du -m 0
paramètre qui évite les pertes d’espace.
sudo mkfs.ext4 -m 0 /dev/purgatory/test1
mke2fs 1.42.9 (4-Feb-2014)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
0 blocks (0.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
Doux et propre. Attention à la taille des blocs - notre volume logique est petit, donc mkfs.ext4 a décidé de créer un bloc de 1 Ko, et non les 4 Ko habituels.
Maintenant nous allons le monter.
sudo mount /dev/purgatory/test1 /mnt/test1
Et appelons df
sans paramètres (nous aimerions voir 1 blocs KiB)
/dev/mapper/purgatory-test1 95054 1550 91456 2% /mnt/test1
Attends, oh shi ~
Nous avons 95054 blocs au total. Mais l'appareil lui-même a 102400 blocs de 1 KiB. Nous n'avons que 92,8% de notre stockage. Où sont mes blocs, mec?
Regardons cela sur un vrai périphérique en mode bloc. A ont un disque virtuel de 16 Go, 16777216 blocs de 1K, mais seuls 15396784 blocs sont en sortie df. 91,7%, c'est quoi?
Suit maintenant l'enquête (spoiler: aucun résultat)
Le système de fichiers pourrait ne pas commencer au début de l'appareil. C'est étrange, mais possible. Heureusement, ext4 a des octets magiques, vérifions leur présence.
sudo hexdump -C / dev / purgatoire / test1 | grep "53 ef"
Cela montre superbloc:
00000430 a9 10 e7 54 01 00 ff ff 53 ef 01 00 01 00 00 00 |...T....S.......|
Hex 430 = Dec 1072, donc quelque part après le premier kilo-octet. Apparemment, ext4 saute les 1024 premiers octets pour les bizarreries comme VBR, etc.
- C'est un journal!
Non ce n'est pas. Le journal prend de l'espace de Disponible si sortie df.
- Oh, nous avons dump2fs et pourrions vérifier les tailles ici!
... beaucoup de greps ...
sudo dumpe2fs /dev/purgatory/test1 | grep "Free blocks"
Aie.
Free blocks: 93504
Free blocks: 3510-8192
Free blocks: 8451-16384
Free blocks: 16385-24576
Free blocks: 24835-32768
Free blocks: 32769-40960
Free blocks: 41219-49152
Free blocks: 53249-57344
Free blocks: 57603-65536
Free blocks: 65537-73728
Free blocks: 73987-81920
Free blocks: 81921-90112
Free blocks: 90113-98304
Free blocks: 98305-102399
Et nous avons un autre numéro. 93504 blocs gratuits.
La question est: que se passe-t-il?
- Périphérique de blocage: 102400k (dit LVS)
- Taille du système de fichiers: 95054k (df dit)
- Blocs gratuits: 93504k (dumpe2fs dit)
- Taille disponible: 91456k (df dit)
ext2
semble raisonnable ici, bien sûr
ext2
pour les petites partitions.