LINUX.ORG.RU

Ubuntu + 6 HDD - странности с именованием устройств


0

0

Давняя проблема, решил наконец разобраться.

Стоит на сервере Ubuntu 9.04 (сервер в том числе вещает видео с тюнера в сеть с помощью VLC, необходимо новое ядро). Из аппаратной начинки - плата на базе чипсета nvidia, встроенный SATA-контролер, в нем установлены 4 идентичных жестких диска Seagate 400Гб, в PCI-X порт установлен дополнительно контролер 2SATA/1 PATA JMicron, в нем - еще 2 точно таких же жестких диска. Разумеется, BIOS не видит JMicron и два диска, которые на нем сидят.

Загрузка происходит с первого SATA диска на встроенном контролере, грузится ядро, затем монтируется файловая система и все - тупик, init не найдет, /dev, /sys и т.п. - тоже. Помогает только отключение двух дисков на дополнительном контролере, загрузка и горячее включение - тогда все работает как часы.

Для исключения глюков GRUB'a решил попробовать lilo. Эффект тот же самый: грузится ядро, монтируется файловая система (как он думает - корневая) и те же самые проблемы. С помощью простых манипуляций в Busybox удалось выяснить, что после загрузки неожиданно два устройства на дополнительном контролере неожиданно становятся первыми по алфавиту, а 4 на встроенном - последними, т.е.: до загрузки ядра:

(sda sdb sdc sdd)

после загрузки:

sda sdb (sdc sde sdd sdf)

- где в скобках указаны устройства на встроенном контролере.

В итоге монтируется раздел на /dev/sda1 на дополнительном винте вместо нужного, который теперь /dev/sdc1. Мало того, разделы на sdc, sde, sdd, sdf вообще не видны из busybox, тупая смена имени корневого раздела в grub/lilo - не помогает (монтирование по UUID почему-то вообще не срабатывает - будто бы идентификаторы одинаковые).

Загрузка с liveCD gparted позволила выяснить, что четыре жестких диска на встроенном контролере хоть и видятся, но монтироваться ни в какую не хотят: Device busy, mount -vvv не дал ничего подозрительного, кроме этой фразы (два диска на дополнительном контролере при этом работают).

Ядро ubuntu - 2.6.28, gparted livecd кажется 2.6.29.

Как решить такую проблему не прибегая каждый раз к отключению двух жестких дисков на дополнительном контролере при перезагрузки (которая, к слову, и происходит-то редко (обновление ядра), но оставлять так тоже нельзя)?

★★★

В libata устройства именуются не в порядке подключения (это просто бессмысленно из-за поддержки горячего подключения/отключения), а в порядке инициализации. Иными словами, sda займёт тот диск, контроллер которого "взлетит" первым. Это проблема решается монтированием по UUID'ам или меткам разделов. Ещё в LVM очень удобное именование разделов.

> Для исключения глюков GRUB'a решил попробовать lilo. Эффект тот же самый: грузится ядро, монтируется файловая система (как он думает - корневая) и те же самые проблемы.


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

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

UUID не спасает.

>Это проблема решается монтированием по UUID'ам или меткам разделов.

>монтирование по UUID почему-то вообще не срабатывает - будто бы идентификаторы одинаковые


Говорит, что не помогает.

Camel ★★★★★
()
Ответ на: UUID не спасает. от Camel

>> монтирование по UUID почему-то вообще не срабатывает - будто бы идентификаторы одинаковые

> Говорит, что не помогает.


"Не срабатывает" - это как? Ошибку выдаёт? Требуются подробности.

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

UUID не помогает. По умолчанию все через него. Но почему-то не работает.

Кажется, даже нашел почему, но это уже тупик: если не отключить ВСЕ диски, кроме загрузочного, корневой раздел не монтируется, а в busybox вообще в /dev только имена устройств и нет разделов (то есть, sda, sdb, sdc, sdd, но нет sda1, sda5 и т.п.)

Хочу попробовать поменять порядок инициализации контролеров, так как судя по логам модуль для jmicron грузится первым, авось поможет.

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

Не срабатывает - это выдает init not found К сожалению, мне бегать каждый раз в серверную за логами слишком долго.

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

> Не срабатывает - это выдает init not found К сожалению, мне бегать каждый раз в серверную за логами слишком долго.

И всё? Значит монтирование проходит нормально. Может ты UUID'ы перепутал?

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

Я их не трогал даже. Если перепутал, то инсталлятор убунты. Хотя вроде по fstab проверял UUID раздела - совпадал. Скорее я ошибку перепутал.

Сейчас попробую реанимировать (убрать lilo с неверным root, установить обратно grub) и отпишусь.

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

Ничего не перепутал. С UUID все в порядке, ядро пытается монтировать, но без отключения ВСЕХ дисков выдает что-то про inode (дословно не помню, но вроде incorrect inode). Пытаюсь руками примонтировать из busybox - та же петрушка, что-то с fs не в порядке (корневого раздела sda1 нет в /dev, только sda, что пугает). Попытался изменить порядок загрузки модулей, но их нет. Видимо, вкомпилированы в ядро (модули sata_nv и pata_jmicron). Остался последний вариант: попробовать загрузиться с отключенным вообще контролером JMicron, если пройдет, дело в нем. Нет - баги ядра.

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

Ничего не помогло, потратил полдня, вернулся к тому, с чего начал. Плюс VLC отказался нормально работать. С какого-то хрена опять нужно видеостандарт для тюнера через параметры модуля ядра передавать, в прошлом убунту все работало прямо из vlc (standard=17). Плюс в 1.0.1 поломали вообще работу с v4l2. Короче, лучше бы не трогал.

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

выкинь из initrd модуль поддержки jmicron и будет тебе щастье.

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

4 диска включенные во встроенный контролер с отключением дополнительного дают тот же эффект (приходится отключать 3 диска).

Модуль для pata_jmicron в ядро вкомпилирован, нигде его нету, кроме логов.

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

> Модуль для pata_jmicron в ядро вкомпилирован, нигде его нету, кроме логов.

тогда, имхо, остается только ядро рекомпилить.

isden ★★★★★
()

а) воткни контроллер в другой слот б) проблема имхо в том, что нумерация дисков BIOS и нумерация ядром отличаются

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

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

>если не отключить ВСЕ диски, кроме загрузочного, корневой раздел не монтируется

Дак в каком варианте загружается? Все диски кроме загрузочного или только диски на дополнительном контроллере.

Проверьте, что UUID на разных файловых системах разные, "tune2f -l /dev/hda1" и т.д. а то может вы копировали разделы с помощью dd.

>а в busybox вообще в /dev только имена устройств и нет разделов (то есть, sda, sdb, sdc, sdd, но нет sda1, sda5 и т.п.)

А в dmesg что? Ядро то видит разделы?

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

Грузится только с __одним__ подключенным диском на встроенный контролер, разумеется. Все остальные варианты не работают (в том числе вырубания дополнительного jmicron - он вообще никак не влияет).

В dmesg в busybox определяются все SATA устройства, которые подключены. Информации о разделах - только о загрузочном (что-то типа bad journal inode, та же ошибка при попытке вручную смонтировать из busybox). Разделы ни в /dev/disk/by-uuid, ни в в виде /dev/sd?? не появляются, кроме корневого раздела, который присутствует только в by-uuid, но все равно не монтируется.

Так же отмечу, что не монтируются разделы на 4 дисках встроенного контролера (в случае подключения > 2 дисков) даже с LiveCD ubuntu - выдает, что раздел занят или уже примонтирован (чего нету, mount ничего подобного не выдает).

В общем проблема в том, что ядро linux не может получить доступ ни к одному из 4 дисков встроенного в плату ASUS M2NPV-VM контролера, если подключено более одного устройства.

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

UUID.

Какой развесистый глюк. Таки UUID'ы у чего-нибудь с чем-нибудь не совпадают? Разделов, LV?

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

БП 430 Вт, должно хватать. UUID ни с чем не совпадают. LVM, RAID не используется.

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

То есть, если загрузиться с CD и с самого начала подключить более 1-го винта, то нельзя сделать даже dd if=/dev/sda of=/dev/null? Пожет попробовать делать ресет контроллера дисков. Правда не знаю как, может вынести поддержку дисков в модуль и пробовать загрузить/выгрузить его...

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

На счет dd не знаю, но простое cat /dev/sda работает, думаю и dd тоже. Но вот монтироваться ни в какую не хочет (пробовал два разных LiveCD). Похоже на проблему в ядре. Как нибудь на досуге доковыряю ее подробнее и напишу отчет.

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