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

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

В BIOS у меня есть возможность выбора между 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.

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

1 ответ1

2

После того, как вы подтвердите, что контроллер поддерживается 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 (если вам интересно, и вы хотите проверить содержимое, продолжайте). В 64-битной системе Intel это /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 и других.

Повеселись!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .