1

Я скомпилировал и установил собственное ядро Linux, используя пакет ядра Debian. Все прошло хорошо: файлы .deb были созданы, а пользовательские vmlinuz и initrd.img были созданы в /boot, а /boot/grub/menu.lst были изменены автоматически. Но после того, как я загрузился в собственное ядро, вот что происходит:

После некоторого прогресса пишет следующее:

Begin: Waiting for root file system

и ждет некоторое время. И затем печатает это:

Gave up waiting for root device. Common problems:
    - Boot args (cat /proc/cmdline)
        - Check root delay= (did the system wait long enough?)
        - Check root= (did the system wait for the right device?)
    - Missing modules (cat /proc/modules; ls /dev)

ALERT! doesn't exist. Dropping to a shell!

/bin/sh
(initramfs)

и прыгает в оболочку в оперативной памяти. Когда я пытался mount /dev/hda6 /tmp/hda6 , hda6 действительно не было. hda6 - это раздел, на котором работает мой Debian, включая пользовательский initrd.img.

Пожалуйста, помогите мне, ребята!

2 ответа2

3

Эта проблема возникает, когда строка root= в параметрах загрузки вашего ядра не соответствует аппаратному обеспечению.

Возможно, ваше новое ядро не предоставляет загрузочному устройству узел устройства /dev/hda . Есть несколько возможностей.

  1. Возможно, ваше устройство сейчас /dev/hdb или что-то подобное.

  2. Возможно, ваше ядро сейчас использует более новый драйвер для устройства, а ваше загрузочное устройство теперь /dev/sda или что-то подобное. /dev/hd{a..z} устройства используют более старый драйвер PATA. Это стало распространенным явлением для устройств SATA, но таким же образом можно получить доступ и к старым интерфейсам PATA. (Ubuntu, например, использует это по умолчанию, за исключением оптических приводов PATA.)

Самый простой способ это исправить - это загрузить ядро, подождать, пока оно не переведет вас в оболочку, и проверить /dev/disk/by-uuid или /dev/disk/by-label чтобы определить правильное устройство. Затем вы можете смонтировать устройство, исправить аргумент root= в конфигурации Grub и перезагрузиться.

Подумайте об использовании UUID или метки раздела в аргументе root= вместо конкретного устройства; Таким образом, изменения драйвера ядра, которые переименуют ваше устройство, не повлияют на загрузку. Вы можете найти UUID и метки с помощью tune2fs -l <device> , а также можете добавить метку с помощью sudo tune2fs -L <label> <device> .

Вот root= аргумент каждый путь (обратите внимание, без кавычек):

root=/dev/sda6
root=UUID=94b1e7d5-9fc5-4f44-b5b1-c776afc808d4
root=LABEL=debian-root-volume-label
1

Первое, что вам нужно проверить - распознает ли ваше ядро ваше оборудование.

  • Сначала проверьте тип вашего жесткого диска и убедитесь, что он включен в конфигурации ядра. Скорее всего, это причина вашей проблемы.
  • Я не помню, есть ли программа dmesg включенная в initramfs по умолчанию в Debian, но вы можете проверить вывод отладочной информации ядра, набрав dmesg | less Затем попробуйте найти строки, которые относятся к вашему жесткому диску. Также полезно знать поставщика или хотя бы интерфейс накопителя.
  • Наконец, вы можете удалить опцию quiet загрузки из командной строки ядра, если таковая имеется, а затем просто прокрутить отладочный вывод с помощью клавиш Shift+PgUp/PgDn, ищущих ту же информацию, что и в предыдущем абзаце.

Также, возможно, будет хорошей идеей предоставить некоторую информацию о жестком диске в вопросе, связанном с HD.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .