Как установить Solaris на «поддельный RAID», также известный как «AHCI + RAID» SATA / SAS-контроллер?

1374
Johannes

Система установки Solaris (текстовый установщик, оперативный установщик) не распознает контроллер AHCI, хотя контроллер указан в списке поддерживаемых на официальном HCL? Как мне установить Solaris, тогда?

Очевидно, что драйвер будет работать, но он просто отказывается это делать, потому что контроллер объявляет себя с неправильным классом оборудования (контроллер рейда) или чем-то еще, из-за этой глупой фальшивой операции рейда. Каким-то образом мне наконец-то удалось подключить правильный драйвер и установить Solaris, но установленная система не загружается! Как мне сохранить вложение драйвера?

В биосе у меня есть возможность выбирать между IDEа AHCI+RAID, но нет AHCI. Я мог бы использовать IDEрежим, но, видимо, это стоит много производительности. Речь идет о контроллере Intel 631xESB / 632xESB SATA AHCI на рабочей станции Hewlett Packard xw8400. Этот набор микросхем также используется на некоторых рабочих станциях Apple, и эта проблема «фальшивого рейда» также применяется там, AFAIK. Официальный список совместимого оборудования (HCL) гласит, что этот контроллер сертифицирован .

Интернет предлагает залатать сцену grub1. Это не очень хорошо работает, потому что (во-первых) сборочная система grub кажется сломанной (objcopy не работает), и я не нашел ни одного дистрибутива Linux, на котором это работает. Затем (во-вторых) Solaris 11 перешел с grub v1 на v2, и stage1 там больше не существует, и (в-третьих) этот подход не сработает при загрузке el-torito с установочного DVD.

Итак, как я могу позволить правильному драйверу подключиться к контроллеру и сохранить его после установки?

0

1 ответ на вопрос

2
Johannes

После того, как вы подтвердите, что контроллер поддерживается Solaris, вам нужно знать две части информации. Сначала имя водителя. Согласно HCL, контроллер SATA / AHCI 631xESB / 632xESB поддерживается ahciдрайвером Solaris .

Второй бит информации - это идентификатор оборудования, к которому должен подключиться драйвер. Загрузите установочный носитель. Текстовый установщик Solaris 11 просто в порядке. Во время загрузки пока не выбирайте «установить», но получите оболочку / терминал. Если вы используете живой установщик, просто откройте Терминал из меню.

Выполните prtconf -v | lessи найдите свой контроллер. Подсказка: нажмите /и введите RAID; Это быстро указало мне на этот вывод:

[...] pci103c,3015, instance #0 Driver properties: name='sata' type=int items=1 dev=none value=00000001 [...] name='compatible' type=string items=7 value='pci8086,2682.103c.3015.9' + 'pci8086,2682.103c.3015' + 'pci103c,3015' + 'pci8086,2682.9' + 'pci8086,2682' + 'pciclass,010400' + 'pciclass,0104' name='model' type=string items=1 value='RAID controller' [...] 

Вы хотите выбрать наиболее конкретное значение из compatibleзаписи. В этом случае я выбрал pci8086,2682.103c.3015.9. Если вы выберете менее конкретный идентификатор, драйвер может в итоге подключиться к оборудованию, к которому он не должен подключаться. В своих ранних попытках я выбрал, pci8086,3015что привело к подключению драйвера к контроллеру SAS / SATA, а также к контроллеру USB. Это создало адские сообщения об ошибках и подсистемы сбоев.

Тогда давайте прикрепим драйвер:

root@solaris:~# update_drv -a -i 'pci8086,2682.103c.3015.9' ahci 

Подождите несколько секунд и следите за сообщениями об ошибках на консоли. Проверьте вывод dmesg, должно быть несколько сообщений, которые относятся к контроллеру и дискам на этом контроллере. Также проверьте вывод fmadm faulty: не должно быть никакого вывода. Проверьте вывод cfgadm -s "select=type(disk)", вы должны увидеть ваши диски.

Теперь вы можете установить Solaris как обычно. Выйдите из оболочки / терминала и продолжайте.

После установки вам необходимо обновить boot_archiveотображение с идентификатором контроллера на драйвер. Во время установки update_drvкоманда добавила строку в файл /etc/driver_aliasesобраза установщика. Вам необходимо воспроизвести это в соответствующем файле на установленном образе, а затем обновить загрузочный архив.

Теперь driver_aliasesмоя система установки выглядит следующим образом:

root@solaris:~# tail -3l /etc/driver_aliases zyd "usbace,1211" zyd "usb13b1,24" ahci "pci8086,2682.103c.3015.9" 

Чтобы скопировать эту строку в установленную систему, вам снова понадобится оболочка. Возможно, вам придется перезагрузить и импортировать пул. Откройте оболочку на образе текстового установщика или терминал на образе установщика в реальном времени, снова подключите драйвер (при необходимости), импортируйте rpool и смонтируйте загрузочную среду в пустой каталог:

root@solaris:~# update_drv -a -i 'pci8086,2682.103c.3015.9' ahci root@solaris:~# zpool import rpool root@solaris:~# mkdir /tmp/a root@solaris:~# beadm mount solaris /tmp/a 

Это предполагает, что вызывается среда загрузки, solarisкоторая используется по умолчанию. Вы можете перечислить все загрузочные среды с beadm list. Просто чтобы убедиться, что вы все делаете правильно, создайте diff из файла driver_aliases:

root@solaris:~# diff -u /tmp/a/etc/driver_aliases /etc/driver_aliases 

Если это выглядит хорошо, добавьте волшебную строку:

root@solaris:~# cp /tmp/a/etc/driver_aliases /tmp/a/etc/driver_aliases.backup root@solaris:~# tail -1l /etc/driver_aliases >> /tmp/a/etc/driver_aliases 

Проверьте еще раз, если файл закончился хорошо. Это сопоставляет контроллер с драйвером, но это сопоставление доступно только для уже загруженной системы. Ваша система должна загрузиться с того самого контроллера, правда? Вам необходимо обновить загрузочный архив. Это уменьшенная корневая файловая система, которая содержит все, что нужно системе для загрузки до вехи, когда она может переключиться на настоящую корневую файловую систему. Загрузочный архив представляет собой архив iso9660 со сжатыми файлами gzip (если вам интересно, и вы хотите проверить содержимое, продолжайте). На Intel 64-битной системе это так /boot/platform/i86pc/amd64/boot_archive.

Последняя магическая команда:

root@solaris:~# bootadm update-archive -v -R /tmp/a cannot find: /etc/cluster/nodeid: No such file or directory cannot find: /etc/devices/mdi_ib_cache: No such file or directory cannot find: /etc/devices/retire_store: No such file or directory changed /etc/driver_aliases updating /platform/i86pc/boot_archive Unable to extend /platform/i86pc/boot_archive... rebuilding archive Successfully created /platform/i86pc/boot_archive updating /platform/i86pc/amd64/boot_archive Unable to extend /platform/i86pc/amd64/boot_archive... rebuilding archive Successfully created /platform/i86pc/amd64/boot_archive 

Не беспокойтесь слишком сильно об этих сообщениях об ошибках. Это работало нормально для меня.

Далее размонтируем и перезагрузим:

root@solaris:~# beadm unmount solaris root@solaris:~# zpool export rpool root@solaris:~# init 6 

Я провел дни, исследуя в Интернете об этой проблеме. В конце я прочитал много документации по процессу загрузки Solaris и нашел это решение. Это письмо выходит из моей головы, некоторые вещи могут быть не точными. Не стесняйтесь комментировать или улучшать!

Этот подход также должен работать на OpenIndiana, OpenSolaris, IllumOS и других.

Повеселись!

Похожие вопросы