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 к сообщению об ошибке.