[РЕШЕНО]Чем лучше сжимать ядро и инитрамфс?

vasek
Возможно мое представление и ошибочно ...
GRUB (или др.) загружает в память ядро и initram. У него же это в параметрах прописано.
Потом запускается ядро и разжимает при необходимости. Вот только надо уточнить как идет этот процесс. Грубо говоря монтированием сжатой фс или полной распаковкой.
Lupus pilum mutat, non mentem.
vasek
Когда то занимался в качестве ликбеза ...... но это занимало несколько часов ..... и считаю это ловлей блох и не нужным занятием.
Оо ну если неск часов то лучше не стоит имхо... а про ловлю блох енто ты зря, при чем я собираю пф-ядро на котором указываю какие шедуллеры ставить на и/о и на проц...
jim945
...Потом запускается ядро и разжимает при необходимости. Вот только надо уточнить как идет этот процесс. Грубо говоря монтированием сжатой фс или полной распаковкой.
Давно хотел покапаться в первоисточниках о всех тонкостях загрузки, а не в общем, которые везде расписаны ….... но руки так и не дошли — как то пропал интерес ко всему этому … больше интересовало как что то изменить в этих образах ручками, без всякой пересборки ... но сейчас и этот интерес пропал ...
PS ... jim945, верно подметил о загрузчиках ...... это я выпустил из внимания ...
Ошибки не исчезают с опытом - они просто умнеют
vasek
Когда загружается ядро, оно сразу же инициализирует и конфигурирует память и настраивает различное подключённое к системе оборудование, включая и подсистемы ввода-вывода и устройства хранения данных. И только после всего этого ….... ищет сжатый образ initrd (initramfs) в заранее определённом участке памяти и распаковывает его.
Возможно мое представление и ошибочно ...
Да, это представление ошибочно. Образ initrd для того и нужен, чтобы ядро могло вызывать некоторые программы, утилиты и модули до монтирования файловых систем, это бывает нужно, когда ядро не в состоянии примонтировать нужные фс само, а без этого монтирования не может загрузить нужные модули (замкнутый круг). Говоря простым языком, временно монтируется корневой раздел, который находится в оперативной памяти (init ram fs - файловая система в ОЗУ для инициализации) И как говорили выше, образ initrd ищет и загружает не ядро а загрузчик.

Ну и в монолитных ядрах, где нужные драйвера жестко вкомпилированы в ядро, прекрасно обходятся без initramfs.
heider, … я хотел донести мысль, что процессы считывания initrd и распаковки разнесены по времени ….... (а вот так ли это на самом деле - я полностью не уверен) ... Initrd связан с ядром и загружается как часть ядра в процессе загрузки системы и образ размещается по определенному адресу в памяти ….. а вот дальше вопросы ... и подробностей описания этого в инете не встречал — одни общие слова
И скажу сразу …..... я здесь чайник, спорить и что то доказывать, не разбираясь в этом, я не собираюсь .... просто впитываю информацию от спецов, читая этот топик.
PS ... Буду признателен за подробное толкование загрузки системы ........ или ссылку на документацию ...
Ошибки не исчезают с опытом - они просто умнеют
heider
Ну и в монолитных ядрах, где нужные драйвера жестко вкомпилированы в ядро, прекрасно обходятся без initramfs.
кстати я хз как делаются монолитные ядра, ибо звездочки не везде можно в конфигурации поставить, есть пункты которые только модуль позволяют ставить...
Содержимое initramfs делается путем создания cpio-архива. cpio — это старое (но проверенное) решение для архивирования файлов (архивы, получаемые в результате его работы называются cpio-архивы). Безусловно cpio можно сравнить с tar архиватором. Здесь cpio был выбран потому, что проще создать (с программной точки зрения) и поддерживать (на то время) файлы устройств (тогда как tar этого не мог).

Все файлы, инструменты, библиотеки, настройки конфигурации (если они применимы), и т.д. помещаются в cpio-архив. Этот архив затем сжимается с использованием утилиты gzip и сохраняется в том же месте, что и ядро Linux. Далее, загрузчик передаст его ядру Linux во время загрузки, чтобы ядро знало о том, что требуется initramfs.

При его обнаружении, ядро Linux создаст файловую систему tmpfs, извлечет на нее содержимое архива и затем запустит сценарий init, расположенный в корневом каталоге файловой системы tmpfs. Этот сценарий затем примонтирует действительную корневую файловую систему (после того, как убедится, что он может ее примонтировать, например, с помощью загрузки дополнительных модулей, подготовки уровней абстракции шифрования, и т.д.), также как и другие существенно важные файловые системы (такие как /usr и /var).
https://wiki.gentoo.org/wiki/Initramfs/Guide/ru
Lupus pilum mutat, non mentem.
safocl
кстати я хз как делаются монолитные ядра, ибо звездочки не везде можно в конфигурации поставить, есть пункты которые только модуль позволяют ставить...
В менюконфиг Enable loadable module support "да" - модульное ядро, "нет" - монолитное. Если выбрать монолитное, далее в конфиге ни в одном пункте невозможно будет выбрать "M". Очевидно, что пункты менюконфиг, позволяющие ставить только модуль, например поддержка устройств, для которых существуют лишь проприетарные драйвера, вообще исчезнут из менюконфиг.

Можно собрать и модульное ядро, просто необходимые для подключения корневого раздела драйвера жестко вкомпилировать в ядро, тогда тоже можно будет обойтись без initramfs. На десктопе ядро разумнее делать всегда модульным, Вы же заранее не знаете, что Вам придется втыкать в USB, и какой для этого устройства понадобится драйвер.
heider
Можно собрать и модульное ядро, просто необходимые для подключения корневого раздела драйвера жестко вкомпилировать в ядро
я всегда так делаю
 
Зарегистрироваться или войдите чтобы оставить сообщение.