Поиск по сайту:

Как извлечь и переупаковать исходный RAM-диск (initrd)


Начальный RAM-диск (initrd) и начальная файловая система RAM (initramfs) являются важными компонентами процесса загрузки Linux. Они содержат временную корневую файловую систему, загружаемую в память при загрузке системы, что позволяет ядру загружать необходимые драйверы и модули до того, как фактическая корневая файловая система станет доступной. Хотя initrd.img и initramfs.img служат схожим целям, initramfs является преемником initrd и использует более гибкий формат. В этом руководстве вы узнаете, как извлечь, изменить и переупаковать initrd, что может быть полезно для устранения неполадок, настройки процесса загрузки или добавления новых драйверов. Обратите внимание, что это относится к более старым системам, а не только к старым версиям RHEL.

В этом уроке вы узнаете:

  • Как извлечь содержимое файла initrd
  • Как изменить извлеченное содержимое
  • Как переупаковать измененное содержимое в новый файл initrd

Извлечение и переупаковка initrd

Извлечение и переупаковка файла initrd включает в себя ряд шагов, требующих бережного обращения с файловой системой и используемыми инструментами. Ниже приведены подробные инструкции, которые помогут вам в этом процессе. Обратите внимание, что эти шаги применимы к более старым системам, таким как Red Hat Enterprise Linux 5 и 6, а также к другим старым дистрибутивам Linux. Для RHEL 7 и 8 обратитесь к специальным руководствам для этих версий.

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

    $ mkdir /tmp/initrd
    $ cd /tmp/initrd
  2. Определите формат сжатия. Используйте команду file в initrd, чтобы определить формат сжатия.

    # file /boot/initrd-$(uname -r).img

    Это выведет формат initrd. Например:

    /boot/initrd-2.6.31-653.el6.x86_64.img: gzip compressed data

    Или :

    /boot/initrd-2.6.31-653.el6.x86_64.img: LZMA compressed data
  3. Извлеките файл initrd. В зависимости от указанного формата используйте соответствующие команды для извлечения содержимого. Для данных, сжатых gzip:

    # zcat /boot/initrd-$(uname -r).img | cpio -idmv

    Для данных, сжатых LZMA:

    # xz -dc < /boot/initrd-$(uname -r).img | cpio -idmv
  4. Эта команда извлекает содержимое образа initrd в текущий каталог, сохраняя структуру файла и разрешения.

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

    # mkdir -p ./lib/modules/$(uname -r)
    # cp /path/to/module.ko ./lib/modules/$(uname -r)/

    Убедитесь, что любые внесенные изменения сохраняют правильные разрешения и файловую структуру.

  6. СРАВНЕНИЕ ЗАГРУЗОЧНЫХ ФАЙЛОВ: INITRD.IMG И INITRAMFS.IMG
    initrd.img и initramfs.img используются во время процесса загрузки Linux для предоставления исходной корневой файловой системы, но они существенно различаются по своей реализации и использованию. initrd.img, сокращение от «начальный RAM-диск», — это более старый формат, использующий образ файловой системы, требующий устройства обратной связи для монтирования и обычно содержащий минимальную файловую систему с необходимыми драйверами и исполняемыми файлами. Напротив, initramfs.img, или «начальная файловая система ОЗУ», представляет собой более современный подход, использующий сжатый архив cpio, который ядро непосредственно распаковывает во временную файловую систему в памяти. Этот метод не требует устройства обратной связи и обеспечивает большую гибкость и простоту, что делает initramfs.img предпочтительным выбором в большинстве современных дистрибутивов Linux. 

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

    # find . | cpio -o -c -R root:root | gzip -9 > /boot/new.img

    Для формата LZMA:

    # find . 2>/dev/null | cpio -o -c -R root:root | xz -9 --format=lzma > /boot/new.img
  8. Эта команда создает новый образ initrd из измененного содержимого и сжимает его в соответствующем формате.

  9. Обновите конфигурацию загрузчика. Наконец, обновите конфигурацию загрузчика, чтобы использовать новый файл initrd.

    # update-grub
  10. Эта команда обновляет конфигурацию загрузчика GRUB, включая новый файл initrd, гарантируя, что он будет использоваться при следующей загрузке системы.

Заключение

Выполнив эти шаги, вы сможете успешно извлечь, изменить и переупаковать файл initrd в более старой системе Linux. Этот процесс может быть особенно полезен для настройки процесса загрузки, добавления новых драйверов или устранения проблем, связанных с загрузкой. Всегда убедитесь, что у вас есть резервная копия исходного файла initrd и вы понимаете вносимые вами изменения, чтобы избежать возможных сбоев при загрузке.

Статьи по данной тематике: