Em um esforço para testar o impacto que a adição de um dispositivo de log ZFS teria em um array ZFS, decidi criar um zpool e realizar alguns benchmarks antes de conectar um SSD para atuar como ZIL.
Infelizmente, sempre que eu conecto o SSD depois de criar o zpool ou desconecto o SSD depois de criar o pool (qualquer coisa que faça com que as letras da unidade mudem após a criação do pool) e, em seguida, reinicialize, 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 decorre do fato de eu ter criado o pool usando as letras das unidades da seguinte forma:
sudo zpool create -f zpool1 mirror /dev/sdb /dev/sdc
Questões
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? eu reparei nissoa documentação do Ubuntu afirmapara criar um zpool da mesma maneira que eu fiz.
Informação extra
- SO: Ubuntu 16.04 Servidor 4.10
- Zfs instalado a partir do
zfsutils-linux
pacote de instalação
Responder1
Depois de obter ajuda de Dexter_Kane noFórum de técnicos de nível 1, a resposta é usar /dev/disk/by-id/...
caminhos ao criar os pools.
Por exemplo
sudo zpool create zpool1 mirror \
/dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N0PKS6S7 \
/dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N7VXZF6H
Convertendo e consertando pools existentes
A boa notícia é que você pode "converter" um array RAID ZFS existente para usar esses rótulos, o que evita que isso aconteça no futuro e até resolverá seu array degradado se essa situação já tiver acontecido com você.
sudo zpool export [pool name]
sudo zpool import -d /dev/disk/by-id [pool name]
Você só precisa ter certeza de que os conjuntos de dados dos pools não estão em uso. Por exemplo, não execute os comandos enquanto estiver dentro do pool e certifique-se de que eles não estejam sendo compartilhados via NFS, etc.
Após realizar a conversão, a saída de sudo zpool status
deverá ser semelhante a:
pool: zpool1
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
zpool1 ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N0PKS6S7 ONLINE 0 0 0
ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N7VXZF6H ONLINE 0 0 0
Teste realizado
Fiz questão de testar isso:
- O uso de caminhos por ID evitou que o problema acontecesse.
- Depois de gravar alguns dados enquanto o pool estava em estado degradado, ainda consegui ler todos os arquivos após realizar a exportação/importação e
sudo zpool status
não relatei erros.