ZFS no Linux “nenhum dispositivo no pool”

0

Eu tenho um pool que contém um disco com apenas alguns erros. Eu queria eliminar esses erros e ver se eles voltaram antes de comprar um novo disco:

me@server:/$ sudo zpool status tank
  pool: tank
 state: DEGRADED
status: One or more devices are faulted in response to persistent errors.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Replace the faulted device, or use 'zpool clear' to mark the device
        repaired.
  scan: scrub repaired 0 in 7h1m with 0 errors on Sat May 24 20:44:13 2014
config:

        NAME                                            STATE     READ WRITE CKSUM
        tank                                            DEGRADED     0     0     0
          raidz2-0                                      DEGRADED     0     0     0
            ata-ST3000DM001-1CH166_Z1F1HTEW             ONLINE       0     0     0
            ata-ST3000DM001-1CH166_Z1F1HDXJ             ONLINE       0     0     0
            ata-ST3000DM001-1CH166_Z1F1J33Y             FAULTED      9     1     0  too many errors
            ata-ST3000DM001-1CH166_Z1F1HM7F             ONLINE       0     0     0
            ata-ST3000DM001-1CH166_Z1F1HE23             ONLINE       0     0     0
            ata-ST3000DM001-1CH166_Z1F175HQ             ONLINE       0     0     0
            ata-ST3000DM001-1CH166_Z1F1K3TV             ONLINE       0     0     0
            ata-ST3000DM001-1CH166_Z1F1D1XR             ONLINE       0     0     0
        logs
          ata-SSD2SC120GS4DH08B-T_PNY10130000139160634  ONLINE       0     0     0
        cache
          ata-SSD2SC120GS4DH08B-T_PNY10130000139160672  ONLINE       0     0     0

errors: No known data errors

Eu escrevi o disco em questão usando seu guid obtido do comando zdb :

zpool offline tank 12956315685006632708

Limpei os erros:

zpool clear tank 12956315685006632708

Depois tentei on-line o disco, mas fui recebido com o seguinte:

zpool online tank 12956315685006632708
cannot online 12956315685006632708: no such device in pool

Eu tentei substituir o GUID por ata-ST3000DM001-1CH166_Z1F1J33Y e /dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F1J33Y , mas obtive os mesmos resultados.

Eu também tentei usar o comando replace com todos os identificadores acima sem sorte.

Eu li sobre um comando cfgadm que eu preciso executar para "desconfigurar / reconfigurar" o disco, mas ele não parece estar disponível para o Ubuntu.

Como faço para colocar esse disco novamente online?

    
por ubiquibacon 06.03.2015 / 21:28

1 resposta

1

Com ajuda de esta pergunta e suas respostas eu pude para obter este trabalho (atualmente resilvering). Para qualquer desenvolvedor do ZFS lendo isso, a operação de substituir um disco deve ser muito mais fácil / completa (e enganar). Após a configuração inicial e em uma linha de tempo suficiente, a única operação que cada usuário do ZFS eventualmente terá que fazer é substituir um disco. Mas eu divago.

No meu caso, eu não queria substituir o meu disco, eu só queria limpar suas falhas e colocá-lo de volta on-line sem falhas, para que eu pudesse determinar se o disco realmente precisava ser substituído. Meu raciocínio por querer fazer isso foi 1.) o sistema tinha estado ligado por quase um ano sem uma reinicialização tão podridão é uma possibilidade 2.) o número de erros foi bastante pequeno.

O truque que me pareceu foi apagar as partições do disco em questão. Primeiro eu precisava determinar em qual dispositivo operar. Você poderia determinar isso através do processo de eliminação usando zdb , mas eu usei lshw para obter todas as informações que eu precisava de uma só vez. Basicamente eu queria correlacionar o dispositivo zpool status estava me dizendo que tinha falhado em um dispositivo /dev/sdX (se você não estiver familiarizado com less , use as teclas para cima / baixo para mostrar mais / menos e a tecla q para sair).

root@server:/# lshw|less
...
              *-disk:2
                   description: ATA Disk
                   product: ST3000DM001-1CH1
                   vendor: Seagate
                   physical id: 0.2.0
                   bus info: scsi@0:0.2.0
                   logical name: /dev/sdd
                   version: CC24
                   serial: Z1F1J33Y
                   size: 2794GiB (3TB)
                   capacity: 2794GiB (3TB)
                   capabilities: 15000rpm gpt-1.00 partitioned partitioned:gpt
                   configuration: ansiversion=6 guid=52d25a12-120a-1c40-92a1-0be436c2d642 sectorsize=4096
                 *-volume:0
                      description: OS X ZFS partition or Solaris /usr partition
                      vendor: Solaris
                      physical id: 1
                      bus info: scsi@0:0.2.0,1
                      logical name: /dev/sdd1
                      serial: f25724a4-dd55-764c-af34-9479521854b9
                      capacity: 2794GiB
                      configuration: name=zfs
                 *-volume:1
                      description: reserved partition
                      vendor: Solaris
                      physical id: 9
                      bus info: scsi@0:0.2.0,9
                      logical name: /dev/sdd9
                      serial: 89eeeedb-e3a0-4940-8a50-d3d7506ad603
                      capacity: 8191KiB
...

Aqui eu posso ver que /dev/sdd é o disco que eu queria. Em seguida, apaguei as partições desse disco:

root@server:/# fdisk -l /dev/sdd

Em seguida, basta seguir as instruções na tela para excluir a partição. Aqui é um bom guia. Depois disso, o seguinte comando finalmente funcionou:

root@server:/# zpool replace tank 12956315685006632708 /dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F1J33Y

O guid (esse número longo) foi obtido usando o comando zdb . Eu acho que no final eu poderia ter usado o comando online em vez de replace , mas eu não tentei isso.

    
por ubiquibacon 07.03.2015 / 08:35