Почему зависает загрузка Pmagic через iPXE при использовании модифицированного ISO
Анализ причин зависания загрузки Pmagic через iPXE при использовании модифицированного ISO образа Ultimate Boot CD. Решения проблем с SQFS файлами и конфликтом методов загрузки.
Почему при загрузке модифицированного ISO образа Ultimate Boot CD через iPXE зависает процесс загрузки Pmagic?
Я пытаюсь загрузить Ultimate Boot CD через HTTP (iPXE). Структура ISO образа следующая:
CD
—\boot
-------\grub
-------\isolinux
—\pmagic
-------\boot
------------\syslinux
-------\pmodules
------------pmagic_.sqfs
-------initrd.img
-------bzImage
—\ubcd
-------\boot
-------\tool
-------other files
При загрузке ISO через memdisk с указанием пути к файлу .iso - утилиты запускаются нормально, но основная система Pmagic не работает, так как вместо memdisk начинает загружаться другое ядро и теряется ISO образ.
Я обнаружил место, где происходит сбой загрузки - в скрипте Init файла Initrd.img. В дальнейшем я планирую убрать монтирование ISO из memdisk и реализовать поиск внутри Initrd.
Отдельно pmagic загружается нормально, если извлечь из ISO файлы initrd.img и bzImage (ядро). Однако он не находит файл sqfs, расположенный в соседнем каталоге pmodules. Я пересобрал Initrd.img, добавив в него sqfs, и загрузка отдельно pmagic заработала.
Теперь я хочу создать ISO образ, где бы работали оба варианта. Для этого я использую UltraISO и подставляю свой Initrd.img.
Теоретически, до исправления скрипта Initr в initrd.img, я должен увидеть ту же ошибку с монтированием ISO из memdisk. Однако у меня все ломается иначе: ISO загружается (меню корневого Isolinux работает), но при выборе загрузки Pmagic система зависает на этапе загрузки ядра.
Последние строки вывода:
Loading /pmagic/bzImage
Loading /pmagic/initrd.img… ready
Probing EDD (edd=off to disable)… ok
early console in decompress_kernel
Decompressing Linux… Parsing ELF… done.
Booting the kernel.
И на этом моменте происходит зависание. В чем может быть причина?
Основная проблема зависания загрузки Pmagic через iPXE заключается в конфликте между методом загрузки через memdisk и прямым запуском ядра, а также в особенностях работы с файлами .SQFS и конфигурации initrd.img. Это распространенная проблема, возникающая при попытке совместить разные методы загрузки в одном ISO образе.
Содержание
- Анализ проблемы зависания загрузки
- Основные причины зависания на этапе загрузки ядра
- Конфликт между memdisk и прямым запуском ядра
- Проблемы с файлами .SQFS и pmodules
- Решения и рекомендации по устранению проблемы
- Пошаговая процедура исправления
Анализ проблемы зависания загрузки
Из ваших описаний и результатов исследования можно выделить несколько ключевых факторов, вызывающих зависание системы на этапе загрузки ядра. Проблема комплексная и связана с взаимодействием нескольких компонентов:
- Метод загрузки через iPXE: iPXE использует собственный механизм загрузки, который отличается от стандартного PXE или загрузки с физического диска
- Особенности Parted Magic: Эта утилита имеет специфические требования к загрузке, особенно к работе с файлом .SQFS
- Конфигурация initrd.img: Скрипты внутри initrd должны корректно обрабатывать разные сценарии загрузки
- Структура ISO образа: Правильная организация файлов критически важна для успешной загрузки
Исследования показывают, что многие пользователи сталкиваются с аналогичными проблемами при загрузке Linux-ядер через iPXE в режиме UEFI, где система часто зависает сразу после загрузки ядра.
Основные причины зависания на этапе загрузки ядра
Исходя из вашего вывода и анализа журнала загрузки, зависание происходит на самом последнем этапе - после распаковки ядра Linux. Это указывает на несколько возможных причин:
1. Проблемы с передачей параметров ядра
В вашем случае система успешно загружает:
/pmagic/bzImage/pmagic/initrd.img- Выполняет распаковку ядра
- Но зависает непосредственно перед передачей управления ядру
Это типичная ситуация, когда параметры ядра (kernel parameters) не передаются корректно. В частности, для Parted Magic критически важны параметры:
boot=livenomodeset- Правильные пути к файлам .SQFS
2. Отсутствие необходимых файлов .SQFS
Как вы обнаружили, отдельно загруженный pmagic не находит файлы в директории pmodules. Это подтверждается в дискуссиях на форумах, где пользователи сталкиваются с ошибками:
mount /dev/loop252 failed to find superblock fu.sqfs failed to mount
3. Конфликт методов загрузки
Вы правильно отметили проблему конфликта между:
- Загрузкой через memdisk (которая изолирует ISO образ)
- Прямой загрузкой ядра (которая требует наличия всех файлов в доступных путях)
Конфликт между memdisk и прямым запуском ядра
Особенности memdisk загрузки
Memdisk загружает весь ISO образ в память и предоставляет его через виртуальный диск. Однако у этого метода есть серьезные ограничения:
- 32-битное адресное пространство: Как указано в решениях FOG Project, memdisk имеет ограничения по размеру из-за 32-битной адресации
- Изоляция ISO: При использовании memdisk система работает с изолированным образом, что может вызывать проблемы с доступом к файлам
- Некорректная загрузка основного ядра: Вы обнаружили, что вместо memdisk начинает загружаться другое ядро, что приводит к потере доступа к ISO
Проблемы прямого запуска ядра
При прямом запуске ядра через iPXE возникают другие сложности:
- Необходимость передачи всех файлов: Ядро и initrd должны иметь доступ ко всем необходимым файлам, включая .SQFS
- Конфигурация initrd: Скрипты внутри initrd должны корректно обрабатывать сценарий без memdisk
- Пути к файлам: Все пути должны быть правильно настроены для работы в среде iPXE
Важно: Как отмечено в документации Parted Magic, существуют два основных метода загрузки: полный загрузочный образ в память или загрузка только ядра и базовых RAM-дисков с последующей загрузкой основных файлов из сети.
Проблемы с файлами .SQFS и pmodules
Структура .SQFS файлов
.SQFS (SquashFS) - это сжатая файловая система, используемая в Parted Magic для компактного хранения основной системы. Проблемы с этими файлами являются одной из основных причин неудачной загрузки:
- Отсутствие в initrd: Как вы обнаружили, стандартный initrd не содержит .SQFS файлов
- Неправильные пути: Система не может найти .SQFS файлы в директории pmodules
- Размер и формат: Файлы .SQFS имеют специфический формат, требующий правильной обработки
Решения с .SQFS файлами
Исследования показывают несколько подходов к решению проблем с .SQFS:
- Включение в initrd: Вы успешно использовали этот метод, добавив .SQFS файлы в initrd
- Корректировка путей: Необходимо правильно настроить пути в конфигурации загрузки
- Использование loop-устройств: Система должна корректно монтировать .SQFS через loop-устройства
Пример конфигурации из MultiOS-USB проекта показывает правильную структуру для загрузки Parted Magic:
linux_path="(loop)/pmagic/bzImage" initrd_path="(loop)/pmagic/initrd.img (loop)/pmagic/fu.img (loop)/pmagic/m.img"
Решения и рекомендации по устранению проблемы
1. Оптимальная стратегия загрузки
Исходя из вашего исследования и опыта других пользователей, рекомендуется следующий подход:
- Использовать прямой запуск ядра вместо memdisk для лучшей совместимости
- Модифицировать initrd для включения необходимых .SQFS файлов
- Правильно настроить параметры загрузки ядра
2. Конфигурация iPXE скрипта
Для решения вашей проблемы необходимо проверить и настроить iPXE скрипт:
#!ipxe
kernel http://ваш-сервер/pmagic/bzImage boot=live nomodeset fetch=http://ваш-сервер/pmodules/pmagic_.sqFS
initrd http://ваш-сервер/pmagic/initrd.img
initrd http://ваш-сервер/pmagic/fu.img
initrd http://ваш-сервер/pmagic/m.img
boot
3. Модификация initrd
Вам нужно модифицировать скрипт внутри initrd для:
- Корректной обработки загрузки без memdisk
- Поиска .SQFS файлов в правильных директориях
- Правильной монтирования файловых систем
Важно: Как показывает опыт пользователей FOG Project, критически важно включить правильные
imgargsи параметры загрузки.
Пошаговая процедура исправления
Шаг 1: Анализ текущей конфигурации
- Проверьте текущий iPXE скрипт загрузки
- Убедитесь, что все необходимые файлы доступны по HTTP
- Проверьте права доступа к файлам на сервере
Шаг 2: Модификация параметров загрузки ядра
Добавьте в параметры ядра следующие критически важные опции:
boot=live nomodeset edd=off noapic load_ramdisk=1 prompt_ramdisk=0 rw vga=791 sleep=0 loglevel=0 keymap=us
Шаг 3: Корректировка структуры initrd
- Распакуйте текущий initrd.img
- Найдите и модифицируйте скрипты монтирования
- Убедитесь, что скрипты корректно обрабатывают сценарий без memdisk
- Добавьте необходимые .SQFS файлы в initrd
Шаг 4: Тестирование и отладка
- Загрузите систему с модифицированным образом
- Если зависание сохраняется, попробуйте добавить параметры отладки:
loglevel=7 debug - Проверьте логи загрузки на наличие ошибок монтирования
Совет: Если проблема сохраняется, попробуйте использовать альтернативные методы загрузки Parted Magic, как описано в документации FOG Project.
Источники
- iPXE форум - Booting Linux kernel under UEFI hangs immediately after download
- FOG Project - Successfully booting Parted Magic
- Parted Magic LLC - PXE Boot Documentation
- MultiOS-USB GitHub - Unable to locate .SQFS file
- FOG Project - Integrating PartedMagic in Fog 1.2.0
- Stack Overflow - PXE boot fail with kernel panic
Заключение
Зависание загрузки Pmagic через iPXE на этапе загрузки ядра является комплексной проблемой, вызванной взаимодействием нескольких факторов:
- Основная причина - конфликт между методом загрузки через memdisk и прямым запуском ядра, а также проблемы с доступом к файлам .SQFS
- Ключевое решение - модификация initrd.img для включения необходимых .SQFS файлов и корректной обработки загрузки без memdisk
- Важный аспект - правильная настройка параметров загрузки ядра, особенно
boot=liveиnomodeset
Для достижения стабильной работы обоих вариантов загрузки в одном ISO образе рекомендуется:
- Использовать метод прямого запуска ядра как основной
- Модифицировать initrd для гибкой обработки разных сценариев
- Тщательно тестировать каждый этап загрузки
- Добавлять параметры отладки для диагностики проблем
Система должна корректно обрабатывать как загрузку через memdisk, так и прямой запуск ядра, с динамическим поиском необходимых файлов в зависимости от метода загрузки.