Primeiro: estou perfeitamente bem em aceitar que este é o caso por enquanto e não estou procurando uma solução imediata, mas estou tentando entender a limitação técnica dessa restrição.
Estou trabalhando principalmente com ZFS no Linux, mas meu entendimento é que todo o desenvolvimento do FOSS ZFS está enraizado no OpenZFS até agora, portanto, informações sobre qualquer/todas as suas variantes são apreciadas.
A página de manual doszfs remove
estados:
Os vdevs de nível superior só poderão ser removidos se o armazenamento do pool primário não contiver um vdev raidz de nível superior, todos os vdevs de nível superior tiverem o mesmo tamanho de setor e as chaves de todos os conjuntos de dados criptografados forem carregadas.
Eu entendo e/ou posso adivinhar os motivos da maioria dessas restrições, mas realmente não entendo por que a mera presença de um vdev raidz impede a remoção de qualquer vdev (mesmo um espelhado ou não redundante).
Foi meu entendimento/suposição que, da perspectiva do pool, cada vdev atua como um "dispositivo de bloco burro" com a redundância/espelhamento real acontecendo no nível do vdev (conforme sugerido pelo aviso repetido de que não há redundância no nível do pool: todos a redundância deve existir no nível do vdev e um único vdev com defeito derruba todo o pool).
Sob essa suposição, não deveria importar quais dados específicos do vdev são removidos, muito menos a presença de um vdev "ruim" (raidz) no pool.
É evidente que essa suposição (ou alguma outra em que não consigo pensar) está errada. Alguém pode me esclarecer sobre o quê?
O único palpite que me resta e que não consegui verificar é que não há razão absoluta para que o raidz vdevs impeça a remoção do vdev, mas que alguma interação de alguma operação específica do raidz e remoção de dispositivo simplesmente não é implementada/testada/ verificado neste momento.
Os dados dentro de um
RAIDZ
dispositivo são distribuídos de maneira diferente de um vdev único ou espelhado. Remover um único vdev (ou espelho) solitário realmente significa criar umindirect
dispositivo oculto que contém uma tabela remapeando (redirecionando) o endereço DVA antigo para um novo, mas isso exige que o layout dos metadados seja o mesmo entre o dispositivo removido e o novo. . Isto simplesmente não acontece quando os dados são copiados para umRAIDZ
dispositivo.