Итак, у меня проблема с Fedora 34. Точнее, у меня проблема с специально созданный образ это часть услуг, которые мы предоставляем.
Эта проблема
Проблема связана с initramfs. Смотрите, мы использовали initrd до сих пор, но количество пакетов и двоичных файлов увеличилось с момента нашего последнего обновления с Fedora 32 до Fedora 34. Без ручного добавления новых пакетов количество базовых пакетов, пакетов выпуска и зависимостей теперь увеличилось до такой степени, что initrd стал больше 500 МБ.
Размер этого initrd делает этот образ очень нестабильным: устаревший PXE, например, не работает, потому что этот образ слишком велик для TFTP и зависает в большинстве сетей. Однако самая большая и самая важная проблема, с которой мы столкнулись, заключается в том, что GRUB2 больше не позволяет этому initrd загружаться, в основном на ноутбуках HP. Всякий раз, когда мы возвращаемся к Fedora 32, изображения кажутся более стабильными. Мы думаем, это из-за того, что initrd здесь меньше. Образы Fedora Workstation (34) по умолчанию также работают в системах, где наш пользовательский образ вызывает панику ядра.
В нашем изображении используется /vmlinuz
и /initrd
файл для загрузки на RAMDisk с использованием USB (GRUB2) или PXE (iPXE). Это задумано: наше приложение представляет собой интегрированный веб-браузер киоска на основе Chromium, работающий на Fedora (34). Он должен быть изменчивым и без гражданства.
Initramfs
я искал initramfs в качестве замены initrd, так как он намного новее, намного легче, а размер этого файла может не вызывать каких-либо ошибок в GRUB2. Возможно, это также позволит нам использовать устаревшие реализации PXE, такие как PXELINUX и Службы развертывания Windows. Я подумал, что могу легко заменить использование КПИО + XZ с Дракут. Но я застрял на проблеме, которую я действительно не могу обернуть вокруг...
Парадокс
Заменить initrd на initramfs в GRUB2 не так уж сложно. Если я использую одно и то же имя для обоих файлов (не одновременно), он будет искать имя файла в конфигурации и найдет файл. Легко, верно? Но затем всплывают сообщения ядра, и он не загружается, читая что-то вроде: Не удалось переключить корень: указанный корневой путь коммутатора /sysroot не является деревом ОС. файл os-release отсутствует.
Излишне говорить, что я проверил содержимое /sysroot
: пустой. Должен быть ОС-релиз
файл в /и т.д
. Читая «Sysroot», он должен монтировать структуру каталогов ОС, поэтому, вероятно, он говорит мне, что в нем отсутствуют некоторые файлы.
системный корень
Вот где я заблудился: структура каталогов находится внутри initramfs, верно? Но чтобы запустить initramfs через GRUB2, мне нужно смонтировать структуру каталогов в Sysroot. Это означает, что я могу достичь только /sysroot
изнутри initramfs. Но я не могу смонтировать initramfs, потому что мне нужен файл выпуска ОС в /sysroot
. Я также не могу смонтировать каталоги внутри initramfs, потому что это файл образа. Вы видите мой парадокс? Как я должен монтироваться /sysroot
, когда для этого требуется что-то внутри initramfs
сам? я уже пробовала корень=
параметр ядра с ПАРТУИД или же ЭТИКЕТКА, но я не могу использовать UUID так как это vFAT поверх UEFI.
Я что-то пропустил здесь? Должен ли я вообще использовать initramfs при использовании загрузочных USB RAMDisks? Если нет, следует ли мне разбить initrd на несколько файлов? Как мне это сделать?
ПРИМЕЧАНИЕ: Мы уже используем максимально возможное сжатие (уровень XZ 9). Я пытался разбить initrd раньше, но не смог сделать это должным образом.
Лично я не люблю просить о помощи, но когда все результаты поиска Google окрашены в фиолетовый цвет, мне может понадобиться подсказка в правильном направлении. Многие системы не работают после нашего обновления до F:34, и я бы очень хотел, чтобы это было исправлено. Кто-нибудь знает, как правильно использовать Dracut? Кто-нибудь имеет опыт создания образов initramfs? Почему мой /sysroot
еще не смонтирован?
Помощь очень ценится, спасибо.