Tengo un entorno virtualizado de muy alta densidad con contenedores, así que estoy tratando de hacer que cada contenedor sea realmente pequeño. "Realmente pequeño" significa 87 MB en Ubuntu 14.04 base (Trusty Tahr) sin romper la compatibilidad del administrador de paquetes.
Así que uso LVM como almacenamiento de respaldo para mis contenedores y recientemente encontré números muy extraños. Aquí están.
Creemos un volumen lógico de 100 MiB (sí, potencia de 2).
sudo lvcreate -L100M -n test1 /dev/purgatory
Me gustaría comprobar el tamaño, así que emito sudo lvs --units k
test1 purgatory -wi-a---- 102400.00k
Dulce, esto es realmente 100 MiB.
Ahora hagamos un sistema de archivos ext4 . Y, por supuesto, recordamos el -m 0
parámetro, que evita el desperdicio de espacio.
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
Dulce y limpio. Tenga en cuenta el tamaño del bloque: nuestro volumen lógico es pequeño, por lo que mkfs.ext4 decidió hacer un bloque de 1 KiB, no los 4 KiB habituales.
Ahora lo montaremos.
sudo mount /dev/purgatory/test1 /mnt/test1
Y llamemos df
sin parámetros (nos gustaría ver 1 bloques KiB)
/dev/mapper/purgatory-test1 95054 1550 91456 2% /mnt/test1
Espera, oh shi ~
Tenemos 95054 bloques en total. Pero el dispositivo en sí tiene 102400 bloques de 1 KiB. Tenemos solo el 92.8% de nuestro almacenamiento. ¿Dónde están mis bloques, hombre?
Veámoslo en un dispositivo de bloque real. A tiene un disco virtual de 16 GiB, 16777216 bloques de 1K, pero solo 15396784 bloques están en salida df. 91.7%, ¿qué es?
Ahora sigue la investigación (spoiler: sin resultados)
El sistema de archivos podría comenzar no al comienzo del dispositivo. Esto es extraño, pero posible. Afortunadamente, ext4 tiene bytes mágicos, verifiquemos su presencia.
sudo hexdump -C / dev / purgatory / test1 | grep "53 ef"
Esto muestra superbloque:
00000430 a9 10 e7 54 01 00 ff ff 53 ef 01 00 01 00 00 00 |...T....S.......|
Hex 430 = Dec 1072, entonces en algún lugar después del primer kilobyte. Parece razonable, ext4 omite los primeros 1024 bytes para rarezas como VBR, etc.
- Esto es diario!
No, no es. El diario toma espacio de Disponible si la salida de df.
- ¡Oh, tenemos dump2fs y podríamos comprobar los tamaños allí!
... muchos greps ...
sudo dumpe2fs /dev/purgatory/test1 | grep "Free blocks"
Ay.
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
Y tenemos otro número. 93504 bloques libres.
La pregunta es: ¿qué está pasando?
- Dispositivo de bloque: 102400k (dice lvs)
- Tamaño del sistema de archivos: 95054k (df dice)
- Bloques gratuitos: 93504k (dumpe2fs dice)
- Tamaño disponible: 91456k (df dice)
ext2
parece razonable aquí, claro
ext2
para particiones pequeñas.