И это всё МОЁ

Пока идут обсуждения о включении zstd в ядро, можно потестить размер получаемых образов и сделать некоторые выводы. Просто оставлю это здесь, возможно кому-то окажется полезным, когда встанет вопрос о создании загрузочного дистрибутива.

В качестве «эталона» возьмём Gentoo. Скачиваем stage3 amd64, распаковываем, размер дистрибутива:

# du -sh gentoo/
1.1G gentoo/
# du -s gentoo/
1104960 gentoo/

plain = 1.1G

Простейший initramfs, используя саму директорию Gentoo для создания образа.

Для работоспособности нужно только сделать симлинк ln -s sbin/init init.

Это просто cpio без всякого сжатия.

# mkinitramfs gentoo/ > initrd 
1938832 blocks
# du -sh initrd
947M initrd
# du -s initrd
969420 initrd

cpio = 947M

В том же режиме «standalone» директории упакуем в gzip.

# mkinitramfs gentoo/ | gzip -c -9 -v > initrd.gz
1938832 blocks
67.1%
# du -sh initrd.gz
312M initrd.gz
# du -s initrd.gz
318628 initrd.gz

gzip = 312M

xz, самый распространённый из самых «сильных» форматов сжатия на данный момент.

# mkinitramfs gentoo/ | xz -c -C "crc32" -T 0 -9 -e -v > initrd.xz
1938832 blocks
100 % 167.3 MiB / 946.7 MiB = 0.177 8.6 MiB/s 1:49
# du -hs initrd.xz
168M initrd.xz
# du -s initrd.xz
171308 initrd.xz

xz = 168M

Теперь взглянем на современный, инновационный, сногшибательный, духозахватывающий, неповторимый zstd!

# mkinitramfs gentoo/ | zstd -T0 --ultra -100500 -v - > initrd.zst
Note: 8 physical core(s) detected
Warning : compression level higher than max, reduced to 22
(L22) Buffered : 932 MB - Consumed : 2 MB - Compressed : 0 MB => 33.15%
# du -sh initrd.zst
173M initrd.zst
# du -s initrd.zst
176432 initrd.zst

zstd = 173M

А разговоров то было.... Ну, справедливости ради стоит отметить, сильная его сторона вовсе не в возможностях сжатия, а в скорости распаковки. Условную планку «xz» по уровню сжатия пока ещё не преодолели.

Теперь давайте взглянем на альтернативный метод предоставления системы из initramfs, как «слой» с использованием SquashFS с сохранием данных в tmpfs.

# mkinitramfs `mktemp -d` --overlay gentoo --squashfs-xz --output $PWD/initrd.squashfs.xz
Parallel mksquashfs: Using 16 processors
Creating 4.0 filesystem on /tmp/tmp.scQzUt6MLO/overlays/10-gentoo, block size 1048576.
[============================================================] 53192/53192 100%
# du -sh initrd.squashfs.xz
217M initrd.squashfs.xz
# du -s initrd.squashfs.xz
221292 initrd.squashfs.xz

squashfs.xz = 217M

Вот это да, initramfs с системой упакованной в squashfs + xz получился немногим больше чем просто initramfs + xz.

Какие из этого можно сделать выводы?

  • Если вы ограничены в объёме RAM, но хотите работать в tmpfs, тогда используйте squashfs + xz или squashfs + zstd.

# mkinitramfs `mktemp -d` --overlay chroot --output $PWD/initrd --squashfs-xz

  • Если выделить пару-тройку GB под систему не проблема, тогда используйте overlay без squashfs, и будет вам уютный tmpfs без глюков самого overlayfs.

# mkinitramfs `mktemp -d` --overlay chroot --output $PWD/initrd

Специальный приглашённый гость: mkinitramfs из пакета ( https://github.com/sp00f1ng/boobstrap ).

А всё это, как водится, реклама. А на сегодня всё. До новых встреч. :-) :-|








 , ,