Ho un ambiente virtualizzato ad altissima densità con contenitori, quindi sto cercando di rendere ogni contenitore davvero piccolo. "Davvero piccolo" significa 87 MB sulla base Ubuntu 14.04 (Trusty Tahr) senza interrompere la compatibilità del gestore pacchetti.
Quindi uso LVM come supporto di archiviazione per i miei contenitori e recentemente ho trovato numeri molto strani. Eccoli.
Creiamo un volume logico di 100 MiB (sì, potenza di 2).
sudo lvcreate -L100M -n test1 /dev/purgatory
Vorrei controllare le dimensioni, quindi rilascio sudo lvs --units k
test1 purgatory -wi-a---- 102400.00k
Dolce, questo è davvero 100 MiB.
Ora facciamo un filesystem ext4 . E, naturalmente, ricordiamo il -m 0
parametro, che impedisce lo spreco di spazio.
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
Dolce e pulito. Ricorda la dimensione del blocco: il nostro volume logico è piccolo, quindi mkfs.ext4 ha deciso di creare un blocco di 1 KiB, non il solito 4 KiB.
Ora lo monteremo.
sudo mount /dev/purgatory/test1 /mnt/test1
E chiamiamo df
senza parametri (vorremmo vedere 1 blocco KiB)
/dev/mapper/purgatory-test1 95054 1550 91456 2% /mnt/test1
Aspetta, oh shi ~
Abbiamo 95054 blocchi in totale. Ma il dispositivo stesso ha 102400 blocchi di 1 KiB. Abbiamo solo il 92,8% del nostro deposito. Dove sono i miei blocchi, amico?
Vediamolo su un dispositivo a blocchi reale. A hanno un disco virtuale da 16 GiB, 16777216 blocchi da 1K, ma solo 15396784 blocchi sono in output df. 91,7%, che cos'è?
Ora segue l'indagine (spoiler: nessun risultato)
Il filesystem potrebbe iniziare non all'inizio del dispositivo. Questo è strano, ma possibile. Fortunatamente, ext4 ha byte magici, controlliamo la loro presenza.
sudo hexdump -C / dev / purgatory / test1 | grep "53 ef"
Questo mostra superblock:
00000430 a9 10 e7 54 01 00 ff ff 53 ef 01 00 01 00 00 00 |...T....S.......|
Hex 430 = Dec 1072, quindi da qualche parte dopo il primo kilobyte. Sembra ragionevole, ext4 salta i primi 1024 byte per stranezze come VBR, ecc.
- Questo è diario!
No non lo è. Il journal prende spazio da Disponibile se output df.
- Oh, abbiamo dump2fs e potremmo controllare le dimensioni lì!
... molte greps ...
sudo dumpe2fs /dev/purgatory/test1 | grep "Free blocks"
Ahia.
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
E abbiamo un altro numero. 93504 blocchi gratuiti.
La domanda è: cosa sta succedendo?
- Dispositivo a blocchi: 102400k (dice lvs)
- Dimensione del filesystem: 95054k (dice df)
- Blocchi liberi: 93504k (dice dumpe2fs)
- Dimensione disponibile: 91456k (dice df)
ext2
sembra ragionevole qui, certo
ext2
per piccole partizioni.