Ядро паникует с ошибкой «Не удается открыть корневое устройство». Куда добавить параметр «root =»?

9

всякий раз, когда я пытаюсь загрузиться с ядром linux 3.0.0.13 (которое установлено при обновлении), я получаю ошибку Kernel Panic:

VFS: Невозможно открыть корневое устройство «sda1» или неизвестный блок (0,0). Добавьте правильный параметр загрузки «root =»;

К счастью, если я загружаюсь с предыдущей версией, у меня нет проблем. Как я могу решить это? Где я должен добавить правильный root= option? Если я не заставлю это ядро ​​работать, как я могу удалить его по умолчанию и придерживаться более старого?

lucacerone
источник
Та же проблема здесь. Основное различие, которое я наблюдаю, состоит в том, что до 3.0.0.12, grub conf пытается идентифицировать жесткий диск, используя его UUID, 3.0.0.13 теперь использует / dev / sda6 .. странно ...
Дэн

Ответы:

11

Вы не предоставили много информации о журналах и прочем, чтобы продолжить, но я предполагаю, что, скорее всего, ошибка, с которой вы столкнулись, связана с тем, что ядро ​​сбито с толку диском IDE / SATA. Быстрый поиск в Google привел меня к ссылке 1 , ссылке 2 , ссылке 3

Ниже приводится выдержка из ссылки, указанной по одной из ссылок выше :

Скорее всего, это одна из наиболее часто встречающихся проблем (но как только вы ее решите, вы, скорее всего, больше никогда ее не увидите):

Unable to mount root fs on unknown-block(0,0)

или

VFS: Cannot open root device "sda3" or unknown-block(8,3)
Please append a correct "root=" boot option; here are the available partitions:
  sda driver: sd
    sda1 sda2

Цифры 0,0или 8,3могут отличаться в вашем случае - это относится к устройству, к которому ядро ​​пытается получить доступ (и которое терпит неудачу). Вообще говоря, можно сказать, что если первая цифра равна 0, то ядро ​​не может идентифицировать оборудование. Если это другая цифра (например, 8), она не может идентифицировать файловую систему (но может получить доступ к оборудованию).

Проблема здесь в том, что загружаемое ядро ​​не может преобразовать root=/dev/...заданный вами параметр (в конфигурации загрузчика) в настоящую, доступную файловую систему. Несколько причин могут привести к такому отказу:

  • в конфигурации ядра отсутствуют драйверы для вашего контроллера жесткого диска (случаи 1, 4, 5)
  • в конфигурации ядра отсутствуют драйверы для шины, используемой вашим контроллером жесткого диска
  • в конфигурации ядра отсутствуют драйверы для используемой файловой системы
  • устройство неверно идентифицируется в параметре root = (случаи 2, 3)

Решение проблемы легко, если вы знаете, в чем причина. Скорее всего, нет, так что здесь быстрая проверка.

Откройте мастер настройки ядра ( часть make menuconfig ), чтобы вы могли соответствующим образом обновить конфигурацию ядра.

  • Проверьте, есть ли у вас встроенная (а не как модуль) поддержка шины / протокола, которую использует ваш контроллер жесткого диска.
  • Скорее всего, это поддержка PCI, поддержка SATA (что ниже поддержки устройств SCSI), ...
  • Проверьте, есть ли у вас встроенная (а не модульная) поддержка используемого вами контроллера жесткого диска. Один из наиболее частых случаев: вы выбрали поддержку протокола контроллера жесткого диска (IDE, SATA, SCSI, ...), но забыли
    выбрать сам драйвер контроллера жесткого диска (например, Intel PIIX). Попробуйте
    выполнить следующую команду lscpi и вставьте ее вывод в
    http://kmuto.jp/debian/hcl/ . Сайт покажет вам, какие драйверы ядра вам нужно выбрать для вашей системы. Внутри menuconfig
    вы можете нажать «/», чтобы открыть функцию поиска, и ввести
    имя драйвера, чтобы узнать, где он находится. # lspci -n
  • Проверьте, встроена ли (а не как модуль) поддержка файловой системы, которую вы используете.
  • Скажем, ваша корневая файловая система использует btrfs (что я определенно не рекомендую), но вы ее не выбрали или не выбрали для сборки в качестве
    модуля, тогда вы получите ошибку, которую видите. Убедитесь, что
    поддержка файловой системы встроена в ядро.
  • Проверьте, root=указывает ли параметр ядра на правильный раздел.

    Это не так глупо, как кажется. Когда вы загружаетесь с одним ядром, оно может отображать ваши диски как / dev / sda, тогда как ваше (сконфигурированное) ядро ​​ожидает, что оно будет / dev / hda. Это не потому, что ядра несовместимы друг с другом, а из-за используемых драйверов: старые драйверы используют синтаксис hda, более новые sda.

    Попробуйте переключить HDA с SDA (и HDB с SDB, и ...).

    Кроме того, последние ядра дают обзор разделов, которые они обнаружили на устройстве. Если это так, это может помочь вам определить, если вы неправильно выбрали раздел (в примере, приведенном в начале этого раздела, только два раздела найдены, тогда как ядру было поручено загрузить третий). Если это не так, скорее всего, потому что ядро ​​не знает устройства с самого начала (поэтому оно не может пытаться отобразить разделы).

  • Проверьте, является ли ядро, которое загружается загрузчиком, правильным ядром. Я видел людей, которые после сборки первого ядра (которое не загружается) забывают, что им нужно монтировать, /bootпрежде чем перезаписать ядро ​​новым. В результате они копируют ядро ​​в корневую файловую систему ( /), тогда как загрузчик все еще ожидает, что образ ядра находится в /bootразделе.

Нитин Венкатеш
источник
1
Привет, прошло много времени, но спасибо. У меня был неисправный CD-Rom, сняв который все работало нормально!
lucacerone
Ссылка 1, Ссылка 4 и Ссылка 5 теперь все мертвы.
Вопросительный
0

Прочитав этот ответ, объясняющий, что происходит, попробуйте использовать [Boot-Reapir CD] [1] [1]: https://help.ubuntu.com/community/Boot-Repair.

Отлично поработал над исправлением «устройство неверно идентифицировано в параметре root = (случаи 2, 3)».

madcap66
источник