У меня виртуальная среда очень высокой плотности с контейнерами, поэтому я стараюсь сделать каждый контейнер действительно маленьким. «Действительно маленький» означает 87 МБ на базе Ubuntu 14.04 (Trusty Tahr) без нарушения совместимости менеджера пакетов.
Поэтому я использую LVM в качестве резервного хранилища для своих контейнеров, и недавно я обнаружил очень странные цифры. Вот они.
Давайте создадим логический том объемом 100 МБ (да, степень 2).
sudo lvcreate -L100M -n test1 /dev/purgatory
Я хотел бы проверить размер, поэтому я выдаю sudo lvs --units k
test1 purgatory -wi-a---- 102400.00k
Сладкий, это действительно 100 МиБ.
Теперь давайте создадим файловую систему ext4 . И конечно же, мы помним -m 0
параметр, который предотвращает использование космического мусора.
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
Сладко и чисто. Обратите внимание на размер блока - наш логический том небольшой, поэтому mkfs.ext4 решил создать блок размером 1 КБ, а не обычный 4 КБ.
Теперь мы его смонтируем.
sudo mount /dev/purgatory/test1 /mnt/test1
И давайте назовем df
без параметров (хотелось бы увидеть 1 КиБ-блок)
/dev/mapper/purgatory-test1 95054 1550 91456 2% /mnt/test1
Подожди, оу ~
Всего у нас 95054 блоков. Но само устройство имеет 102400 блоков по 1 КиБ. У нас всего 92,8% нашего хранилища. Где мои блоки, чувак?
Давайте посмотрим на это на реальном блочном устройстве. А имеют виртуальный диск 16 ГиБ, 16777216 блоков по 1 КБ, но только 15396784 блоков находятся в выводе df. 91,7%, что это?
Теперь следует расследование (спойлер: безрезультатно)
Файловая система может начинаться не с начала устройства. Это странно, но возможно. К счастью, в ext4 есть магические байты, давайте проверим их наличие.
sudo hexdump -C / dev / purgatory / test1 | grep "53 ef"
Это показывает суперблок:
00000430 a9 10 e7 54 01 00 ff ff 53 ef 01 00 01 00 00 00 |...T....S.......|
Шестнадцатеричный 430 = декабрь 1072, поэтому где-то после первого килобайта. Выглядит разумно, ext4 пропускает первые 1024 байта для таких странностей, как VBR и т. Д.
- Это журнал!
Нет. Журнал занимает место из Доступно, если вывод df.
- О, у нас есть dump2fs, и мы можем проверить размеры там!
... много greps ...
sudo dumpe2fs /dev/purgatory/test1 | grep "Free blocks"
Уч.
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
И у нас есть другой номер. 93504 свободных блоков.
Вопрос в том, что происходит?
- Блочное устройство: 102400k (Lvs говорит)
- Размер файловой системы: 95054k (df говорит)
- Свободные блоки: 93504k (говорит dumpe2fs)
- Доступный размер: 91456k (df говорит)
ext2
выглядит разумно здесь, конечно
ext2
для небольших перегородок.