LINUX.ORG.RU

Не грузится при включённом телефоне

 


0

1

Если подключаю к компьютеру сотовый телефон по USB, при загрузке выскакивает ошибка, что не может найти диск /dev/sda1, предлагает на выбор 2 диска на sdb. Когда телефон отключён, грузится нормально.

Телефон Alcatel OT-910. Если не включать эмуляцию съёмного накопителя, lsusb его видит как

Bus 001 Device 002: ID 05c6:9017 Qualcomm, Inc.

Ядро 3.12.13. Дистрибутив Gentoo. С ядром 3.1.6 такой проблемы нет.

Соответствующие строки из menu.lst:

root (hd0,0)
kernel /boot/kernel-3.12.13 root=/dev/sda1 modprobe.blacklist=drm,drm_kms_helper,radeon,uvcvideo,ttm,videodev,videobuf2_core,videobuf2_memops,videobuf2_vmalloc

Куда копать?

P. S. Совсем забыл: у меня 2 раздела на этом жёстком диске: ext4 и swap. То есть телефон как-то становится sda, а жёсткий диск и его разделы становятся sdb*. Можно ли жёстко задать при загрузке поставить SATA устройства впереди USB?

P.P.S. Настройки BIOS на это не влияют. Задавая в командной строке ядра PARTUID можно загрузиться и с телефоном, и без, но от этого перестают работать настройки /etc/fstab и кое-какие скрипты.

root (hd0,0)
kernel /boot/kernel-3.12.13 root=PARTUUID=aeb28fcae71-d187-467b-8ef7-6dcd8b844701 modprobe.blacklist=drm,drm_kms_helper,radeon,uvcvideo,ttm,videodev,videobuf2_core,videobuf2_memops,videobuf2_vmalloc

★★★★★

Последнее исправление: question4 (всего исправлений: 3)
root=/dev/sda1

Я бы использовал root=UUID=..., UUID устройства можно посмотреть через blkid. Попробуйте создать копию загрузочной записи в menu.lst, и в этой копии указать root=UUID=...

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

Я бы использовал root=UUID=

Спасибо, так и собираюсь сделать. Но мне интереснее из-за чего так происходит.

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

Ещё для root=UUID=... придётся использовать initrd, который будет разбирать эту строку и делать то, что надо. Само по себе ядро такое не умеет.

Если диск размечен в GPT, то можно использовать root=PARTUUID=..., PARTUUID тоже можно посмотреть с помощью blkid.

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

Может, он телефон в качестве /dev/sda определяет? Чем чёрт не шутит. Когда два жёстких диска, например, у меня было, у меня они в зависимости от фазы луны определялись с буквами.

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

Но мне интереснее из-за чего так происходит.

Телефон становится sda, а винчестер sdb, потому что при загрузке устройство для телефона появилось раньше, чем для винчестера.

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

Может, он телефон в качестве /dev/sda определяет?

Именно.

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

Телефон становится sda, а винчестер sdb, потому что при загрузке устройство для телефона появилось раньше, чем для винчестера.

А как-то на это повлиять можно? Конфигом ядра? Командной строкой?

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

в бивисе укажи порядок загрузки правильный.

Он там уже правильный. Я даже попробовал перебросить винчестер со 2-го гнезда на 1-е — не помогло.

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

Если диск размечен в GPT, то можно использовать root=PARTUUID=..., PARTUUID тоже можно посмотреть с помощью blkid.

Уже не помню, как я его размечал. Если у меня диск 4 гигабайта, а blkid показывает PARTUUID, значит у меня GPT?

И можно ли грузить PARTUUID без initrd? — UPD: Можно!

question4 ★★★★★
() автор топика
Последнее исправление: question4 (всего исправлений: 2)
Ответ на: комментарий от question4

А как-то на это повлиять можно? Конфигом ядра? Командной строкой?

Вообще этим поведением управлять нельзя, потому что никто не гарантирует порядок, в котором будут появляться устройства, и время их инициализации.

Но в некоторых конкретных случаях можно, например, изменить конфиг ядра, чтобы ядро поддерживало только SATA, а остальные необходимые драйверы для других блочных устройств сделать модулями, тогда на этапе монтирования корня будут видны только SATA-винчестеры, и если он один, то он точно будет sda.

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

Тогда почему ядро 3.1.6 стабильно подключало телефон вторым, а 3.6.11 и 3.12.13 — стабильно первым?

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

Тогда почему ядро 3.1.6 стабильно подключало телефон вторым, а 3.6.11 и 3.12.13 — стабильно первым?

Значит, какой-то код в ядре поменялся, изменились тайминги.

Раньше винчестер мог появиться во время x±a, телефон мог появиться во время y±b, причём x+a < y-b. Теперь что-то поменяли в коде ядра, изменились тайминги, теперь y+b < x-a.

Что именно меняли в ядре в этих версиях, я не знаю, в любом случае рассчитывать на время появления устройств нельзя, никто никогда не гарантировал порядок.

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

Понятно. Спасибо за объяснение.

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