Utilizo zfs send/receive para replicar un sistema de archivos zfs en otro servidor todos los días. El flujo de trabajo es el estándar de envío y recepción:
# 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}"
Esto funcionó bien por un tiempo. Sin embargo, ahora recibo este error de zfs receive
:
cannot receive incremental stream: destination pool/filesystem has been modified since most recent snapshot
zfs list -t snapshot
en el objetivo muestra un pequeño valor en la USED
columna de la instantánea más reciente (alrededor de 100K). Esto debería ser cero. El sistema de archivos no está montado en el destino.
Tengo un script que verifica las cuotas de zpools y zfs. La consulta de las cuotas actuales (con zfs userspace $filesystem -pH -o name,used,quota -s used
) parece ser lo que modifica el sistema de archivos. ¿Es esto de esperar? No entiendo por qué una consulta de algunos números modifica el sistema de archivos.
Utilizo Ubuntu 20.04 con OpenZFS 0.8.3 desde los repositorios de Ubuntu.
Respuesta1
Los sistemas de archivos zfs desmontados no pueden modificarse mediante nada excepto recibir/destruir y... (bueno, eso es prácticamente todo) solicitudes. Cualquier solicitud de zfs sobre estadísticas del sistema de archivos no debería modificar el contenido de fs. Entonces, para concluir, dudo mucho que zfs userspace
esté modificando algo (y dudo que sus conjuntos de datos zfs estén desmontados). Pero si me equivoco (acerca de zfs userspace
), esto es claramente un error y uno enorme.