Bug 6816

Summary: mkinitrd generates the incomplete initrd for booting up from Silicon Image controller
Product: Sisyphus Reporter: Dmitry Katsubo <dma_k>
Component: mkinitrdAssignee: 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 Flags
Архив с логами + дополнительная информация none

Description Dmitry Katsubo 2005-05-11 18:02:11 MSD
Конфигурация:
На материнской плате Gigabyte GA-7N400 Pro2 имеется встроенный SATA контроллер
01:0d.0 Silicon Image Serial ATARaid Controller [ CMD/Sil 3112/3112A ] (rev 02)
с подключенным к нему SATA винчестером Segate.

# rpm -qa | grep mkinitrd
mkinitrd-2.9.4-alt1
# uname -a
Linux jim 2.6.11-std26-up-alt6

Проблема:
К сожалению, невозможно заставить грузиться с SATA винчестера. При загрузке
системы выводится:

Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA       Model: ST3200822AS       Rev: 3.01
  Type:   Direct-Access                      ANSI SCSI revision: 05

но НЕ происходит определение разделов:

 sda: sda1 sda2 sda3 sda4 < sda5 sda6 >

и в конце "Unable to mount root"

При использовании следующих изменений в /sbin/mkinitrd, позволяющих включить
ide_scsi в initrd, проблема разрешается:

--- /sbin/mkinitrd.orig 2005-03-29 01:54:21 +0300
+++ /sbin/mkinitrd      2005-03-29 01:55:38 +0300
@@ -144,7 +144,7 @@

 PRE_SCSI_MODNAMES="scsi_mod sd_mod unknown"
 IGNORE_MODNAMES="`NormalizedName "$IGNORE_MODNAMES"`"
-IGNORE_MODNAMES=" $IGNORE_MODNAMES ppa imm ide_scsi usb_storage"
+IGNORE_MODNAMES=" $IGNORE_MODNAMES ppa imm usb_storage"
 LOADED_MODNAMES=

 loopDev=
Comment 1 Sergey Vlasov 2005-05-11 20:04:25 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.
Comment 2 Dmitry Katsubo 2005-05-16 23:54:18 MSD
К сожалению, не получил сразу уведомления из 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)
Comment 3 Dmitry Katsubo 2005-05-16 23:55:57 MSD
Created attachment 890 [details]
Архив с логами + дополнительная информация
Comment 4 Sergey Vlasov 2005-05-17 23:00:08 MSD
Так, понятно.  Что указано в /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.
Comment 5 Dmitry Katsubo 2005-05-18 22:13:31 MSD
Да, вы были правы насчёт scsi_hostadapter: после добавления в него sata_sil
проблема решилась. Обсуждаемую проблему нужно учесть ещё в двух местах:
- инсталляторе
- при переходе от ядра 2.4 к 2.6

Испытать второй способ нету возожности, так как последняя доступная версия в
Sisyphus -- mkinitrd-2.9.4-alt1.
Comment 6 Sergey Vlasov 2005-05-18 22:34:56 MSD
(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.

Да, ещё не выложилось.
Comment 7 Vitaly Lipatov 2005-09-07 12:25:43 MSD
Вроде нормально