Força a soma de verificação de atualização no zfs?

13

Eu recentemente alterei a propriedade checksum em um dos meus sistemas de arquivos zfs não duplicados para sha256 de on (fletcher4) para melhor suportar o envio de transmissões duplicadas de replicação, como neste comando zfs send -DR -I _starting-snaphot_ _ending-snapshot_ .

No entanto, o zfs manpage tem isto a dizer sobre send -D :

This flag can be used regardless of the dataset’s dedup property, but performance will be much better if the filesystem uses a dedup-capable checksum (eg. sha256).

A página man do zfs também declara isso sobre a propriedade checksum :

Changing this property affects only newly-written data.

Eu não tenho desejo de confiar em fletcher4. A desvantagem é que, diferentemente do SHA256, o fletcher4 não é uma função hash pseudo-aleatória e, portanto, não pode ser confiável para não colidir. Portanto, ele é adequado apenas para dedução quando combinado com a opção 'verify', que detecta e resolve colisões de hash.

Como posso atualizar as somas de verificação do sistema de arquivos, de preferência sem o uso do sistema?

    
por 84104 04.10.2013 / 22:22

1 resposta

11

Para alterar as propriedades (seja compactação, deduplicação ou soma de verificação) de dados já gravados, a abordagem do zfs é executar os dados por meio de uma sequência zfs send | zfs receive . Obviamente, você não precisa desconectar o sistema para isso, mas precisará

  1. recursos suficientes no seu zpool / no sistema para manter duas cópias deduzidas do conjunto de dados em questão
  2. tempo de inatividade para o conjunto de dados, caso você precise destruí-lo ou renomeá-lo no procedimento
  3. tempo e paciência suficientes para que a operação seja concluída

Como você já está usando a deduplicação para o zpool, a execução de um zfs send | zfs receive com o destino no mesmo pool que a fonte usaria apenas o espaço necessário para os blocos de metadados recém-gravados. Mas esteja preparado para que a cópia demore um pouco - a dedup pode ser terrivelmente lenta, especialmente se você não tiver RAM suficiente para armazenar toda a tabela de deduplicação na RAM.

Obviamente, você precisaria interromper todas as operações de gravação para criar a cópia final e autoritativa do conjunto de dados, mas poderia minimizar o tempo de inatividade copiando primeiro um instantâneo, interrompendo todas as gravações e fazendo incremental zfs send -i | zfs receive como a etapa final.

    
por 05.10.2013 / 15:21