@ Карта сайта News Автора!

Bog BOS: dracut - создание initramfs

Последние изменения:
2024.11.22: sysadmin: systemd-journald (централизованное хранение)
2024.11.11: sysadmin: Linux: пространства имён
2024.11.06: sysadmin: настройка TCP/IP в Linux: виртуальный интерфейс и виртуальный мост
2024.10.25: sysadmin: Linux VFS, атрибуты, расширенные атрибуты, ACL

Последнее изменение файла: 2024.09.19
Скопировано с www.bog.pp.ru: 2024.11.23

Bog BOS: dracut - создание initramfs

dracut - утилита создания initramfs (initial RAM disk image, загружаемый в оперативную память файл с образом файловой системы), используемого при загрузке Linux в качестве первоначальной корневой файловой системы. Заменяет mkinitrd (с Fedora 12 и RHEL 6). Загрузчик загружает в память ядро и initramfs, монтирует временную корневую файловую систему и передаёт управление ядру. Задача initramfs - обеспечить хранение скриптов, программ, модулей ядра и прочих файлов, необходимых для загрузки драйверов, инициализации сетевых устройств, видео, устройств хранения, обработки сложных случаев в виде программных RAID, LVM, iSCSI, multipath, FibreChannel, LUKS, NFS для бездисковых компьютеров, поиска по имени или метке, обслуживания (fsck) и монтирования "настоящей" корневой файловой системы в режиме только чтения, после чего корневая файловая система "переключается". Подробно процесс загрузки описан в dracut.bootup.7 и bootup.7. Также созданный dracut initramfs используется системой установки anaconda и LiveCD. dracut автоматически распознаёт имеющееся оборудование и включает в образ необходимые загружаемые модули ядра (может создавать образ, настроенный на конкретное оборудование, или универсальный). Дополнительно внедряет в initramfs программы разбора параметров загрузки ядра.

dracut имеет модульную структуру (dracut.modules.7, /usr/share/dracut/modules.d или /usr/lib/dracut/modules.d/; 63 штуки в RHEL7). Основной модуль 99base задаёт скрипт init.sh, запускаемый ядром после монтирования initramfs. В RHEL7 dracut использует systemd со всеми его целями (нормальная конечная initrd.target?, аварийная - emergency.target) и сервисами (см. dracut.bootup(7) и bootup(7) и dracut-*.service).

dracut также используется при выключении компьютера, чтобы обеспечить разборку всех сложных конструкций хранения (/usr/lib/dracut/modules.d/99shutdown/shutdown.sh).

Создание initramfs

Не все модули включены по умолчанию. Настройки в файлах /etc/dracut.conf и /etc/dracut.conf.d/*.conf и /usr/lib/dracut/dracut.conf.d/*.conf (см. dracut.conf(5)). Ключи dracut перебивают настройки (журнал создания в /var/log/dracut.log):

Возможна загрузка корневой файловой системы по сети - пакет dracut-network. Загрузчик локальный или PXE.

При установке пакета с новым ядром вызывается скрипт "/sbin/new-kernel-pkg --package kernel --install версия", который вызывает "dracut -f /boot/initramfs-версия.img версия-ядра".

Утилита lsinitrd позволяет посмотреть содержимое указанного файла initramfs. Ключ "-f имя-файла" позволяет вывести содержимое указанного файла из initramfs.

mkinitrd имитирует поведение предыдущей системы mkinitrd.

Параметры загрузки

При загрузке ядра распознаются следующие параметры (dracut.cmdline.7; в RHEL7 к именам параметров добавлен префикс "rd."; берутся из командной строки (например, в /boot/grub2/grub.cfg, можно отредактировать при загрузке) и из initramfs в файлах /etc/cmdline, /etc/conf.d/, /etc/cmdline.d/*.conf; параметры без значения - булевы, можно задавать 0 или 1):

"Предсказуемые" имена сетевых интерфейсов (по данным BIOS/прошивки, физическое расположение, biosdevname), изначально ядро создаёт интерфейсы вида eth0, а затем они переименовываются (чтобы вернуть старые имена необходимо загружаться с параметрами net.ifnames=0 и biosdevname=0; при неудаче остаются имена вида ethX; при перестановке в другой слот "предсказуемое" имя изменяется; иногда оно изменяется при установке другой платы; подробности борьбы с udev):

В случае проблем при установке пользователь попадает в командную оболочку (указать rd.shell), в файл /run/initramfs/rdsosreport.txt записывается отчёт. В командной строке можно найти или создать нужное устройство и сделать на него символьную ссылку в /dev/root, по команде exit загрузка продолжается.

Для выхода в командную оболочку при завершении работы системы надо (RHEL7):

mkdir -p /run/initramfs/etc/cmdline.d
echo "rd.break=pre-shutdown" > /run/initramfs/etc/cmdline.d/debug.conf
touch /run/initramfs/.need_shutdown
reboot

Ссылки

@ Карта сайта News Автора!

Bog BOS: dracut - создание initramfs

Последние изменения:
2024.11.22: sysadmin: systemd-journald (централизованное хранение)
2024.11.11: sysadmin: Linux: пространства имён
2024.11.06: sysadmin: настройка TCP/IP в Linux: виртуальный интерфейс и виртуальный мост
2024.10.25: sysadmin: Linux VFS, атрибуты, расширенные атрибуты, ACL



Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru