Summary: | mkinitrd generates the incomplete initrd for booting up from Silicon Image controller | ||||||
---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | Dmitry Katsubo <dma_k> | ||||
Component: | mkinitrd | Assignee: | Michael Shigorin <mike> | ||||
Status: | CLOSED NOTABUG | QA Contact: | qa-sisyphus | ||||
Severity: | normal | ||||||
Priority: | P2 | CC: | led, vsu | ||||
Version: | unstable | ||||||
Hardware: | all | ||||||
OS: | Linux | ||||||
Bug Depends on: | 7386 | ||||||
Bug Blocks: | |||||||
Attachments: |
|
Description
Dmitry Katsubo
2005-05-11 18:02:11 MSD
ide_scsi не нужен для загрузки с SATA (более того, сейчас в ядрах 2.6.x он работает не совсем правильно). Попробуйте выполнить от root команду mkinitrd -fvd test.img 2.6.11-std26-up-alt6 >mkinitrd.log 2>&1 (с неизменённым /sbin/mkinitrd), после чего прицепите сюда полученный mkinitrd.log. К сожалению, не получил сразу уведомления из Bugzilla, поэтому затянул с ответом (то ли в prefs что-то не так, то ли почтовый сервер наш плох). Данная вами конфигурация не могла заработать в принципе, но я честно наступил на все грабли ещё раз. Итак, методика тестирования: --- Вернули назад mkinitrd: # patch -R -d / -p0 < initrd.diff patching file /sbin/mkinitrd Hunk #1 succeeded at 150 (offset 6 lines). --- Версия test1, без sata_sil.ko: # /sbin/mkinitrd -fvd initrd-2.6.11.img.test.1 2.6.11-std26-up-alt6 &> mkinitrd.log --- Версия test2, с sata_sil.ko, но без ide-scsi.ko: # /sbin/mkinitrd -fvd --with=sata_sil initrd-2.6.11.img.test.2 2.6.11-std26-up-alt6 &> mkinitrd-sil.log --- Пропатчили mkinitrd: # patch -d / -p0 < initrd.diff patching file /sbin/mkinitrd Hunk #1 succeeded at 150 (offset 6 lines). --- Полноценная рабочая версия test3. Она точно работает: # /sbin/mkinitrd -fvd --with=sata_sil initrd-2.6.11.img.test.3 2.6.11-std26-up-alt6 &> mkinitrd-sil-scsi.log После этого я создал ещё 3 записи в /etc/lilo.conf (см. add_info.txt в аттаче). Результаты загрузки (приведены кратко, полные сообщения можно проследить в прилагаемом add_info.txt в аттаче): [test1] hda: hda1 Using /lib/.../exportfs.ko Using /lib/.../xfs.ko VFS: Cannot open root device "803" or unknown-block(8,3) Please append a correct "root=" option Kernel panic... [test2] Using /lib/.../exportfs.ko Using /lib/.../xfs.ko Using /lib/.../scsi_mod.ko Using /lib/.../libata.ko Using /lib/.../sata_sil.ko ... ata1: dev 0 ATA, max UDMA/133, 390721968 sectors: lba48 ata1(0): applying Seagate errata fix ata1: dev 0 configured for UDMA/100 scsi0: sata_sil scsi1: sata_sil Vendor: ATA Model: ST3200822AS Rev: 3.01 Type: Direct-Access ANSI SCSI revision: 05 VFS: Cannot open root device "803" or unknown-block(8,3) Please append a correct "root=" option Kernel panic... [test3] (загрузка прилагается в dmesg в add_info.txt) Created attachment 890 [details]
Архив с логами + дополнительная информация
Так, понятно. Что указано в /etc/modules.conf в строке "probeall scsi_hostadapter ..."? Похоже, там только ide-scsi. Если же там есть какие-то условные операторы, подставляющие туда sata_sil в зависимости от версии ядра, они могли не сработать из-за Bug #6827 (если генерация initrd происходила при загруженном ядре 2.4.x); в mkinitrd-2.9.7-alt1 эта проблема устранена. Для загрузки с дисков SCSI (в том числе с устройств, использующих эмуляцию SCSI - именно таким образом работает драйвер sata_sil и вообще все драйверы libata), кроме драйвера контроллера, необходимо также загрузить модуль sd_mod (драйвер верхнего уровня для SCSI-дисков). mkinitrd добавляет sd_mod в initrd автоматически, но только если обнаруживает, что добавлен хотя бы один драйвер контроллера SCSI; если драйвер контроллера добавляется через --with или --preload, автоматическое добавление sd_mod не происходит. В mkinitrd < 2.9.5-alt1 автоматическое определение драйверов SCSI отсутствовало вовсе - загружались только драйверы, указанные в probeall scsi_hostadapter. Если список драйверов не был указан вовсе, или в нём содержались только драйверы, перечисленные в переменной IGNORE_MODNAMES, модуль sd_mod тоже не добавлялся в initrd. В mkinitrd >= 2.9.6-alt1 реализовано автоопределение драйверов для контроллеров SCSI/RAID (в том числе SATA) на шине PCI. Однако автоопределение выполняется только в том случае, если в modules.conf отсутствуют записи для scsi_hostadapter; если в списке probeall scsi_hostadapter указан хотя бы один модуль, используются модули только из этого списка. Модуль sd_mod добавляется в initrd в том случае, если хотя бы один модуль (либо из списка в scsi_hostadapter, либо из автоматически определённых модулей) является драйвером SCSI-контроллера (это определяется по зависимостям модуля). Таким образом, для решения данной проблемы необходимо исправить modules.conf: - либо добавить sata_sil в список probeall scsi_hostadapter, - либо установить mkinitrd >= 2.9.6-alt1, libhw-tools >= 0.2.12-alt1, после чего удалить из modules.conf записи о scsi_hostadapter - в этом случае будет работать автоопределение, но возможно изменение порядка устройств, если имеется несколько контроллеров. При ручном добавлении SCSI-драйверов в initrd через --preload или --with необходимо аналогичным образом добавить в initrd и модуль sd_mod. Да, вы были правы насчёт scsi_hostadapter: после добавления в него sata_sil проблема решилась. Обсуждаемую проблему нужно учесть ещё в двух местах: - инсталляторе - при переходе от ядра 2.4 к 2.6 Испытать второй способ нету возожности, так как последняя доступная версия в Sisyphus -- mkinitrd-2.9.4-alt1. (In reply to comment #5) > Да, вы были правы насчёт scsi_hostadapter: после добавления в него sata_sil > проблема решилась. Обсуждаемую проблему нужно учесть ещё в двух местах: > - инсталляторе Собственно, именно для него и делалась эта поддержка в mkinitrd (текущая версия нового инсталятора вообще не прописывает scsi_hostadapter в modules.conf). > - при переходе от ядра 2.4 к 2.6 На самом деле это действительно может быть важно при переходе с 2.4.26 и более старых версий при использовании контроллеров Silicon Image - в старых ядрах эти контроллеры работали через драйверы IDE. Для других контроллеров SATA либо уже использовалась эмуляция SCSI, либо вовсе не было поддержки в старых ядрах. > Испытать второй способ нету возожности, так как последняя доступная версия в > Sisyphus -- mkinitrd-2.9.4-alt1. Да, ещё не выложилось. Вроде нормально |