LINUX.ORG.RU
ФорумAdmin

Dracut vs Genkernel. Параметры ядра grub

 , , , ,


2

2

Объясните «на пальцах» что лучше Dracut или Genkernel.
При генерации initramfs genkernel’ом, весь файла ~ 13mb
При генерации initramfs dracut’ом, весь файла ~ 32mb

И следующий вопрос:
На десктопе стоит генту с шифрованным lvm’ом. Строка в /etc/default/grub - GRUB_CMDLINE_LINUX="ipv6.disable=1 crypt_root=UUID=<цыфарки> root=UUID=<цыфарки> rootfstype=ext4 dolvm quiet"
Пытаюсь аналогично установить на нетбук, граб не видит шифрованный раздел. Я и так и сяк и об косяк…НИКАК! Полез за ответами в гугл, он привёл меня на интересный ман, в котором рекомендации строки загрузчика выглядят так - GRUB_CMDLINE_LINUX="loglevel=4 rd.luks.uuid=<цыфарки> rd.lvm.vg.uuid=<цыфарки> dolvm quiet ipv6.disable=1". В общем я поменял crypt_root на rd.luks.uuid и root на rd.lvm.vg.uuid только после этого граб всё увидел и загрузил систему.

Расскажите в чём разница в параметрах указанных выше?


100% не помню, но у dracut свой набор скриптов для загрузки системы. И соответственно вероятно свой набор параметров для этих своих скриптов.
Вот они кстати https://man7.org/linux/man-pages/man7/dracut.cmdline.7.html

Atlant ★★★★★
()
Последнее исправление: Atlant (всего исправлений: 1)
Ответ на: комментарий от Dodik

хз, по крайней мере меня dracut не подводил после того как я перешел на него. И ещё «genkernel is unmaintained» из https://wiki.gentoo.org/wiki/Genkernel
genkernel - это была чисто gentoo'вская версия. Как и в других дистрибутивах были свои. А dracut по сути мультидистрибутивный вариант создания ядра.

Atlant ★★★★★
()
Последнее исправление: Atlant (всего исправлений: 1)
Ответ на: комментарий от Dodik

А разница в чём между инструментами?

Очень большая.

genkernel - это комбайн, который собирает ядро, свой оригинальный initramfs со своими скриптами инициализации и параметрами командной строки

dracut - только initramfs со своими скриптами инициализации и параметрами командной строки.

anonymous
()

Не могу сказать в чем их отличии и так далее, но я dracut использую чисто чтобы собрать единое ядро со всеми плюшками чтобы можно было его запустить через uefi, kernel+dracut+luks+btrfs в одном файле которой можно легко подписывать для secure boot

Genkerbel использовал чисто чтобы создать initram

Выводы делай сам

SPRATAY ★★
()

граб всё увидел и загрузил систему.

grub то тут каким боком? Он просто передаёт эти параметры ядру, а скрипты из initramfs их обрабатывают, активируют/монтируют.

А разница в чём между инструментами?

В том, что они разные. У них ничего общего нет, они решают одинаковые задачи, но внутри скрипты разные, опции разные. Ещё есть mkinitcpio (из как-то шевелящихся), а так можно назвать, десяток, а может и больше, брошеных аналогичных генераторов initramfs.

Как уже написали, genkernel изначально для компиляции ядра, у него куча опций с этим связана, и его нужно специально «уговаривать», чтобы он просто initramfs сделал, а не запускал компиляцию ядра.

genkernel, во всяком случае раньше, тащил отдельные версии бинарников для initramfs, собирал их. ЕМНИП, его можно было с небольшим трудом заставить компилять, например, другой fsck, с другими опциями, чем в основной системе. Dracut всё берёт из основной системы.

mky ★★★★★
()
Ответ на: комментарий от mky

grub то тут каким боком? Он просто передаёт эти параметры ядру, а скрипты из initramfs их обрабатывают, активируют/монтируют.

Я так понял, что это был вопрос и ответ сразу же?
В моём случае GRUB_CMDLINE_LINUX передаёт параметры - выключи шестой IP, уид криптованного раздела, уид точки рут, тип ФС точки рут, это LVM и загрузи ядро без портянки на весь экран". Исходя их этого уже генерируется initramfs дракутом либо генкернелом. Или я не так понимаю это?

genkernel…нужно специально «уговаривать», чтобы он просто initramfs сделал, а не запускал компиляцию ядра.

А в чём проблема написать genkernel --luks --lvm initramfs, вместо genkernel --luks --lvm all?

Dodik
() автор топика
Последнее исправление: Dodik (всего исправлений: 1)
Ответ на: комментарий от SPRATAY

dracut…чтобы собрать единое ядро со всеми плюшками

Ёлы-палы! Я может сейчас глупость сморозю, но с твоих слов dracut запаковал всё в initramfs? То есть и ядро тоже?

dodik@genbook ~ $ ls -l /boot/
total 106679
drwxr-xr-x 3 root root      512 Apr 23 20:34 EFI
-rwxr-xr-x 1 root root 10962160 Apr 24 09:04 System.map-6.12.21-gentoo-dist
-rwxr-xr-x 1 root root 10962160 Apr 23 18:03 System.map-6.12.21-gentoo-dist.old
-rwxr-xr-x 1 root root   148480 Apr 24 12:00 amd-uc.img
-rwxr-xr-x 1 root root   279876 Apr 24 09:04 config-6.12.21-gentoo-dist
-rwxr-xr-x 1 root root   279876 Apr 23 18:03 config-6.12.21-gentoo-dist.old
drwxr-xr-x 5 root root      512 Apr 24 19:20 grub
-rwxr-xr-x 1 root root 33038116 Apr 24 10:51 initramfs-6.12.21-gentoo-dist.img
-rwxr-xr-x 1 root root 12968116 Apr 24 08:17 initramfs-6.12.21-gentoo-dist.img.old
drwxr-xr-x 2 root root      512 Apr 23 15:09 lost+found
-rwxr-xr-x 1 root root 20298736 Apr 24 09:04 vmlinuz-6.12.21-gentoo-dist
-rwxr-xr-x 1 root root 20298736 Apr 23 18:03 vmlinuz-6.12.21-gentoo-dist.old

То, что с пометочкой .old на конце, было собрано genkernel’ом, а остальное - dracut’ом. То есть моё удивление по поводу размера initramfs - это получается 13мб init + 20мб ядро = 33мб initrams. Я правильно понял?

Dodik
() автор топика
Ответ на: комментарий от Dodik

Нет, неправильно.

Основной объём инитрд - находящиеся в нём модули. Что уж проще, загляни в него и увидишь, чем занято место.

andytux ★★★★★
()
Последнее исправление: andytux (всего исправлений: 1)

При генерации initramfs genkernel’ом, весь файла ~ 13mb При генерации initramfs dracut’ом, весь файла ~ 32mb

На счет размеров.

Genkernel необходимые пакеты пересобирает со своими настройками для уменьшения размера и количества зависимостей, чтобы не копировать системные. Например, lvm.

Dracut собирает из уже установленных в системе с зависимостями.

anonymous
()
Ответ на: комментарий от anonymous

Я полюбопытствовал в сети и пришёл к выводу, что бОльшая часть топит за дракут, но моя политика в плане экономии места - это наxер с пляжу этот дракут! Нифига себе, в два с половиной раза весомее инитрам собирает.

Dodik
() автор топика
Ответ на: комментарий от Dodik

Dracut имеет настройки (системные, по умолчанию), которые пихают почти всё подряд в initramfs: модули ядра, программы и so’шки, конфиги и прочее. Например, он запихивал lvm и модули md, dm, когда я не использовал lvm.

anonymous
()
Ответ на: комментарий от anonymous

Там даже документация есть, что уж говорить про интернет :) Правда, местами не очень детальная, но конкретно на этот вопрос вроде отвечает.

anonymous
()
Ответ на: комментарий от Dodik

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

Тут я выкинул systemd

SPRATAY ★★
()
Последнее исправление: SPRATAY (всего исправлений: 1)
Ответ на: комментарий от Dodik

Ёлы-палы! Я может сейчас глупость сморозю, но с твоих слов dracut запаковал всё в initramfs? То есть и ядро тоже?

Хз как он пакует, там очень много нюансов с сборкой единого ядра(например в генту нужно выставить нужные флаги для пакетов чтобы такое чудо получилось)

dracut это пылесос зависимостей например у меня установлен zfs, я хотел его чисто потестить, а dracut сразу его запихал в новый единый образ

Плюс учитывай что он может использовать другое сжатие как поменять на максимальный я хз

А так man есть, я лично не доверяю ему параметры запуска и сделал так чтобы я указывал вручную

SPRATAY ★★
()
Ответ на: комментарий от Dodik

Исходя их этого уже генерируется initramfs дракутом либо генкернелом.

Не знаю, может что поменялось, но раньше такого точно не было. Какие «модули» genkernel/dracut засунут в initramfs выбиралось отдельно. То есть, допустим dracut генерит initramfs, посмотрел, что в системе используется LUKS и засунул соотв. код (модуль) в initramfs. Груб загрузил этот initramfs и ядро, запустил ядро, ядро начало выполнять код initramfs. Там код смотрит, передали rd.luks.uuid= или нет. Если передали, пытается что-то смонтировать, если нет, то не пытается. grub просто передаёт эти параметры, он вобще не знает какой код лежит в initramfs и что эти параметры значат.

написать genkernel --luks --lvm initramfs

ЕМНИП, он может всё равно полезть в /usr/src/linux, проверять что там есть скомпилированное ядро.

И ещё раз повторю «genkernel изначально», не надо игнорировать куски предложения. Подобные проекты, с кучей настроек, меняющихся от версии к версии, сложно сравнивать. Один с 2008 года, другой, с 2002? года много раз переписывались.

dracut запаковал всё в initramfs?

dracut, вроде, может initramfs запаковать в ядро, а не наоборот. Вобще, initramfs же можно распаковать, будут обычные каталоги/файлы, там можете посомтреть/посравнивать что внутри.

mky ★★★★★
()