openSUSE:Отчет об ошибках mkinitrd

Перейти к: навигация, поиск

Отчет об ошибках mkinitrd

Сценарий mkinitrd генерирует образ initrd, который загружается загрузчиком и выполняется ядром во время загрузки. Его основная задача — смонтировать корневую файловую систему и запустить init.

Пакеты mkinitrd

Начиная с 11.1/SLE11, mkinitrd состоит из основного скрипта /sbin/mkinitrd и нескольких скриплетов /lib/mkinitrd/scripts. Скрипты setup-*.sh выполняются в работающей системе при создании образа, boot-*.sh копируются в образ и выполняются во время загрузки. Важно отметить, что не все эти сценарии создаются при установке пакета mkinitrd. Воспользовавшись командой

rpm -qf /lib/mkinitrd/scripts/<scriptname>

выясните в каком пакете содержится скрипт вызывающий ошибку и укажите его имя в сообщении об ошибке. Также обратите внимание, что initrd также используется во время установки системы (называется inst-sys или linuxrc) и не имеет ничего общего с mkinitrd. Он входит в состав пакета installation-images. ВАЖНО: Из вышесказанного также следует, что для проверки того, исправлена ли ошибка в результате обновления или установки нового пакета из Factory, крайне необходимо обновить все пакеты, которые устанавливают файлы в /lib/mkinitrd/scripts. Воспользуйтесь следующей командой для получения списка всех таких пакетов и проверьте наличие обновлений для них прежде чем сообщать об ошибке:

rpm -qf --qf '%{n}\n'  /lib/mkinitrd/scripts/* | sort -u

Короче говоря, не во всех ошибках mkinitrd виноват одноимённый пакет.

Логи

Разработчикам всегда нужен журнал запуска mkinitrd. Команда для его создания выглядит так:

bash -vx /sbin/mkinitrd &>mkinitrd-log.txt

Если система не загружается, загрузитесь с DVD в систему восстановления и запустите (скопировано из раздела RECOVERY в man mkinitrd):

mount --bind /dev /mnt/dev
chroot /mnt
mount /proc
mount /sys
bash -vx /sbin/mkinitrd &>/root/mkinitrd-log.txt
exit

В этом случае журнал будет находиться в /mnt/root/mkinitrd-log.txt. Иногда разработчикам также может быть полезен журнал загрузки который создаётся при задании параметра linuxrc=trace. Самый простой способ получить его — подключить другой компьютер с помощью нуль-модемного соединения и выполните на втором компьютере команду:

screen -L /dev/ttyS0 115200

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

console=ttyS0 console=tty0 linuxrc=trace

После загрузки машины введите Ctrl-A, Ctrl-\ в окне программы screen и прикрепите файл screenlog.0 к сообщению об ошибке.