Вот такое сообщения я получаю, когда пробую установить Solaris. И так ругается на все 6 дисков, которые есть в сервере. Как итог: система не ставится, так как все диски в offline.
Мудрые коллеги подсказали, что это проблема контроллера Dell Perc H200, а точнее проблема энергосбережения, а так же подсказали решение , но оно уже годится для установленной системы.
Под FreeBSD под этот контроллер нету энергосбережения, поэтому там таких проблем нет и система на него ставится без проблем.
Тестовый стенд: сервер Dell R715, контроллер Dell Perc H200, диски SEAGATE ST9300653SS
Но как же тогда поставить ОС? Вот какой план (тоже подсказали мудрые коллеги):
1) создаём RAID1 из 2-х дисков (дело в том, что Perc H200 не позволяет создавать RAID0 из 1-го диска) через утилиту контроллера (не забудьте сделать его BOOT)
2) ставим ОС на этот рейд
3) после установки правим файл /kernel/drv/sd.conf
4) перегружаемся и делаем зеркальный пул rpool из рейда и любого оставшегося диска, дожидаемся синхронизации, делаем detach рейду, и опять attach уже другому диску.
5) после этого перегружаемся и удаляем рейд через утилиту контроллера.
А что делать, если дисков всего 2? Как быть? Об это читаем в самом конце в примечании “классный хак”, любезно предоставленным, одним из наших читателей.
И так, приступаем. Будем считать, что ОС уже стоит на железном RAID1. Нужно узнать модель дисков. Самый простой вариант – использовать утилиту sas2ircu:
# sas2ircu 0 DISPLAY
...
Device is a Hard disk
Enclosure # : 1
Slot # : 4
State : Optimal (OPT)
Size (in MB)/(in sectors) : 286102/585937499
Manufacturer : SEAGATE
Model Number : ST9300653SS
Firmware Revision : YS0A
Serial No : 6XN5SXSR
Protocol : SAS
Drive Type : SAS_HDD
...
Посмотрим на наши диски
# format
Searching for disks...
AVAILABLE DISK SELECTIONS:
0. c0t5000C5007171E03Fd0 <Unknown>
/scsi_vhci/disk@g5000c5007171e03f
1. c0t5000C50071731FA3d0 <Unknown>
/scsi_vhci/disk@g5000c50071731fa3
2. c0t5000C50071732A7Bd0 <Unknown>
/scsi_vhci/disk@g5000c50071732a7b
3. c0t5000C500715225EFd0 <Unknown>
/scsi_vhci/disk@g5000c500715225ef
4. c7t33E280EF5B5FF183d0 <Dell-Virtual Disk-1028-278.88GB>
/pci@0,0/pci1002,5a18@4/pci10b5,8624@0/pci10b5,8624@0/pci1028,1f1e@0/iport@v0/disk@w33e280ef5b5ff183,0
Specify disk (enter its number): ^C
Как видим, они определились как Unknown. Далее, вносим такую строку в файл /kernel/drv/sd.conf:
sd-config-list= "SEAGATE ST9300653SS","power-condition:false";
Делаем
# bootadm update-archive
и перегружаемся.
Для нескольких дисков команда выглядит так:
sd-config-list= "SEAGATE ST9300653SS","power-condition:false", "SEAGATE ST33000650SS","power-condition:false";
Смотрим статус нашего пула
# zpool status rpool pool: rpool state: ONLINE scan: resilvered 36.9G in 0h3m with 0 errors on Wed Feb 26 11:12:3 2014 config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c7t33E280EF5B5FF183d0 ONLINE 0 0 0 errors: No known data errors
Смотрим наши диски
# format
Searching for disks...
AVAILABLE DISK SELECTIONS:
0. c0t5000C5007171E03Fd0 <SEAGATE-ST9300653SS-YS0A-279.40GB>
/scsi_vhci/disk@g5000c5007171e03f
1. c0t5000C50071731FA3d0 <SEAGATE-ST9300653SS-YS0A cyl 107799 alt 2 hd 4 sec 1358>
/scsi_vhci/disk@g5000c50071731fa3
2. c0t5000C50071732A7Bd0 <SEAGATE-ST9300653SS-YS0A cyl 107799 alt 2 hd 4 sec 1358>
/scsi_vhci/disk@g5000c50071732a7b
3. c0t5000C500715225EFd0 <SEAGATE-ST9300653SS-YS0A cyl 107799 alt 2 hd 4 sec 1358>
/scsi_vhci/disk@g5000c500715225ef
4. c7t33E280EF5B5FF183d0 <Dell-Virtual Disk-1028-278.88GB>
/pci@0,0/pci1002,5a18@4/pci10b5,8624@0/pci10b5,8624@0/pci1028,1f1e@0/iport@v0/disk@w33e280ef5b5ff183,0
Specify disk (enter its number): ^C
Теперь наши диски видятся нормально. Делаем зеркальный пул:
# zpool attach rpool c7t33E280EF5B5FF183d0 c0t5000C5007171E03Fd0
Make sure to wait until resilver is done before rebooting.
По окончанию удаляем RAID1 из пула и добавляем обычный диск:
# zpool detach rpool c7t33E280EF5B5FF183d0 # zpool status rpool pool: rpool state: ONLINE scan: resilvered 36.9G in 0h3m with 0 errors on Wed Feb 26 11:12:3 2014 config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c0t5000C5007171E03Fd0 ONLINE 0 0 0 errors: No known data errors # zpool attach rpool c0t5000C5007171E03Fd0 c0t5000C50071731FA3d0 Make sure to wait until resilver is done before rebooting. # zpool status rpool pool: rpool state: ONLINE scan: resilvered 36.9G in 0h3m with 0 errors on Wed Feb 26 15:11:36 2014 config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c0t5000C5007171E03Fd0 ONLINE 0 0 0 c0t5000C50071731FA3d0 ONLINE 0 0 0 errors: No known data errors
Классный хак.
Тут мы меняем налету sd-config-list с помощью такой последовательности:
shell echo 'sd-config-list= "SEAGATE ST9300653SS","power-condition:false";' >> /kernel/drv/sd.conf update_drv -vf sd exit install shell beadm mount solaris /a echo 'sd-config-list= "SEAGATE ST9300653SS","power-condition:false";' >> /a/kernel/drv/sd.conf bootadm update-archive -R /a reboot
PS. в файле sd.conf можно прописывать различные параметры. К примеру,
"HGST HUSMH8020BSS204", "throttle-max:32,disksort:false,power-condition:false,physical-block-size:4096",
"", "retries-timeout:1,retries-busy:1,retries-reset:1,retries-victim:2",
"*INTELSSD*","disksort:false, cache-nonvolatile:true, physical-block-size:8192";
Больше параметров можно посмотреть здесь
PARAMETER | DESCRIPTION | VALUE |
sd_max_xfer_size | Restrict SCSI disk driver maximum I/O size to 1MB | 0x100000 |
sd-config-list | SCSI inquiry storage response, the VPD for PowerStore LUNs | DellEMC PowerStore |
throttle-max | Maximum SCSI queue depth setting | 64 |
physical-block-size | Optimal LUN block size in bytes | 4096 |
disksort | SCSI device command optimization | false |
cache-nonvolatile | Indicate whether the storage has a nonvolatile cache | true |