Em um esforço para testar o impacto que a adição de um dispositivo de log ZFS teria a uma matriz ZFS, decidi criar um zpool e realizar alguns benchmarks antes de conectar um SSD para atuar como o ZIL.
Infelizmente, sempre que eu conecto o SSD depois de ter criado o zpool, ou desconecto o SSD depois de ter criado o pool (qualquer coisa que faça com que as letras das unidades mudem após a criação do pool) e, em seguida, reinicie, meu pool ficará degradado, como pode ser mostrado correndosudo zpool status
pool: zpool1
state: DEGRADED
status: One or more devices could not be used because the label is missing or
invalid. Sufficient replicas exist for the pool to continue
functioning in a degraded state.
action: Replace the device using 'zpool replace'.
see: http://zfsonlinux.org/msg/ZFS-8000-4J
scan: none requested
config:
NAME STATE READ WRITE CKSUM
zpool1 DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
sda ONLINE 0 0 0
1875547483567261808 UNAVAIL 0 0 0 was /dev/sdc1
Suspeito que o problema decorra do fato de ter criado o pool usando as letras da unidade da seguinte forma:
sudo zpool create -f zpool1 mirror /dev/sdb /dev/sdc
Perguntas
Felizmente para mim, este é apenas um teste e não há risco de perda de dados, mas se isso acontecer em um cenário do mundo real, qual é a melhor maneira de se recuperar desse problema? Obviamente, a unidade ainda existe e está pronta para funcionar.
Existe uma maneira melhor de criar o zpool sem usar as letras da unidade /dev/sda
para evitar esse problema no futuro? Percebo que a documentação do Ubuntu declara para criar um zpool da mesma maneira que eu fiz.
Informação extra
- SO: Ubuntu 16.04 Server 4.10
- zfs instalado a partir do
zfsutils-linux
pacote de instalação
Depois de obter ajuda de Dexter_Kane no fórum de técnicos de nível 1 , a resposta é usar
/dev/disk/by-id/...
caminhos ao criar os pools.Por exemplo
Convertendo e Corrigindo Pools Existentes
A boa notícia é que você pode "converter" uma matriz RAID ZFS existente para usar esses rótulos, o que evita que isso aconteça no futuro e até resolverá sua matriz degradada se essa situação já tiver acontecido com você.
Você só precisa garantir que os conjuntos de dados dos pools não estejam em uso. Por exemplo, não execute os comandos enquanto estiver dentro do pool e verifique se eles não estão sendo compartilhados via NFS, etc.
Depois de realizar a conversão, a saída de
sudo zpool status
deve ser semelhante a:Teste realizado
Fiz questão de testar isso:
sudo zpool status
não reportei nenhum erro.