Depois de mais experimentos, encontrei uma solução justa, no entanto, ela apresenta um trade-off significativo. Os discos que foram offline
'd, mas não desanexados, poderão ser colocados online novamente apenas com uma operação de resilverização incremental (" Quando um dispositivo é colocado on-line, qualquer dado que tenha sido gravado no pool é ressincronizado com o dispositivo recém-disponível. "). Em meus testes, isso reduz o tempo de resilverização de um espelho de 3 discos de 28 horas para pouco mais de 30 minutos, com cerca de 40 GB de dados-delta.
A desvantagem é que qualquer pool com um disco off-line será sinalizado como degradado. Desde que ainda haja pelo menos dois discos on-line (em um pool espelhado), isso é efetivamente uma advertência - integridade e redundância permanecem intactas.
Como outros mencionaram, essa abordagem geral está longe do ideal - o envio de instantâneos para um pool remoto seria muito mais adequado, mas no meu caso não é viável.
Para resumir, se você precisar remover um disco de um pool e adicioná-lo novamente sem precisar de um resilvering completo, a abordagem que eu recomendaria é:
- off-line do disco no pool:
zpool offline pool disk
- desacelere a unidade (se for para ser fisicamente puxada):
hdparm -Y /dev/thedisk
- deixe o pool em um estado degradado com a unidade off-line
- para adicionar o disco de volta ao pool:
zpool online pool disk
E, como isso ainda não foi testado, existe o risco de que a operação de redimensionamento de delta não seja precisa. O pool "ao vivo" e / ou os discos off-line podem ter problemas. Vou atualizar se isso acontecer comigo, mas por enquanto vou experimentar com essa abordagem.