Другое

Почему зависает загрузка 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 образе.

Содержание

Анализ проблемы зависания загрузки

Из ваших описаний и результатов исследования можно выделить несколько ключевых факторов, вызывающих зависание системы на этапе загрузки ядра. Проблема комплексная и связана с взаимодействием нескольких компонентов:

  1. Метод загрузки через iPXE: iPXE использует собственный механизм загрузки, который отличается от стандартного PXE или загрузки с физического диска
  2. Особенности Parted Magic: Эта утилита имеет специфические требования к загрузке, особенно к работе с файлом .SQFS
  3. Конфигурация initrd.img: Скрипты внутри initrd должны корректно обрабатывать разные сценарии загрузки
  4. Структура ISO образа: Правильная организация файлов критически важна для успешной загрузки

Исследования показывают, что многие пользователи сталкиваются с аналогичными проблемами при загрузке Linux-ядер через iPXE в режиме UEFI, где система часто зависает сразу после загрузки ядра.

Основные причины зависания на этапе загрузки ядра

Исходя из вашего вывода и анализа журнала загрузки, зависание происходит на самом последнем этапе - после распаковки ядра Linux. Это указывает на несколько возможных причин:

1. Проблемы с передачей параметров ядра

В вашем случае система успешно загружает:

  • /pmagic/bzImage
  • /pmagic/initrd.img
  • Выполняет распаковку ядра
  • Но зависает непосредственно перед передачей управления ядру

Это типичная ситуация, когда параметры ядра (kernel parameters) не передаются корректно. В частности, для Parted Magic критически важны параметры:

  • boot=live
  • nomodeset
  • Правильные пути к файлам .SQFS

2. Отсутствие необходимых файлов .SQFS

Как вы обнаружили, отдельно загруженный pmagic не находит файлы в директории pmodules. Это подтверждается в дискуссиях на форумах, где пользователи сталкиваются с ошибками:

mount /dev/loop252 failed to find superblock fu.sqfs failed to mount

3. Конфликт методов загрузки

Вы правильно отметили проблему конфликта между:

  • Загрузкой через memdisk (которая изолирует ISO образ)
  • Прямой загрузкой ядра (которая требует наличия всех файлов в доступных путях)

Конфликт между memdisk и прямым запуском ядра

Особенности memdisk загрузки

Memdisk загружает весь ISO образ в память и предоставляет его через виртуальный диск. Однако у этого метода есть серьезные ограничения:

  1. 32-битное адресное пространство: Как указано в решениях FOG Project, memdisk имеет ограничения по размеру из-за 32-битной адресации
  2. Изоляция ISO: При использовании memdisk система работает с изолированным образом, что может вызывать проблемы с доступом к файлам
  3. Некорректная загрузка основного ядра: Вы обнаружили, что вместо memdisk начинает загружаться другое ядро, что приводит к потере доступа к ISO

Проблемы прямого запуска ядра

При прямом запуске ядра через iPXE возникают другие сложности:

  1. Необходимость передачи всех файлов: Ядро и initrd должны иметь доступ ко всем необходимым файлам, включая .SQFS
  2. Конфигурация initrd: Скрипты внутри initrd должны корректно обрабатывать сценарий без memdisk
  3. Пути к файлам: Все пути должны быть правильно настроены для работы в среде iPXE

Важно: Как отмечено в документации Parted Magic, существуют два основных метода загрузки: полный загрузочный образ в память или загрузка только ядра и базовых RAM-дисков с последующей загрузкой основных файлов из сети.


Проблемы с файлами .SQFS и pmodules

Структура .SQFS файлов

.SQFS (SquashFS) - это сжатая файловая система, используемая в Parted Magic для компактного хранения основной системы. Проблемы с этими файлами являются одной из основных причин неудачной загрузки:

  1. Отсутствие в initrd: Как вы обнаружили, стандартный initrd не содержит .SQFS файлов
  2. Неправильные пути: Система не может найти .SQFS файлы в директории pmodules
  3. Размер и формат: Файлы .SQFS имеют специфический формат, требующий правильной обработки

Решения с .SQFS файлами

Исследования показывают несколько подходов к решению проблем с .SQFS:

  1. Включение в initrd: Вы успешно использовали этот метод, добавив .SQFS файлы в initrd
  2. Корректировка путей: Необходимо правильно настроить пути в конфигурации загрузки
  3. Использование 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. Оптимальная стратегия загрузки

Исходя из вашего исследования и опыта других пользователей, рекомендуется следующий подход:

  1. Использовать прямой запуск ядра вместо memdisk для лучшей совместимости
  2. Модифицировать initrd для включения необходимых .SQFS файлов
  3. Правильно настроить параметры загрузки ядра

2. Конфигурация iPXE скрипта

Для решения вашей проблемы необходимо проверить и настроить iPXE скрипт:

bash
#!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: Анализ текущей конфигурации

  1. Проверьте текущий iPXE скрипт загрузки
  2. Убедитесь, что все необходимые файлы доступны по HTTP
  3. Проверьте права доступа к файлам на сервере

Шаг 2: Модификация параметров загрузки ядра

Добавьте в параметры ядра следующие критически важные опции:

boot=live nomodeset edd=off noapic load_ramdisk=1 prompt_ramdisk=0 rw vga=791 sleep=0 loglevel=0 keymap=us

Шаг 3: Корректировка структуры initrd

  1. Распакуйте текущий initrd.img
  2. Найдите и модифицируйте скрипты монтирования
  3. Убедитесь, что скрипты корректно обрабатывают сценарий без memdisk
  4. Добавьте необходимые .SQFS файлы в initrd

Шаг 4: Тестирование и отладка

  1. Загрузите систему с модифицированным образом
  2. Если зависание сохраняется, попробуйте добавить параметры отладки:
    loglevel=7 debug
    
  3. Проверьте логи загрузки на наличие ошибок монтирования

Совет: Если проблема сохраняется, попробуйте использовать альтернативные методы загрузки Parted Magic, как описано в документации FOG Project.

Источники

  1. iPXE форум - Booting Linux kernel under UEFI hangs immediately after download
  2. FOG Project - Successfully booting Parted Magic
  3. Parted Magic LLC - PXE Boot Documentation
  4. MultiOS-USB GitHub - Unable to locate .SQFS file
  5. FOG Project - Integrating PartedMagic in Fog 1.2.0
  6. Stack Overflow - PXE boot fail with kernel panic

Заключение

Зависание загрузки Pmagic через iPXE на этапе загрузки ядра является комплексной проблемой, вызванной взаимодействием нескольких факторов:

  1. Основная причина - конфликт между методом загрузки через memdisk и прямым запуском ядра, а также проблемы с доступом к файлам .SQFS
  2. Ключевое решение - модификация initrd.img для включения необходимых .SQFS файлов и корректной обработки загрузки без memdisk
  3. Важный аспект - правильная настройка параметров загрузки ядра, особенно boot=live и nomodeset

Для достижения стабильной работы обоих вариантов загрузки в одном ISO образе рекомендуется:

  • Использовать метод прямого запуска ядра как основной
  • Модифицировать initrd для гибкой обработки разных сценариев
  • Тщательно тестировать каждый этап загрузки
  • Добавлять параметры отладки для диагностики проблем

Система должна корректно обрабатывать как загрузку через memdisk, так и прямой запуск ядра, с динамическим поиском необходимых файлов в зависимости от метода загрузки.

Авторы
Проверено модерацией
Модерация