После того, как вы подтвердите, что контроллер поддерживается 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 и других.
Повеселись!