Пока идут обсуждения о включении 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 ).
А всё это, как водится, реклама. А на сегодня всё. До новых встреч. :-) :-|