Generating run initramfs rdsosreport txt что делать centos

Обновлено: 03.07.2024

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

  • --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)
  • [версия-ядра] (по умолчанию используется версия выполняемого ядра)

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

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

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

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

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

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

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

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

    Почему Linux не загружается дальше initramfs


    1. Неверный корневой раздел в загрузчике

    В данном случае она сообщает, что не может найти раздел /dev/sda10:

    Alert: /dev/sda10 does not exist. Dropping to a shell


    Очень часто такая ошибка возникает после манипуляций с разделами дисков, особенно изменения их размера. UUID диска меняется и ядро больше не может его найти. Вы можете посмотреть доступные в системе разделы с помощью команды:

    ls /dev/ | grep sd


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

    mkdir /mnt
    mount /dev/sda5 /mnt
    ls

    Вы также можете узнать здесь же UUID данного раздела диска, для этого выполните:


    В данном случае, корневой раздел имеет имя /dev/sda5. Именно это имя можно передать ядру в конфигурации загрузчика Grub, а можно UUID, но если в этом нет крайней необходимости, то короткое имя использовать гораздо проще. Надо перезагрузить компьютер, в меню Grub выбрать нужную загрузочную запись и нажать клавишу E:


    Далее найти пункт, начинающейся со слова linux и в нём параметр root. Его значение вместе со словом UUID надо стереть, а вместо него прописать имя корневого раздела:


    После этого система загрузится, а вам останется только создать новый конфигурационный файл grub с помощью команды:

    2. Повреждённая файловая система

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

    The root filesystem on /dev/sda5 requires a manual fsck

    Вы можете прямо здесь же попытаться восстановить файловую систему. Для этого выполните:

    Здесь /dev/sda5 - это корневой раздел, его нужно заменить на свой. Опция -y указывает утилите, что на все вопросы надо ли исправлять блок нужно отвечать утвердительно. После успешного восстановления надо перезагрузить компьютер и попытаться загрузить систему снова.

    Выводы

    Нет похожих записей


    Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

    К данному моменту нам известно, что initramfs обладает встроенным bash и мы пользовались им время от времени через особые точки входа rd.break . Цель данной главы состоит в том, чтобы разобраться как systemd снабжает нас некой оболочкой изнутри initramfs. В чём состоят те шаги, которые надлежит предпринимать и как следует применять его более действенно? Однако перед этим давайте подведём итоги того, что мы узнали на данный момент относительно отладочной и аварийной оболочек initramfs.

    Оболочка

    rd.break

    свалиться в оболочку в самом конце



    Содержимое журнала времени исполнения rdsosreport.txt

    Далее мы обсудим как мы можем применять аварийные оболочки для исправления некоторых проблемных ситуаций "can’t boot". Например, For example, initramfs ничем не хуже своей корневой файловой системы пользователей. Итак, она обладает исполняемыми файлами lvm , raid и относящимся к файловой системе, которые мы можем применить для обнаружения, сборки, диагностирования и исправления этой утраченой корневой файловой системы пользователя. После этого мы обсудим как мы можем смонтировать её в /sysroot и изучим её содержимое, скажем, для исправления неверных записей grub.cfg .

    Более того, rd.break предоставляет нам различные варианты прерывания своей последовательности запуска на различных этапах.

    cmdline : Эта особая точка входа получает установленные параметры командной строки ядра.

    pre-udev : Прерывает нашу последовательность запуска перед обработчиком udev .

    pre-trigger : Вы имеете возможность установить переменные среды udev со значением упрвления udevadm либо можете установить подобные --property=KEY=value параметры или управлять своим дальнейшим исполнением udev с udevadm .

    pre-mount : Прерывает нашу последовательность перед монтированием нашей корневой файловой системы пользователя в /sysroot .

    mount : Прерывает исполняемую последовательность запуска после монтирования установленной корневой файловой системы пользователя в /sysroot .

    pre-pivot : Прерывет данную последовательность запуска непосредственно перед переключением на свою реальную корневую файловую систему.

    Теперь давайте рассмотрим как в точности systemd управляет предоставлением нам соответствующих оболочек на этих различных этапах.

    Каким образом systemd перебрасывает нас в аварийную оболочку?

    Давайте рассмотрим некий пример особой точки входа pre-mount . Systemd из initramfs выбирает параметр командной строки rd.break=pre-mount из dracut-cmdline.service , и это запускает службу systemd dracut-pre-mount.service из местоположения initramfs /usr/lib/systemd/system . Эта служба запускается перед запуском initrd-root-fs.target , sysroot.mount и systemd-fsck-root.service .

    Как вы можете видеть, это всего лишь исполнение сценария /bin/dracut-pre-mount из initramfs.

    Внутри этого сценария /bin/dracut-pre-mount наиболее важной является следующая строка:

    Мы уже обсуждали функцию getarg , которая применяется для проверки того какой параметр был передан в rd.break= . Как только был передан параметр rd.break=pre-mount , тогда будет вызвана только функция emergency-shell() . Эта функция определена в /usr/lib/dracut-lib.sh и она передаёт в неё pre-mount в качестве строкового параметра -n означает следующее:

    Эта функция emergency_shell принимает для переменной _rdshell_name значение pre-mount .

    Здесь -n рассматривается как первый аргумент ( $1 ), а pre-mount это второй аргумент ( $2 ). Поэтому _rdshell_name становится pre-mount .

    После этого, в самом конце, это вызовет другую функцию _emergency_shell из того же самого файла (обратите внимание на подчёркивание перед самим названием функции). Как вы можете видеть, _rdshell_name выступает соответствующим аргументом для такой функции _emergency_shell .

    _emergency_shell _name pre-mount

    Та же самая строка pre-mount была передана в PS1 . Давайте вначале рассмотрим чем собственно является PS1 .

    PS1 носит название псевдо переменной. Она будет отображена bash после того как соответствующий пользователь успешно зарегистрировался. Вот некий пример:

    Значениями идеальных записей, принимаемых bash являются: PS1='\u:\w\$' .

    u = значение имени пользователя.

    w/code> = Это значение рабочего каталога.

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

    Далее в этом исходном коде вы можете наблюдать, что установленное новое значение переменной PS1 также добавляется в /etc/profile . Основная причина состоит в том, что bash считывает данный файл всякий раз перед предоставлением своей оболочки текущему пользователю. В самом конце мы просто запускаем dracut-emergency .

    Ниже приводится содержимое файла dracut-emergency.service из usr/lib/systemd/system/ в initramfs.

    Эта служба всего лишь выполняет /bin/dracut-emergency . Данный сценарий вначале останавливает запущенную службу plymouth .

    Это запоминает текущим значением переменной hook emergency и вызывает соответствющую функцию source_hook с этим аргументом emergency .

    Данная функция source_hook снова определена в usr/lib/dracut-lib.sh .

    Значение переменной _dir перехватило значение название особой точки входа, коим выступает emergency . Все такие особые точки входа ничто иное, как некий пакет сценариев, хранимых и исполняемых из каталога /lib/dracut/hooks/ initramfs.

    Для некой аварийной специальной точки входа исполняется usr/lib/dracut/hooks/emergency/50-plymouth-emergency.sh , который останавливает plymouth .

    После выполнения особой точки входа и останова plymouth , выполняется возврат в bin/dracut-emergency и выдаётся на печать такой баннер:

    Итак нет значения какое rd.break=hook_name было передано пользователем. Systemd выполнит соответствующую особую точку входа emergency и после вывода на печать надлежащего баннера он извлечёт тот каталог /etc/profile , в который мы добавили PS1=_rdshell_name/PS1=hook_name , а затем просто запустит свою оболочку bash.

    Когда пользователь передаёт в rd.break какой- то иной параметр, скажем, initqueue , тогда он будет скормлен в переменные PS1 , _rdshell_name и hook . Позднее через соответствующую авариную службу будет вызван bash. Bash считает значение PS1 из файла /etc/profile и отобразит в своём приглашении имя initqueue .

    Основное заключение состоит в том, что соответствующемы пользователю будет предоставляться одна и та же оболочка bash с различными именами приглашений ( cmdline , pre-mount , switch_root , pre-udev , emergency и т.п.), однако на различных этапах initramfs.

    Аналогично этому, systemd будет исполняться rescue.target .

    rescue.service и emergency.service



    Блок-схема общей последовательности запуска



    Параметр командной строки ядра

    Это сбросит нас в некую аварийную оболочку. Этот однопользовательский режим, служба спасения и аварийная служба, все они запускают исполняемый файл dracut-emergency . Это тот же самый исполняемый файл, который мы запускали в особой точке входа dracut.

    И, как нам известно, этот сценарий dracut-emergency запускает оболочку bash.

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

    Вылазит initramfs при загрузке Ubuntu

    Исправляем ошибку с загрузкой в initramfs при запуске Ubuntu

    В большинстве случаев рассматриваемая проблема связана со сбоем в одном из суперблоков, и при попытке выхода из initramfs через команду exit появляется надпись следующего содержания:

    exit /dev/mapper/ubuntu--vg-root contains a file system with errors, check forced. Inodes that were part of a corrupted orphan linked list found. /dev/mapper/ubuntu-vg-root: UNEXPECTED INCONSISTENCY; Run fsck MANUALLY. (ie, without -a or -p options) fsck exited with status code 4. The root file system on /dev/mapper/ubuntu--vg-root requires manual fsck .

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

      Загрузите ISO-образ с такой же версией Ubuntu, как установлена на компьютере, с официального сайта и создайте загрузочную флешку. Детальнее об этой процедуре вы можете узнать в другой нашей статье по следующей ссылке.

    Запуск установщика операционной системы Ubuntu в демонстрационном режиме

    Переход к терминалу Ubuntu при запуске в демонстрационном режиме

    Определение номера системного раздела жесткого диска через терминал Ubuntu

    Отображение номера системного раздела жесткого диска после активации команды в Ubuntu

    Команда для отображения всех суперблоков на жестком диске через терминал в Ubuntu

    Отображение всех суперблоков жесткого диска через терминал в Ubuntu

    Восстановление файловой системы жесткого диска через суперблок в Ubuntu

    Благодаря опции -y все изменения будут автоматически приниматься, и при успешном завершении процесса на экране отобразится следующее уведомление:

    Монтирование системного раздела через терминал в Ubuntu

    Переход в системный раздел через терминал в операционной системе Ubuntu

    Проверка файловой системы после ее исправления в терминале Ubuntu

    Иногда даже после успешного исправления рассмотренной проблемы юзеры сталкиваются с ошибками при запуске операционной системы. Чаще всего они связаны с поломкой стандартного загрузчика GRUB. Поэтому придется дополнительно восстановить и этот стандартный компонент. Развернутое руководство о том, как выполняется поставленная задача через Boot-Repair, ищите в материале далее.

    По завершении всех процедур флешка с LiveCD Ubuntu вам больше не понадобится. Если возникло желание ее отформатировать и использовать далее для своих целей, советуем ознакомиться с отдельной нашей статьей по проведению этой операции.

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

    Закрыть

    Мы рады, что смогли помочь Вам в решении проблемы.

    Отблагодарите автора, поделитесь статьей в социальных сетях.

    Закрыть

    Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

    Читайте также: