Substituindo um disco com falha em um pool do ZFS

0

Eu tenho um grande pool de discos ZFS; 3 vdevs RAIDZ2 aninhados.

Estou documentando o processo de substituição de um disco com falha por meus colegas e, assim, simulei uma falha de disco removendo um disco do host.

De fato, o vdev ao qual o disco pertencia ficou degradado e o disco não estava disponível.

Eu delineei o disco assim ...

zpool offline diskpool sdo

Um rápido 'zpool status' mostra o disco como offline ... até aqui tudo bem.

Substitui o disco e confirmei no meu controlador SATA que o novo disco foi detectado, o que era. Então eu tentei obter o Linux para reexaminar o barramento scsi para detectar o disco. É aqui que meu primeiro problema ocorre.

Tanto quanto eu sei, o seguinte comando é usado para encontrar o barramento de host correto para redigitalizar ...

grep mpt /sys/class/scsi_host/host?/proc_name

No entanto, no meu sistema Centos 7.2, este comando não tem saída. Não erro, apenas me dá saída nula e aguarda o meu próximo comando.

Estou usando vários cartões especializados que me permitem conectar muitos dispositivos sata. Eu normalmente procuraria novamente o barramento com

echo "- - -" > /sys/class/scsi_host/hostX/scan

Onde hostX é o barramento de host correto, mas como não consigo encontrar o barramento de host, não consigo concluir esta etapa.

Existe outra maneira de obter essa informação ou o comando mudou no Centos 7.2 ou algo assim?

Além disso, optei por reiniciar a máquina para permitir que eu continuasse testando. Após uma reinicialização, o pool do ZFS não foi anexado. Eu tive que importá-lo manualmente com 'zpool import diskpool'. Isso funcionou bem, mas estranhamente, uma vez importado, se eu fizer 'zpool status', não vejo mais os IDs de dispositivos como ele me mostrava antes ...

 raidz2-2                            ONLINE       0     0     0
        /dev/sdd                     ONLINE       0     0     0
        /dev/sde                     ONLINE       0     0     0
        /dev/sdf                     ONLINE       0     0     0
        /dev/sdg                     ONLINE       0     0     0

Em vez disso, parece ter os números de série da unidade ...

      raidz2-2                            ONLINE       0     0     0
        ata-ST8000AS0002-1NA17Z_Z840DG66  ONLINE       0     0     0
        ata-ST8000AS0002-1NA17Z_Z840DVE0  ONLINE       0     0     0
        ata-ST8000AS0002-1NA17Z_Z840CQFB  ONLINE       0     0     0
        ata-ST8000AS0002-1NA17Z_Z840DP2V  ONLINE       0     0     0

Isso causará um problema no futuro, como se um novo disco falhe, eu vou lutar para identificar o disco correto para substituir.

Existe uma maneira de mudar isso de volta para que eu mostre o ID do dispositivo novamente?

Obrigado antecipadamente!

    
por John 01.04.2016 / 13:52

1 resposta

3

O ZFS detecta discos não pelo seu nome no sistema de arquivos, mas pelo seu UUID que é gravado no disco (ou pelo menos algo semelhante - não tem 100% de certeza de que é realmente um UUID). Quando zpool import é executado, os discos são enumerados, o ZFS recria todos os pools e, em seguida, usa o nome do dispositivo (sem realmente incluir qualquer diretório IME, geralmente é algo como sda em vez de /dev/sda ) na saída zpool status . Como tal, se você mover as unidades ao redor (ou se o kernel movimenta as unidades, o que pode acontecer com os kernels modernos no hardware moderno), o zpool ainda detectará os discos na mesma ordem em que eles antes; Os discos que apareceram primeiro na saída aparecerão primeiro na saída, mesmo que o kernel não os enumere nessa saída.

O que aconteceu com você aqui provavelmente é que, devido ao fato de que o original zpool import não funcionou, o kernel pôde concluir sua inicialização, udev fez muito mais trabalho e, quando você fez a manual zpool import , a enumeração padrão de todos os seus discos acabou por ter os primeiros baseados em números de série, em vez dos números sdX . Provavelmente, na próxima vez que você reinicializar a máquina, os nomes usados retornarão ao esquema sdX .

Felizmente, resolver os nomes de um esquema de nomenclatura para outro é bastante simples:

wouter@gangtai:/dev/disk/by-id$ ls -l
total 0
lrwxrwxrwx. 1 root root  9 Mar 31 18:15 ata-SAMSUNG_MZ7TE256HMHP-00004_S1RKNSAFC04685 -> ../../sda
lrwxrwxrwx. 1 root root 10 Mar 31 18:15 ata-SAMSUNG_MZ7TE256HMHP-00004_S1RKNSAFC04685-part1 -> ../../sda1
lrwxrwxrwx. 1 root root  9 Mar 31 18:15 wwn-0x50025388a089e89c -> ../../sda
lrwxrwxrwx. 1 root root 10 Mar 31 18:15 wwn-0x50025388a089e89c-part1 -> ../../sda1

Existem vários esquemas de nomenclatura ( by-id , by-uuid e by-path ), que podem ser encontrados em /dev/disk .

Tendo dito tudo isso, devo dizer que não concordo com sua afirmação de que seria mais fácil descobrir qual disco é qual, observando os nomes sdX . Os kernels modernos não atribuem mais nomes de dispositivos estáticos a dispositivos específicos; É por isso que as distribuições modernas usam arquivos fstab baseados em UUID, em vez de sdX . O número de série, na verdade, é uma maneira longe mais confiável de descobrir qual é o disco quebrado; afinal de contas, está escrito no disco real , em contraste com o sdX name, que pode ser diferente de boot to boot (na verdade encontrei isso em uma caixa ZFS com dezesseis discos rígidos). Qualquer um dos outros métodos ( by-uuid , by-id e especialmente by-path nos gabinetes de vários discos no nível corporativo) é muito mais confiável do que isso.

    
por 01.04.2016 / 15:04