Como instalar o Solaris em um “falso RAID” a.k.a “AHCI + RAID” Controlador SATA / SAS?

0

O sistema de instalação do Solaris (instalador de texto, instalador ao vivo) não reconhece o controlador AHCI, embora o controlador esteja explicitamente listado como suportado na HCL oficial? Como faço para instalar o Solaris?

Aparentemente o driver funcionaria, mas ele simplesmente se recusa a fazê-lo, porque o controlador se anuncia com a classe de hardware errada (controlador de raid) ou algo assim, por causa dessa coisa boba de ataque falso. De alguma forma eu finalmente consegui conectar o driver correto e instalar o Solaris, mas o sistema instalado não inicializa! Como faço para persistir o anexo do driver?

No BIOS, tenho a possibilidade de escolher entre IDE e AHCI+RAID , mas não AHCI . Eu poderia usar o modo IDE , mas aparentemente isso custa muito desempenho. O controlador em questão é o controlador Intel 631xESB / 632xESB SATA AHCI em uma Workstation xw8400 da Hewlett Packard. Este chipset também é usado em algumas estações de trabalho da Apple e esse problema de "fake raid" também se aplica lá, AFAIK. A lista oficial de compatibilidade de hardware (HCL) diz que este controlador é certificado .

A internet sugere que o patch do palco do grub1. Isso não funciona bem, porque (primeiro) o sistema de compilação do grub parece estar quebrado (o objcopy não funciona) e eu não encontrei nenhuma distribuição Linux na qual isso funcionasse. Então (em segundo lugar) o Solaris 11 mudou do grub v1 para o v2 e o stage1 não existe mais e (em terceiro lugar) essa abordagem não funcionaria bem com o bootstrap de um DVD de instalação.

Então, como deixo o driver correto se conectar ao controlador e persistir além do tempo de instalação?

    
por Johannes 23.08.2013 / 18:26

1 resposta

2

Depois de confirmar que o controlador é suportado pelo Solaris, existem duas informações que você precisa saber. Primeiro o nome do motorista. De acordo com a HCL, o controlador 631xESB / 632xESB SATA / AHCI é suportado pelo driver ahci do Solaris.

O segundo bit de informação é o identificador de hardware ao qual o driver deve anexar. Inicialize o meio de instalação. O instalador de texto do Solaris 11 está bem. Durante a inicialização, não escolha "instalar" ainda, mas obtenha um shell / terminal. Se você usar o instalador ao vivo, basta abrir um Terminal no menu.

Execute prtconf -v | less e procure seu Controlador. Dica: Pressione / e digite RAID ; Isso rapidamente me indicou essa saída:

[...]
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'
[...]

Você deseja escolher o valor mais específico da entrada compatible . Neste caso, escolhi pci8086,2682.103c.3015.9 . Se você escolher um identificador que seja menos específico, o driver poderá acabar anexando ao hardware que não deve ser anexado. Em minhas primeiras tentativas, escolhi pci8086,3015 , o que fez com que o driver fosse anexado ao controlador SAS / SATA, mas também ao controlador USB. Isso criou um monte de mensagens de erro e subsistemas para falhar.

Então, vamos anexar o driver:

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

Aguarde alguns segundos e observe as mensagens de erro no console. Verifique a saída de dmesg , deve haver algumas mensagens relacionadas ao controlador e aos discos naquele controlador. Verifique também a saída de fmadm faulty : não deve haver saída. Verifique a saída de cfgadm -s "select=type(disk)" , você deverá ver seus discos.

Agora você pode instalar o Solaris como de costume. Saia do shell / terminal e continue.

Após a instalação, você precisa atualizar o boot_archive com o mapeamento do identificador do controlador para o driver. No momento da instalação, o comando update_drv adicionou uma linha ao arquivo /etc/driver_aliases na imagem do instalador. Você precisa reproduzir isso no arquivo correspondente na imagem instalada e, em seguida, atualizar o boot_archive.

O driver_aliases no meu sistema de instalação é assim agora:

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

Para copiar esta linha para o sistema instalado, você precisa de um shell novamente. Você pode precisar reiniciar e importar o rpool. Abra um shell na imagem do instalador de texto ou em um terminal na imagem do instalador ao vivo, conecte o driver novamente (se necessário), importe o rpool e monte o ambiente de inicialização em um diretório vazio:

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

Isso pressupõe que o ambiente de inicialização seja chamado de solaris , que é o padrão. Você pode listar todos os ambientes de inicialização com beadm list . Apenas para ter certeza de fazer a coisa certa, faça um diff dos arquivos driver_aliases:

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

Se isso parece bom, então acrescente a linha mágica:

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

Verifique novamente se o arquivo acabou bem. Isso mapeia o controlador para o driver, mas esse mapeamento está disponível apenas para um sistema já inicializado. Seu sistema deve iniciar a partir desse mesmo controlador, certo? Você precisa atualizar o boot_archive. Este é um sistema de arquivos raiz reduzido que contém tudo o que o sistema precisa para inicializar um marco quando ele pode mudar para o sistema de arquivos raiz real. O arquivo de inicialização é um arquivo iso9660 com arquivos compactados gzip (caso você esteja curioso e queira inspecionar o conteúdo, vá em frente). No sistema Intel de 64 bits, isso é /boot/platform/i86pc/amd64/boot_archive .

O último comando mágico é:

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

Não se preocupe muito com essas mensagens de erro. Funcionou bem para mim.

Em seguida, desmonte e reinicialize:

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

Passei dias pesquisando na internet sobre esse problema. No final, li muita documentação sobre o processo de inicialização do Solaris e descobri essa solução. Este artigo surge da minha cabeça, algumas coisas podem não ser precisas. Sinta-se à vontade para comentar ou melhorar!

Essa abordagem também deve funcionar em OpenIndiana, OpenSolaris, IllumOS e outros.

Divirta-se!

    
por 26.08.2013 / 09:35