Com o zfs, se você tem copies=2
e perde uma unidade que contém algumas dessas cópias, como você diz ao sistema que ele deve fazer uma nova cópia dos blocos de dados dos arquivos afetados? Ou o zfs apenas começa a adicionar blocos de dados para cópias extras assim que descobrir sobre blocos de dados incorretos?
Scrub vai fazer isso?
(v0.6.0.56-rc8, versão 28 do pool ZFS, versão 5 do sistema de arquivos ZFS, Ubuntu 11.10)
For a device to be replaced, the pool must be in the ONLINE state. The device must be part of a redundant configuration, or it must be healthy (in the ONLINE state).
Presumo que cópias = 2 ou 3 não sejam consideradas uma configuração redundante.copies=1
e ocopies=2
atualizou, provavelmente desejará resilver / resfrubar posteriormente - o que criará essas instâncias. Mas @jilliagre está correto: os mesmos blocos não constituem uma configuração redundante. Não há garantia de que os blocos estejam configurados em outro dispositivo, mesmo se você tiver vários dispositivos em um pool.Achei essa pergunta realmente intrigante e, depois de passar uma hora estudando a documentação, mergulhei no código. Aqui está o que eu encontrei.
Primeiro, alguma terminologia. Os mesmos blocos (que são o que são essas cópias, em oposição aos espelhos) são criados automaticamente em uma gravação, mas podem ou não estar no mesmo dispositivo virtual (vdev) da cópia original. Por outro lado, os blocos espelhados são sempre refletidos em outro dispositivo virtual.
No entanto, o código refere-se a ambos os tipos de blocos como filhos. Você verá aqui que os mesmos blocos são apenas filhos
io_vd == NULL
(isso está na função de gravação). Para um bloco espelhado,io_vd
seria definido no dispositivo virtual correspondente (seu segundo disco, por exemplo).Com isso em mente, quando chega à parte de leitura , trata todas as crianças (sejam elas espelhadas ou iguais) como potencialmente inseguras se não contiverem o esperado
good_copies
e as reescreve conforme necessário . Portanto, parece que a resposta para sua pergunta é: sim, ela será reescrita quando você tiver pelo menos uma boa cópia e uma das seguintes opções:Ufa! Talvez alguém possa apontar falhas, mas gostei de aprender sobre o ZFS através deste pequeno exercício, e espero que isso ajude!
fonte
@jlliagre e outros que parecem pensar que o zpool inteiro morre se um dos discos (vdevs) morre, mas o pool não é redundante (mirror / raidz). Isso não é verdade; um pool de vários discos sempre sobreviverá a uma única falha de disco completa, mesmo que não seja um espelho ou um RAIDZ.
Os metadados do ZFS são sempre copiados pelo menos duas vezes, para que a falha total de um disco completo (ou de qualquer parte dele) não destrua o sistema de arquivos. Além disso, muitos arquivos, especialmente os menores, não serão espalhados por todos os discos e, portanto, não serão necessariamente afetados pela falha do disco. O OP está perguntando sobre o caso de um pool de discos múltiplos usando blocos iguais (cópias de dados do usuário> 1). Aqui, uma única falha completa do disco
nuncadeve resultar em perda de dados.O ZFS sempre tentará colocar os ditto blocos longe do bloco original e, para pools com vários vdevs, isso sempre significa em outro vdev (uma exceção pode ser onde um vdev está> 50% do pool, o que seria muito incomum) . Os metadados do sistema de arquivos também são sempre copiados +1 ou +2 vezes mais que o mesmo nível, portanto, sempre sobreviverão a falhas no disco. Além disso, se você tiver um pool com mais de três discos, poderá perder até metade deles sem perda de dados; O ZFS armazena os mesmos blocos no próximo disco, desde que você nunca perca dois discos adjacentes e nunca perca dados. (falha de três discos apropriados para o mesmo nome = 2).Quando houver cópias suficientes de dados para acessar um arquivo (sejam essas cópias dos mesmos blocos, espelhos ou raidz), todas as cópias ausentes de dados serão reparadas quando o arquivo for acessado. Esse é o objetivo da limpeza; leia todos os dados e corrija todos os problemas usando cópias redundantes. Portanto, para responder diretamente à pergunta do OP, basta fazer uma limpeza após a substituição da unidade com falha e todas as cópias serão restauradas.
Como sempre, você pode experimentar facilmente os conceitos criando pools cujos vdevs para backup de armazenamento são apenas arquivos esparsos comuns. Ao excluir ou corromper os arquivos vdev, você pode simular qualquer tipo de falha e verificar a integridade do pool, sistemas de arquivos e dados ao longo do caminho.
EDIT: após a experimentação, parece que o zfs falhará no pool se um disco falhar em um pool não redundante de vários discos com cópias> = 2. A corrupção de dados paritais em um ou mais discos deve permanecer sobrevivível e deve ser corrigida por uma limpeza.
fonte