LINUX.ORG.RU

К вопросу об initrd/initramfs

 ,


0

1

Пишу это сообщение, теряя остатки разума.. Вначале был консольный buster-дебиан со стандартным ядром 4.19.0-8 и при установке initrd был выбран под текущую систему (его размер 7.3M). Скачено было только то, что нужно для сборки ядра и питон для работы diffconfig. Затем было собрано ядро 5.4.25 с кастомным конфигом (НЮАНС: алгоритмы сжатия ядра и инитрама - lzma). Далее установил его совместно с initrd без лишних фантазий через

make install
(разумеется с предварительным modules_install). На текущем этапе initrd.img-5.4.25 весил около 12M. Но по дефолту было сжато gzip'ом. Поэтому было перепаковано lzma -> объём 9M. Данное ядро было протестировано-все было ажурно.

Затем хаос и магия поглотили маленький цифровой мирок

  • 1. Установил gdm3 и gnome-terminal
  • 2. Перезапустил и словил ошибку, что initramfs ВНЕЗАПНО не lzma! «Подозрительно», - подумал я, поскреб бороду и перезапустил систему.
  • 3. Загрузился под «дефолтным» ядром, посмотрел на initrd... что-то сломалось внутри меня-размер вырос до 60M!!! Ожидаемо файл был в формате gzip (все указывает на то, что отработал update-initramfs/mkinitramfs).
  • 4. Уже, практически машинально, перепаковал его в lzma -9 (объём уменьшился до 56M)
  • 5. Загрузился под 5ым ядром-все работает, только с какого так раскукожило initrd??

Руководствуясь статьёй https://www.ylsoftware.com/news/469 заменил MODULES=most на MODULES=list.

В результате расследования было установлено, update-initramfs имел ввиду переменную MODULES из initramfs.conf, потому что она переопределяется (и, разумеется, нигде об этом ни единового упоминания) в файле driver-policy

Также туда было добавлено COMPRESS=lzma

Ранее по суеверным соображениям не делал этого. На предыдущей системе были баги

В том числе, был подправлен mkinitramfs (установлена степень сжатия -9) Короче объём закономерно снизился на копейки (до 53M) Что я там только не вырезал из modules-размер менялся по мелочи.

Описал все действия для протокола (даже те, которые, уверен, абсолютно незначительны). Просто gdm сильный и независимый - захотел и что-то своё впендюрил в initrd. Природная брезгливость останавливает меня от ковыряния в этой наваленной куче, но... но что произошло? и как вернуть все взад назад? и есть ли в принципе рабочее руководство по уменьшению initrd (которое, возможно, пропустил)?

Просто gdm сильный и независимый - захотел и что-то своё впендюрил в initrd

а, gnome. Вообще ни разу не удивлен, у них весь софт сильный и независимый. Flatpak тащит гигабайтные «рантаймы» с кучей ненужного и оставляет тонны мусора даже после удаления, каждая программа с поддержкой xdg-mime считает своим долгом назначить себя открывать все что можно и прописаться в автозапуск, абсолютно все их dbus-спеки - жуткий оверинжиниринг.

Тем временем в арче без gdm:

$ du -h /boot/initramfs-linux.img
9,5M	/boot/initramfs-linux.img
$ file /boot/initramfs-linux.img
/boot/initramfs-linux.img: gzip compressed data, from Unix, original size modulo 2^32 25753600
Lrrr ★★ ()

Initramfs - это вполне самостоятельная (live-)система, которая запускает твою основную. Там не только драйвера, но и программы, утилиты и тд и тп.

Многие пакеты при установке также обновляют initramfs и записывают свои части. Так-что самодельный initramfs - это бессмыслица в дистрибутивах.

Если у тебя dracut, то содержимое можно посмотреть lsinitrd. Упрощенно, cpio-архив, запакованный компрессором - gzip или другим.

anonymous ()

IMHO, для генерации initramfs в Debian используются пакеты initramfs-tools и initramfs-tools-core. Глянь список файлов (скриптов), которые они устанавливают, почитай маны, которые устанавливаются этими пакетами и с помощью файлов конфигурации можно уменьшить количество барахла, которое засовывается в initramfs.

Базовые знания можно почерпнуть в этой статье.

Про уменьшение размера initramfs неплохо расписано в Arch Wiki.

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

Знаком со структурой, спасибо) можно ещё добавить, что там до начала архива вставлен микрокод. И что из-за того же dracut этот архив безобразным образом склеивается из нескольких: сначала собранный dracut, а затем добавляется от update-initramfs. К слову, в dracut'овском initrd много лишнего для меня (загрузка по сети, рейд и проч). Это, конечно, мощный и красивый инструмент, но для меня он чересчур избыточен (а если потом ещё и из dracut'а надо выпиливать, то получается организация дополнительных проблем самому себе). Да и в принципе, как написал Mixa, в Debian'е все делается с помощью initramfs-tools. Так зачем ставить лишнее?

Моё ядро и initrd были универсальными (для моих целей, разумеется) - в совокупности с системой, установленной через debootstrap (и закаченным через apt минимумом). И мне совсем не улыбается таскать за собой раздутый initrd. И можно было бы сделать так, чтобы всё было в ядре, но, подозреваю, что в ближайшее время придётся добавлять туда модули. Особо въедливый форумчанен мог бы заметить-выпускай новые модули в качестве dep-пакетов, но это бы усложнило процесс установки, да и обновления.

А советы от Mixa весьма общие) В результате недельной борьбы с размером initrd и курения мануалов, родилась данная тема. За ссылки-спасибо, но они тоже общего характера-как выпиливать пакеты из initrd (концепция и так понятна). Главный вопрос только один - что добавилось туда лишнее (от gdm)?. Не выпиливать же по пакету из него, пока система не сдохнет - это займет кучу времени (такой методикой собиралось 5ое ядро, поэтому не хотелось бы страдать снова).

Вопрос для меня по-прежнему открыт, поэтому с радостью жду ваших комментариев! Всем, кто неравнодушен к моей проблеме-большое спасибо

Half-Lambda ()
Ответ на: комментарий от Half-Lambda

что добавилось туда лишнее (от gdm)?

Берешь и смотришь lsinitrd свой самодельный initrd.img и сгенеренный системой после установки gdm.

Я не пользователь debian, но могу предположить, что он туда запихал systemd (куда ж без него родимого), все возможные драйвера для видео intel, amd, nvidia, включая установенные тобой блобы, и еще много чего разного по зависимостям.

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

Закономерный совет, только нету больше того голенького initrd.. поэтому не с чем сравнивать. Только если сносить систему, ставить заново и запускать сборку ядра. А все драйвера, типо amd и nvidea выпилены в файле конфигурации .config. Поэтому их нет

Да и в принципе, Вы перечислили все то, что и так бы вошло в состав initrd без установки gdm3

Half-Lambda ()
Ответ на: комментарий от Half-Lambda

А все драйвера, типо amd и nvidea выпилены в файле конфигурации .config. Поэтому их нет

Дистру фиолетовы твои конфиги, он устанавливает в соответствии со своими соображениями.

В виду того, что принципиально не хочешь объективно смотреть на вещи, а именно посмотреть хотя бы что есть initrd, собранной системой, говорить не о чем. Продожай наблюдение, нам это очень важно.

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

А просмотреть *.conf файлы, которые mkinitramfs и update-initramfs обрабатывают слабо?

Попробуй заюзать tiny-initramfs.

Или напиши свой скрипт для генерации initramfs (мануалов в Гугле валом).

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

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

короче, этих драйверов там в помине нет-я накатывал все по-минималке,и он драйвера тащит из /lib/modules/$(uname -r) и /lib/firmwares При чем здесь вообще моя объективность? Наверное, я не просто так говорю про содержимое initrd и догадался посмотреть? Или похоже, что у меня принципиальная позиция не трогать его? Странные умозаключения Я писал, что список включенных в initrd файлов не внес ясности в происходящее: дров лишних нет, есть куча либ и прочего хлама, который не могу дифференцировать, из etc пару скриптов. Если бы мне было с чем сравнить, этой темы не было бы. А когда нет каких-то небанальных предложений, то действительно говорить не о чем. Советы [qoute]посмотреть хотя бы что есть initrd, [qoute]Глянь список файлов (скриптов)[/qoute], [qoute]почитай маны[/qoute], погугли - несут столько же информации, как и комментарии «первый нах»

А тебе, особенный человек Mixa, ещё раз, дополнительно, сообщаю то, что я писал ранее-

update-initramfs имел ввиду переменную MODULES из initramfs.conf, потому что она переопределяется (и, разумеется, нигде об этом ни единового упоминания) в файле driver-policy

Перечитывай до тех пор, пока не станет ясно, что все конфиги для mkinitramfs и update-initramfs я уже исследовал. Оказалось не слабо.

Я понимаю, что хочется поумничать... но если не заглядывала в голову мысль, что человек, который заморачивается с пересборкой ядра и содержимым initrd вряд ли из тех, кто любит готовенькое, то у меня для тебя печальные новости. Вот тебе буквы 'д','у','а','р','о','ч','к', собери из них слово «молодец»

Half-Lambda ()
Ответ на: комментарий от Half-Lambda

ха-ха

особенный человек Mixa

он просто тут недавно, всё ещё думает что можно помочь ТС-ам… ничего со временем и это пройдёт… я-то знаю, что это невозможно по объективным причинам.

к тебе только один вопрос. как назвать человека который, оптимизирует «раздутый системный *» так что его оптимальный * почти в 10 раз больше «раздутого системного *». не делает бекапов, ведь в мануале из интернетов обещали, что всё будет пучком. мне просто интересна твоя оценка подобного сферического героя.

anonymous ()
Ответ на: ха-ха от anonymous

бэкапы делал на каждом независимом шаге (у меня система на слабом носителе, да и к делу это не относится). Инфа о том, что установка gdm может повлечь за собой «раздутие» initrd для меня неочевидна.

к тебе только один вопрос. как назвать анонимуса, который ничего по существу не говорит и только токсичит. Подозреваю, каждый был бы рад таким советам все советы которого свелись к банальным ну ты «посмотри» и «сравни». Думаю, с таким же успехом он может быть специалистом в любой области:

  • Как приготовить стейк? - Приготовь стейк
  • Как построить дом? - Построй дом
  • Как вылечить коронавирус? Вылечи коронавирус (можно написать в мин здравоохранения, уверен, им поможет)...

мне просто интересна твоя оценка такого персонажа.

Я бы посоветовал такому человеку сначала хорошенько испражниться в туалете, а потом уже писать комментарии, возможно будут меньше вонять

Half-Lambda ()

НЮАНС: алгоритмы сжатия ядра и инитрама - lzma

С какой целью? Я на своей системе проверял скорость распаковки сжатого ядра в tmpfs со сброшенным кэшем, получилось, что быстрее всего работает lz4, хотя у него самый большой архив и по-идее читаться он должен дольше

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

А теперь залей это на флешку и загрузись на системе через USB2.0

Степень и алгоритм сжатия в данной ситуации не критичны. Проблема в содержимом initrd Вопрос был о том, как влияет gdm на initrd. И как уменьшить его объём без ущерба работоспособности системы

Half-Lambda ()