В случае с Slackware 12.0 (2.6.21.5) работало, в 12.1 (2.6.24.5) перестало.Теперь по порядку:
Имеем USB винт 40Gb и произвольный комп.
Отрубаем внутренние винты для корректности раздачи имен дисков (/dev/sd*) на стадии установки.
Втыкаем usb винт и ставим с компактов Slackware 12.0.
Для чистоты эксперимента юзаем полную установку.
В lilo передаем ядру параметр rootdelay=10.
В биосе ставим загрузку с этого винта.
Видим, как кернел подождал 10 секунд, нашел usb винт и назначил ему имя sda, и только потом раздает имена sata винтам (sdb, sd*...), если таковые имеются.
Проверено и с внутренними sata винтами, и без них, т.е. имя sda выдается винту, с которого стартовал кернел.
Теперь те же пляски с Slackware 12.1.
Всё установили точно также.
Если внутренний винт оставить отключенным - грузится, не спотыкается.
Если внутренний sata винт включить и в биосе явно указать загрузку с внешнего - стартует загрузчик с usb винта и с него же подымает кернел, все хорошо.
Далее видим, как кернел ждет 10 секунд и дает usb винту имя sdb! =_(
Внутренний винт получил имя sda и кернел паникует.
Гуглю уже который день...
Пробовал в загрузчике и fstab указывать винт через /dev/disk/by-uuid и /dev/disk/by-id. Пишет cannot open root device "802" и высыпает листинг sd* устройств, где 802 - раздел внутреннего винта, 812 - искомый раздел. Указания по уидам не спасают.
Соответственно, от смены загрузчика на grub картина не улучшилась.
Пытался угадать/придумать какой-нить параметр ядра, skipsata, nosata или подобные, чтобы запретить кернелу цеплять sata диски, пока не примонтирован root-раздел - разумеется, не вышло.
Вопрос: почему такая лажа и в каком месте лечить? Как заставить кернел выдать имя sda тому винту, с которого он загружен?