Eu uso o envio/recebimento do zfs para replicar um sistema de arquivos zfs para outro servidor todos os dias. O fluxo de trabalho é o envio e recebimento padrão:
# 1. create snapshot on source
zfs snapshot ${source_fs}@${today}
# 2. send incremental update from yesterday to today to target
zfs send -i ${one_day_ago} ${source_fs}@${today} | ssh user@${target_host} "zfs receive ${target_fs}"
# 3. destroy old snapshots from two days ago on source and target
zfs destroy ${source_fs}@${two_days_ago}
ssh user@${target_host} "sudo zfs destroy ${target_fs}@${two_days_ago}"
Isso funcionou bem por um tempo. No entanto, agora recebo este erro de zfs receive
:
cannot receive incremental stream: destination pool/filesystem has been modified since most recent snapshot
zfs list -t snapshot
no alvo mostra um pequeno valor na USED
coluna do snapshot mais recente (algo em torno de 100K). Isso deve ser zero. O sistema de arquivos não está montado no destino.
Eu tenho um script que verifica cotas zpools e zfs. A consulta das cotas atuais (com zfs userspace $filesystem -pH -o name,used,quota -s used
) parece ser o que modifica o sistema de arquivos. Isso é esperado? Não entendo por que uma consulta de alguns números modifica o sistema de arquivos.
Eu uso Ubuntu 20.04 com OpenZFS 0.8.3 dos repositórios do Ubuntu.
Responder1
Os sistemas de arquivos zfs desmontados não podem ser modificados por nada, exceto receber/destruir e .... (bem, isso é praticamente tudo). Quaisquer solicitações do zfs sobre estatísticas do sistema de arquivos não devem modificar o conteúdo do fs. Portanto, concluindo, duvido muito que isso zfs userspace
esteja modificando alguma coisa (e duvido que seus conjuntos de dados zfs estejam desmontados). Mas se eu estiver errado (sobre zfs userspace
) - isso é claramente um bug, e um grande problema.