Как извлечь и переупаковать исходный 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 обратитесь к специальным руководствам для этих версий.
Создайте временный рабочий каталог. Сначала создайте временный каталог и переключитесь в него. Это будет место, где содержимое initrd будет просматриваться, редактироваться и при необходимости повторно сжиматься.
$ mkdir /tmp/initrd $ cd /tmp/initrd
-
Определите формат сжатия. Используйте команду
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
Извлеките файл initrd. В зависимости от указанного формата используйте соответствующие команды для извлечения содержимого. Для данных, сжатых gzip:
# zcat /boot/initrd-$(uname -r).img | cpio -idmv
Для данных, сжатых LZMA:
# xz -dc < /boot/initrd-$(uname -r).img | cpio -idmv
Изменить извлеченное содержимое. После извлечения содержимого вы можете изменить его по мере необходимости. Это может включать добавление новых драйверов, сценариев или файлов конфигурации. Например, чтобы добавить новый модуль ядра, вам может потребоваться создать необходимые каталоги и разместить там свои файлы:
# mkdir -p ./lib/modules/$(uname -r) # cp /path/to/module.ko ./lib/modules/$(uname -r)/
Убедитесь, что любые внесенные изменения сохраняют правильные разрешения и файловую структуру.
Переупаковать файл 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
Обновите конфигурацию загрузчика. Наконец, обновите конфигурацию загрузчика, чтобы использовать новый файл initrd.
# update-grub
Эта команда извлекает содержимое образа initrd в текущий каталог, сохраняя структуру файла и разрешения.
СРАВНЕНИЕ ЗАГРУЗОЧНЫХ ФАЙЛОВ: INITRD.IMG И INITRAMFS.IMG
initrd.img
и initramfs.img
используются во время процесса загрузки Linux для предоставления исходной корневой файловой системы, но они существенно различаются по своей реализации и использованию. initrd.img
, сокращение от «начальный RAM-диск», — это более старый формат, использующий образ файловой системы, требующий устройства обратной связи для монтирования и обычно содержащий минимальную файловую систему с необходимыми драйверами и исполняемыми файлами. Напротив, initramfs.img
, или «начальная файловая система ОЗУ», представляет собой более современный подход, использующий сжатый архив cpio, который ядро непосредственно распаковывает во временную файловую систему в памяти. Этот метод не требует устройства обратной связи и обеспечивает большую гибкость и простоту, что делает initramfs.img
предпочтительным выбором в большинстве современных дистрибутивов Linux.
Эта команда создает новый образ initrd из измененного содержимого и сжимает его в соответствующем формате.
Эта команда обновляет конфигурацию загрузчика GRUB, включая новый файл initrd, гарантируя, что он будет использоваться при следующей загрузке системы.
Заключение
Выполнив эти шаги, вы сможете успешно извлечь, изменить и переупаковать файл initrd в более старой системе Linux. Этот процесс может быть особенно полезен для настройки процесса загрузки, добавления новых драйверов или устранения проблем, связанных с загрузкой. Всегда убедитесь, что у вас есть резервная копия исходного файла initrd и вы понимаете вносимые вами изменения, чтобы избежать возможных сбоев при загрузке.