Dracut linux что это

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).

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

  • —verbose | -v
  • —quiet | -q
  • —debug (выводить отладочную информацию при построении initram)
  • —force | -f
  • —kver версия-ядра
  • —hostonly | -H (минимизировать размер initramfs, выкинув всё ненужное для данного сервера; в RHEL7 включён по умолчанию через /usr/lib/dracut/dracut.conf.d/01-dist.conf; для генерации универсального initramfs необходимо установить пакет dracut-config-generic; универсальным также является initrams с именем initramfs-0-rescue-*.img )
  • —no-hostonly
  • —hostonly-cmdline (сохранить параметры ядра в initramfs)
  • —no-hostonly-cmdline
  • —hostonly-i18n (по умолчанию, только нужные шрифты и клавиатуры)
  • —no-hostonly-i18n (все файлы шрифтов и клавиатур)
  • —list-modules (выдать список имеющихся модулей dracut)
  • —modules список-модулей-dracut-через-пробел
  • —omit список-модулей-dracut-через-пробел
  • —add список-модулей-dracut-через-пробел
  • —force-add список-модулей-dracut-через-пробел (для —hostonly)
  • —drivers список-модулей-ядра-через-пробел
  • —add-drivers список-модулей-ядра-через-пробел
  • —omit-drivers список-модулей-ядра-через-пробел
  • —kmoddir каталог-модулей-ядра
  • —print-cmdline (вывести рекомендуемые параметры загрузки ядра)
  • —include исходный-файл путь-в-initram (добавить свой файл или целое поддерево в initramfs; можно использовать только 1 раз?)
  • —install программа (добавляет программу в initram вместе с требующимися библиотеками; можно использовать несколько раз; в RHEL7 через /usr/lib/dracut/dracut.conf.d/01-dist.conf добавлены vi, /etc/virc, ps, grep, cat, rm)
  • —install-optional программа (добавляет программу по возможности)
  • —filesystems список-типов-файловых-систем-через-пробел
  • —fwdir каталог-с-прошивками
  • —kernel-cmdline параметры-ядра-по-умолчанию
  • —kernel-only (только модули ядра и прошивки)
  • —no-kernel (не включать модули ядра и прошивки)
  • —early-microcode
  • —no-early-microcode
  • —mdadmconf (включить /etc/mdadm.conf)
  • —nomdadmconf
  • —lvmconf (включить /etc/lvm/lvm.conf)
  • —nolvmconf
  • —fscks [список-через-пробел] (включить утилиты fsck)
  • —nofscks
  • —strip (по умолчанию)
  • —nostrip
  • —prelink (по умолчанию)
  • —noprelink
  • —hardlink (по умолчанию)
  • —nohardlink
  • —conf /etc/dracut.conf
  • —confdir /etc/dracut.conf.d
  • —tmpdir /var/tmp
  • —sshkey файл-ключа
  • —logfile /var/log/dracut.log
  • —fstab (использовать /etc/fstab вместо /proc/self/mountinfo
  • —add-fstab имя-файла (добавить содержимое к записываемому /etc/fstab)
  • —add-device устройство
  • —gzip | —bzip2 | —lzma | —xz | —lzo | —lz4 | —no-compress | —compress=»gzip -9″ (по умолчанию gzip)
  • —show-modules (вывести имена используемых модулей)
  • —keep (не удалять временный каталог)
  • —printsize
  • —stdlog уровень-вывода-на-stderr (0 — ничего, 1 — фатальные ошибки, 2 — ошибки, 3 — предупреждения, 4 — информация, 5 — отладочная печать, 6 — трассировка)
  • —ro-mnt (монтировать / и /usr в режиме чтения)
  • —regenerate-all (пересоздать initramfs со всеми обнаруженными ядрами)
  • имя-файла-initramfs (по умолчанию — /boot/initramfs-ВерсияЯдра.img)
  • [версия-ядра] (по умолчанию используется версия выполняемого ядра)
Читайте также:  Google chrome crashes windows

Возможна загрузка корневой файловой системы по сети — пакет 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):

  • ключи ядра (/usr/share/doc/kernel-doc-*/Documentation/kernel-parameters.txt)
  • init=путь-к-программе-init (можно сюда /bin/sh, но лучше systemd.unit=rescue.target или emergency.target; rd.systemd.unit= действует только на dracut, но не основную систему)
  • задание корневой файловой системы
    • root=блочное-устройство (например, /dev/sda2 или /dev/disk/by-path/pci-0000:00:1f.1-scsi-0:0:1:0-part1 или /dev/disk/by-label/Root или UUID=идентификатор или LABEL=метка-файловой-системы)
    • root=nfs[4]:IP-адрес:корневой-каталог:опции
    • root=dhcp|dhcp6 (сеть настраивается по DHCP, путь и параметры для NFS берутся из root-path)
    • root=/dev/nfs nfsroot=IP-адрес:корневой-каталог:опции
    • root=cifs://[имя-пользователя[:пароль]@]IP-адрес-сервера:корневой-каталог (можно задать cifsuser= и cifspass=)
    • root=iscsi:[имя:пароль[:обратное-имя:пароль]@][имя-сервера]:[протокол]:[порт][:[имя-интерфейса-iSCSI]:имя-netdev]]:[LUN]:имя-target
    • root=UUID=идентификатор netroot=iscsi.
    • root=UUID=идентификатор rd.iscsi.initiator, rd.iscsi.target.name, rd.iscsi.target.ip, rd.iscsi.target.port, rd.iscsi.target.group, rd.iscsi.username, rd.iscsi.password, rd.iscsi.in.username, rd.iscsi.in.password, rd.iscsi.firmware, rd.iscsi.param, rd.iscsi.ibft, rd.iscsi.waitnet=0, rd.iscsi.testroute=0
    • root=UUID=идентификатор netroot=nbd:сервер:порт[:тип-файловой-системы[:опции-монтирования[:опции-NBD]]]
    • rootfstype=тип-файловой-системы (auto)
    • rootflags=флаги-монтирования (если не задано, то информация извлекается из /et/fstab настоящей корневой файловой системы)
    • ro (монтировать / и /usr только на чтение; если ro или rw не заданы, то информация извлекается из /et/fstab настоящей корневой файловой системы)
    • rw
    • rd.fstab=0 (не брать параметры монтирования из /etc/fstab, был rd_NO_FSTAB)
    • rootfallback=блочное-устройство (запасная корневая файловая система)
    • rd.skipfsck
  • rd.auto (автоматическая сборка LUKS, dmraid, mdraid, lvm; выключена с версии dracut 024 — RHEL7 )
  • rd.cmdline=ask (запросить дополнительные параметры)
  • resume=блочное-устройство (swap для просыпания)
  • rd.emergency= (что делать при ошибке и rd.shell=0
  • rdblacklist=модули-ядра-через-запятую (не загружать; в RHEL7: rd.driver.blacklist=; до RHEL72 не работал во время установки)
  • rd.driver.blacklist=
  • rdloaddriver=модуль-ядра (в RHEL7 разделился на rd.driver.pre (до автоматической загрузки модулей ядра) и rd.driver.post)
  • rd.driver.pre=модуль-ядра (до автоматической загрузки модулей ядра)
  • rd.driver.post=модуль-ядра (после автоматической загрузки модулей ядра, был rdinsmodpost)
  • rd.retry=секунд (30; ждать появления устройств; через 2/3 указанного времени запускаются деградированные RAID, был rd_retry)
  • rd.noverifyssl (разрешить самоподписанные сертификаты для загрузки по SSL)
  • средства отладки
    • rdinfo (информационная печать; rd.info в RHEL7)
    • rd.info
    • rdshell (rd.shell в RHEL7; выпасть в командную строку, если не удалось смонтировать корневую файловую систему)
    • rd.shell
    • rdinitdebug и rdnetdebug (RHEL6: отладку в /init.log)
    • rd.debug (RHEL7: отладочная печать («set -x») в /run/initramfs/rdsosreport.txt, /run/initramfs/init.log или доступна через «journalctl -ab»)
    • rd.memdebug=3 (0 — нет, 1 — часть из /proc/meminfo, 2 — из /proc/meminfo, 3 — из /proc/meminfo и /proc/slabinfo)
    • rdbreak (выпасть в командную строку в конце обработки initramfs; RHEL7: rd.break)
    • rd.break
    • rd.break= (выпасть в командную строку в указанной точке; RHEL7)
    • rdudevinfo (информационная печать для udev; RHEL7: rd.udev.info)
    • rd.udev.info
    • rdudevdebug (отладочная печать udev; RHEL7: rd.udev.debug)
    • rd.udev.debug
  • локализация
    • rd.vconsole.keymap=ruwin_alt-UTF-8 (раскладка клавиатуры — имя файла из каталога keymaps для loadkeys, пишется KEYMAP в /etc/vconsole.conf в initramfs, был KEYMAP и KEYTABLE)
    • rd.vconsole.keymap.ext=имя-файла (пишется EXT_KEYMAP в /etc/vconsole.conf в initramfs, был EXT_KEYMAP)
    • rd.vconsole.unicode (UTF-8; пишется UNICODE в /etc/vconsole.conf в initramfs, был UNICODE)
    • rd.vconsole.font=latarcyrheb-sun16 (консольный шрифт — имя файла из каталога consolefonts, пишется FONT в /etc/vconsole.conf в initramfs, был SYSFONT)
    • rd.vconsole.font.map (имя файла преобразования кодов из каталога consoletrans — см ключ «-m» setfont, пишется FONT_MAP в /etc/vconsole.conf в initramfs, был CONTRANS)
    • rd.vconsole.font.unimap (имя файла преобразования кодов из каталога unimaps — см ключ «-u» setfont, пишется FONT_UNIMAP в /etc/vconsole.conf в initramfs, был UNIMAP)
    • rd.locale.LANG=en_US.UTF-8 # ru_RU.UTF-8 (пишется LANG в /etc/locale.conf в initramfs)
    • rd.locale.LC_ALL= (пишется LC_ALL в /etc/locale.conf в initramfs)
  • LVM
    • rd_NO_LVM (RHEL6)
    • rd.lvm=0 (RHEL7)
    • rd.lvm.vg=имя-группы-томов (только эту группу, был rd_LVM_VG)
    • rd_LVM_LV (RHEL6)
    • rd.lvm.lv=имя-тома (только этот том)
    • rd.lvm.conf=0 (удалить /etc/lvm/lvm.conf из initramfs, был rd_NO_LVMCONF)
    • rd.lvm.snapshot (? был rd_LVM_SNAPSHOT)
    • rd.lvm.snapsize (? был rd_LVM_SNAPSIZE)
  • LUKS
    • rd_NO_LUKS (RHEL6)
    • rd.luks=0 (RHEL7)
    • rd.luks.uuid=часть-UUID (только этот раздел, был rd_LUKS_UUID)
    • rd.luks.allow-discards[=UUID] (разрешить TRIM)
    • rd.luks.crypttab=0 (не проверять /etc/crypttab, был rd_NO_CRYPTTAB)
    • rd.luks.key=путь-к-ключу[:устройство-к-ключу[:LUKS-устройство]] (местонахождение ключа для указанного LUKS-устройства)
    • rd.luks.keydev.uuid (rd_LUKS_KEYDEV_UUID)
    • rd.luks.keypath (rd_LUKS_KEYPATH)
  • программный RAID
    • rd_NO_MD (RHEL6)
    • rd.md=0 (RHEL7)
    • rd.md.imsm=0 (предоставить обработку RAID в формате imsm/isw подсистеме DM RAID, был rd_NO_MDIMSM)
    • rd.md.ddf=0 (предоставить обработку RAID в формате SNIA ddf подсистеме DM RAID)
    • rd.md.conf=0 (игнорировать mdadm.conf в initramfs, был rd_NO_MDADMCONF)
    • rd.md.waitclean=1 (дождаться завершения resync, recovery и reshape)
    • rd.md.uuid=UUID (только этот массив, был rd_MD_UUID)
  • псевдоаппаратный RAID (DM RAID)
    • rd_NO_DM (RHEL6)
    • rd.dm=0 (RHEL7)
    • rd.dm.uuid=UUID (только этот массив)
  • FIPS
    • rd.fips
    • boot=блочное-устройство (для FIPS)
    • rd.fips.skipkernel (не проверять контрольную сумму ядра)
  • настройки сети
    • rd.neednet=1 (поднимать сеть, даже если она не нужна для монтирования корня)
    • ip=auto (поднять интерфейс для сетевой загрузки по DHCP, DHCP сервер может задать root-path, удалили?)
    • ip= (автоматическая конфигурация всех интерфейсов)
    • ip=интерфейс:[:MTU[:новый-MAC]] (автоматическая конфигурация интерфейса, MTU задать не удалось, выкинули? , none и off выкинули?)
    • ip=IP-адрес:[IP-адрес-соседа-PPP]:шлюз:маска:имя-хоста:интерфейс:[:MTU[:MAC-адрес]] (частичная ручная настройка сетевого интерфейса; опущенные части будут взяты по DHCP; MTU задать не удалось )
    • ip=IP-адрес:[IP-адрес-соседа-PPP]:шлюз:маска:имя-хоста:интерфейс:[:IP-адрес-DNS[:IP-адрес-DNS]] (частичная ручная настройка сетевого интерфейса)
    • ifname=имя-интерфейса:MAC-адрес (задать своё имя сетевого интерфейса, не надо использовать стандартные шаблоны типа eth0)
    • rd.route=сеть/маска:шлюз[:интерфейс] (задать статический маршрут)
    • bootdev=имя-интерфейса (указание загрузочного интерфейса; необходим, если описано несколько интерфейсов)
    • BOOTIF=MAC-адрес (явное указание интерфейса загрузки; можно обеспечить автоматическое задание средствами PXE)
    • rd.bootif=0 (не брать BOOTIF от PXE)
    • nameserver=IP-адрес (можно указать несколько штук)
    • biosdevname=0 (не переименовывать интерфейсы по информации от BIOS в eno1 и т.п.) только для DELL? (net.ifnames=0)
    • vlan=имя-VLAN:имя-устройства (стили именования: vlan0005, vlan5, eth0.0005, eth0.5)
    • bond=имя-группового-интерфейса:интерфейс<,интерфейс>:опции-модуля-bonding
    • team=имя-группового-интерфейса:интерфейс
    • bridge=имя-группового-интерфейса:интерфейс
    • rd.ipv6.disable ( не работает? )
    • rd.net.dhcp.retry=число (по умолчанию 1)
    • rd.net.timeout.dhcp= («dhclient -timeout . «)
    • rd.net.timeout.iflink=секунд (ждать возникновения интерфейса, 60)
    • rd.net.timeout.ifup=секунд (ждать поднятия интерфейса, 20)
    • rd.net.timeout.route=секунд (20)
    • rd.net.timeout.ipv6dad=секунд (50)
    • rd.net.timeout.ipv6auto=секунд (40)
    • rd.net.timeout.carrier=секунд (5)
  • NFS
    • rd.nfs.domain=имя-домена (для NFSv4, приоритет над /etc/idmap.conf, был rd_NFS_DOMAIN)
    • LiveCD (squashfs с образом файловой системы без возможности записи, создаётся снимок для небольшого объёма записи, если не указан rd.writable_fsimg=1)
      • root=live:URL (http, httpd, ftp, tftp)
      • rd.writable_fsimg=1 (образ файловой системы с возможностью записи, предварительно копируется в память)
      • rd.live.debug=1 (отладочная печать при загрузке, был rdlivedebug)
      • rd.live.dir=путь (расположение ext3fs.img или rootfs.img внутри squashfs, по умолчанию LiveOS, был live_dir)
      • rd.live.ram=1 (скопировать образ в память перед загрузкой, чтобы освободит носитель, был live_ram)
      • rd.live.overlay=блочное-устройство:путь-внутри (изменения будут сохранены, был overlay)
      • rd.live.overlay.thin=1 (использовать снимок с динамически выделяемым местом)
      • rd.live.overlay.readonly (?, удалён? был readonly_overlay)
      • rd.live.overlay.reset (?, удалён? был reset_overlay)
      • rd.live.check (проверить носитель перед запуском, был check, удалён?)
      • rd.live.image (?, удалён? был liveimg)
    • графическое оформление загрузки (Plymouth)
      • rd_NO_PLYMOUTH (RHEL6)
      • plymouth.enable=0 (отключить полностью)
      • rd.plymouth=0 (отключить для initramfs)
      • rd.splash (?, удалён? был rd_NO_SPLASH)
    • ключи ядра
      • masterkey=путь
      • masterkeytype=trusted
      • evmkey=путь
      • ecryptfskey=путь

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

    • en (Ethernet)
      • o Номер (устройство на материнской плате — eno1)
      • s Слот f функция-порт d устройство (устройство горячего подключения)
      • x MAC-Адрес
      • [P Домен] p Шина s Слот f функция-порт d устройство (например, enp4s0f0)
      • [P Домен] p Шина s Слот f функция u порт . c конфигурация i интерфейс (цепочка USB)
    • wl (WLAN)
    • ww (WWAN, сотовая связь)

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

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

    Источник

    Читайте также:  Текстовые редакторы для python linux
Оцените статью