LINUX.ORG.RU

[gentoo] Ядро не находит корень

 


0

0

http://img243.imageshack.us/img243/763/imag0070q.jpg
Кернелпаник.

Gentoo amd64. sda1 - boot, sda2 -root. Файловую систему (ext4) вкомпилил монолитно.

Конфиг ядра: http://paste.org.ru/?jdhowg

Конфиг загрузчика:
title Gentoo Linux
root (hd0,0)
kernel /linux root=/dev/sda2 video=uvesafb:mtrr:3,ywrap,1680x1050-24@60

ЧЯДНТ?


Ответ на: комментарий от Camel_Toe

Так он и не грузит с ext4. Boot раздел - sda1 c файловой системой ext2.

tr0ll
() автор топика

Думаю надо для начала

CONFIG_SATA_AHCI=y

и посмотреть бы lspci

xelftd
()

Давеча FreeBSD переносил на другой диск. Компилировал на ZFS, делал make distribution на подмонтированный UFS-раздел и...забыл написать туда /etc/fstab!

Ядро прогрузилось, естественно, не нашло корень, но зато спросило: «Откуда продолжить загрузку: введите ufs:/dev/da0... или пустую строку для перезагрузки».

Я ввёл: «ufs:/dev/ad4p3» (диск - SATA с GPT-разметкой и UFS2 на разделе под «/») и дальше понеслась загрузка. Потом перемонтировал корень в RW, написал новый /etc/fstab с GPT-метками, чтобы не редактировать fstab на новой машине. Следующая перезагрузка прошла без сюрпризов — всё подцепилось.

Покупайте наших слонов! Проверьте свой /etc/fstab.

iZEN ★★★★★
()

Решено. Прошу прощения, просто забыл про SCSI...

tr0ll
() автор топика
Ответ на: комментарий от Camel_Toe

> Так вроде не все grub'ы умеют грузить ext4.

Не тот случай. В описанном тобой случае было бы cannot load kernel или cannot find kernel. У топикстартера ядро прочитано (grub понял ФС), но после получения управления ядро не смонтировало корневую ФС и запаниковало. Дело НЕ В GRUB

no-dashi ★★★★★
()
Ответ на: комментарий от iZEN

> Проверьте свой /etc/fstab.

Чайник. Загрузка линукс-системы строится из нескольки стадий:

1. Чтение предзагрузчика (из MBR/Boot record)
2. Чтение загрузчика (драйвера ФС или карты блоков, чтобы потом прочесть ядро или конфиг загрузчика)
3. Чтение ядра (и загрузочных драйверов, например ЧТЕНИЕ образа initrd) загрузчиком
4. Старт ядра, инициализация драйверов с initrd ядром (в линуксе из initrd)
5. Монтирование корневой ФС
6. Запуск init с корневой ФС
7. Проверка и монтирование корневой ФС
8. Все остальное.

Так вот fstab нужен только начиная с 7-й стадии, а у топикстартера проблема на стадии 5. Иди учись.

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

Поправка: проверка и монтирование корневой ФС следует читать как проверка и монтирование корневой ФС в режиме чтения-записи.

no-dashi ★★★★★
()

я не уверен что при раздельных / и /boot партициях можно грузиться без initrd. У тебя пишется ошибка что не найдено устройство /dev/sda2, а как его ядро может увидеть если корень ещё не примаунчен?

pupok ★★
()
Ответ на: комментарий от devl547

потому что в /dev/ лежат базовые ноды устройств загрузки,
консоль и накопители, как минимум нужно хотя бы это, а потом уже после запуска udevd он создаст все остальное уже как свою файловую систему

Sylvia ★★★★★
()
Ответ на: комментарий от devl547

по моему ты лапшу нам на уши вешаешь :)
«root (hd0,0)» — значит все пути указываются относительно /dev/sda1, и там лежит только ядро (+ возможно initrd) и разные бесполезные файлы типа System.map или config. Ядро у TC называется «linux», вот он и указывает путь до него как /linux. А вот файла /dev/sda2 в файловой системе /dev/sda1 нет.

pupok ★★
()
Ответ на: комментарий от pupok

У меня:

/boot на /dev/sda1 (ext2)
/ на /dev/sda2 (reiser4)

граб:

title Zen Gentoo
root (hd0,0)
kernel /zen root=/dev/sda2 quiet fastboot resume=/dev/sda5

Все работает. ЧЯДНТ?

devl547 ★★★★★
()
Ответ на: комментарий от devl547

> Это указание раздела, с которого ядро грузить.

причём тут ядро? в grub-shell есть много команд для которых аргумент — файл. Можно каждый раз писать «linux (hd0,0)/linux», «initrd (hd0,0)/initrd», «cat (hd0,0)/config», «loopback (hd0,0)/image» а можно один раз указать что root'ом надо считать (hd0,0) и указывать путь относительно него. Так что «root» в grub-shell — это примерно тоже самое что «chroot» в Linux.

pupok ★★
()
Ответ на: комментарий от devl547

>title Zen Gentoo

root (hd0,0)

kernel /zen root=/dev/sda2 quiet fastboot resume=/dev/sda5




Все работает. ЧЯДНТ?



значит что-то от нас скрываешь. Ядру побарабану как называется утсройство /dev/sd**, в конечном итоге оно обращается к устройству по major и minor numbers. Объясни, как твоё ядро узнаёт major&minor файла /dev/sda2 до того как файловая система содержащая директорию /dev примоунчена? Если создать устройство /dev/pupkin с теми же major&minor что и /dev/sda2, в грубу сказать «root=/dev/pupkin» — система по-прежнему загрузится?

pupok ★★
()
Ответ на: комментарий от pupok

вспоминаю что вроде при компиляции в ядро прописывается по default текущее устройство с rootfs. Так что если ты скомпилишь ядро на одной машине где root=/dev/sda3, а потом перенесешь на другую машину с точно таким же железом, но где root=/dev/sda2 — то загрузиться такое ядро без initrd не сможет какие бы ты опции в grub.cfg не прописывал.

pupok ★★
()
Ответ на: комментарий от pupok

кстати в этом наверно и есть проблема ТС — он скомпилировал ядро когда у него вся система жила на /dev/sda1, и по default у него прописалось rootfs=(0,0) (первый диск, первый партишн). Потом он переформатировал диск, и хочет использовать тоже самое ядро. Но ни дефолтная rootfs пописаная в ядре (hd0,0) ни та что идёт в загрузочной строке /dev/sda2 не годится, о чём и сообщает довольно подробно kernel panic. Так что ТС может просто войти в систему с chroot, перекомпилировать ядро, и после этого «root=...» в загрузочной строке вообще будет не нужен, я по крайней мере его уже давно удалил, но у меня есть initrd.

pupok ★★
()
Ответ на: комментарий от pupok

>что вроде

Именно вроде. Обьясни тогда как я на основной системе собираю ядро для файлопомойки?

Разделы там абсолютно другие. и ядро грузится из /boot/zen

devl547 ★★★★★
()
Ответ на: комментарий от pupok

> как твоё ядро узнаёт

Не имею ни малейшего понятия. А еще это ядро у меня одно на два дистрибутива (Gentoo и Slitaz) плюс поддержка initrd выброшена за ненадобностью.

devl547 ★★★★★
()
Ответ на: комментарий от devl547

при загрузке все дистрибутивы выглядят одинаково, и если разметка диска однотипная — то вообще разницы нет, что gentoo, что Linux XP

pupok ★★
()
Ответ на: комментарий от devl547

ну так значит я таки кругом прав :)

на десктопе система грузится потому что rootfs=(0,1) зашита по default в самом ядре, и на строку «root=...» при загрузке ядро не обращает внимания. на сервере «rootfs=(0,1)» не работает, но зато есть устройство /dev/sda1, которое уже доступно, и поэтому работает строка «root=/dev/sda1»

pupok ★★
()
Ответ на: комментарий от pupok

Давай я для тестов строку root=.. на системе выброшу)

devl547 ★★★★★
()
Ответ на: комментарий от pupok

Чушь полная, так ни один LiveCD не загрузится. Посмотри Parted Magic, там initrd вроде даже не пользуется, а ничего, грузится нормально.

anonymous
()
Ответ на: комментарий от anonymous

LiveCD без initrd? это новое слово в животноводстве!

pupok ★★
()
Ответ на: комментарий от anonymous

> там initrd вроде даже не пользуется,
Увы, используется.

AITap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.