Introdução
Em primeiro lugar, para quem está tendo o mesmo problema no Ubuntu 16.04, ele é atualmente um bug em andamento e, até o momento, que eu saiba, não foi corrigido. Você pode visitar a conversa do github aqui para ver o erro que estou referenciando. Em segundo lugar estou escrevendo este post como um usuário entusiasta e intermediário linux, eu não sou um desenvolvedor ou atualmente trabalho no linux como profissão. Dito isto, vou fornecer as informações que encontrei sobre esta questão, tanto quanto é do meu conhecimento.
O problema:
A funcionalidade de hot spare incorporada no pacote zfsonlinux
atualmente não funciona como indicado na página do manual. zpool
man page:
Hot Spares
ZFS allows devices to be associated with pools as "hot spares".
These devices are not actively used in the pool, but when an active
device fails, it is automatically replaced by a hot spare.
Nota: A funcionalidade de reserva a frio (uma sobressalente não substituída automaticamente) está funcionando, mas apenas em configurações que consistem em mirrors
ou qualquer raidz's
. Se você tem uma configuração como a seguinte:
NAME STATE READ WRITE CKSUM
pool ONLINE 0 0 0
sdb ONLINE 0 0 0
sdc ONLINE 0 0 0
spares
sdd AVAIL
Após a falha de uma unidade, você não poderá substituí-la pelo sobressalente devido ao erro pool I/O is currently suspended
.
Soluções tentadas:
Esta é uma lista de soluções tentadas pelas quais passei e os resultados obtidos:
-
Substituição automática do ZFS: Acontece que, de acordo com a página
zpool
man e minha compreensão, a funcionalidadeautoreplace
não é substituir uma unidade danificada pelo sobressalente, mas substituir a própria unidade danificada por qualquer novo dispositivo encontrado em sua localização.zpool
man page:If set to "on", any new device, found in the same physical location as a device that previously belonged to the pool, is automatically formatted and replaced.
autoreplace
é bom de se ter, mas para conseguir a funcionalidade de um hot spare não acredito que seja necessário. Não consigo confirmar isso além da página de manual porque não consegui colocar o sobressalente no trabalho. -
ZED.rc: Mais tarde, descobri que, dentro da conversa no github, os sinalizadores
ZED_SPARE_ON_CHECKSUM_ERRORS
eZED_SPARE_ON_IO_ERRORS
precisavam ser definidos dentro dozed.rc
. Como o @ user121391 disse em sua resposta a este post, o serviço / daemon zed é o que determina o status do pool e o que é necessário ser feito com base nesse status. Você pode ver zed.d no trabalho executandozpool events
. Depois de definir os sinalizadores, reinicializar e reconfigurar um novo pool apenas no caso, o teste do hot spare ficou negativo novamente. -
Scripts ZED.d: No comentário do @Michael Kjörling , ele mencionou alguns scripts incluídos no ZED, que foram escritos para ajudar no cenário de hot spare. Eu realmente encontrei os scripts localizados em
/etc/zfs/zed.d
. Você pode ver esses scripts na página do github aqui . Do meu entendimento de zed.d, quando um evento é acionado, o daemon ZED executa um desses scripts com base em seu status. Dito isto, tentei executar oio-spare.sh
echecksum-spare.sh
manualmente e, a julgar pelo tempo que eles levaram para executar, bem como o status inalterado do conjunto, eles não pareciam estar funcionando corretamente. Talvez esta seja uma fonte potencial para o problema.
Meus Planos
Para usuários do Ubuntu 16.04 do ZFS, até onde sei, atualmente parece não haver nenhuma correção para esse problema. Eu pretendo continuar a usar o ZFS com a configuração de um mirrored
ou raidz
(RAID5), dependendo do desempenho que recebo no teste. (Espelhado será mais rápido, mas eu quero ver a velocidade de raidz
) spare aumentaria a redundância de ambas as configurações, mas infelizmente teremos que esperar até o desenvolvimento do projeto zfsonlinux
. v