¿Forzar la suma de comprobación de actualización en zfs?

13

Recientemente cambié la checksumpropiedad en uno de mis sistemas de archivos zfs no duplicados sha256de on(fletcher4) para admitir mejor el envío de vapor duplicado de replicación, como en este comando zfs send -DR -I _starting-snaphot_ _ending-snapshot_.

Sin embargo, la página de manual de zfs tiene esto que decir sobre send -D:

Este indicador se puede utilizar independientemente de la propiedad de deduplicación del conjunto de datos, pero el rendimiento será mucho mejor si el sistema de archivos utiliza una suma de comprobación con capacidad de deduplicación (por ejemplo, sha256).

La página de manual de zfs también establece esto sobre la checksumpropiedad:

Cambiar esta propiedad solo afecta a los datos recién escritos.

No deseo confiar en fletcher4. La compensación es que, a diferencia de SHA256, fletcher4 no es una función hash pseudoaleatoria y, por lo tanto, no se puede confiar en que no colisionará. Por lo tanto, solo es adecuado para la deducción cuando se combina con la opción 'verificar', que detecta y resuelve colisiones hash.

¿Cómo puedo actualizar las sumas de verificación del sistema de archivos, preferiblemente sin desconectar el sistema?

84104
fuente

Respuestas:

11

Para cambiar las propiedades (ya sea compresión, deduplicación o suma de verificación) de datos ya escritos, el enfoque zfs es ejecutar los datos a través de una zfs send | zfs receivesecuencia. Obviamente, no es necesario que el sistema fuera de línea para eso, sino que va a necesitar

  1. suficientes recursos en su zpool / en el sistema para contener dos copias deducidas del conjunto de datos en cuestión
  2. tiempo de inactividad para el conjunto de datos, ya que necesitaría destruirlo o cambiarle el nombre en el procedimiento
  3. suficiente tiempo y paciencia para completar la operación

Como ya está utilizando la deduplicación para el zpool, ejecutar un zfs send | zfs receivedestino con el mismo grupo que el origen solo usaría el espacio necesario para los bloques de metadatos recién escritos. Pero prepárese para que la copia tarde un tiempo: la deducción puede ser muy lenta, especialmente si no tiene suficiente RAM para mantener toda la tabla de deducción en RAM.

Obviamente, tendría que detener todas las operaciones de escritura para crear la copia final autorizada del conjunto de datos, pero podría minimizar el tiempo de inactividad copiando primero una instantánea, deteniendo todas las escrituras y haciendo incrementales zfs send -i | zfs receivecomo el paso final.

el wabbit
fuente
No está nada claro para mí que zfs receiveactualice los metadatos de un sistema de archivos. Me parece que sería mucho más rápido si simplemente tomara los metadatos tal como están. Sin embargo, hacerlo puede ser imposible debido al bloqueo de la suma de comprobación, en lugar de la naturaleza de nivel de archivo. En ese caso zfs send | zfs receiveformaría una base aceptable para una solución.
84104
1
zfs enviar | zfs recv cambiará efectivamente todos los metadatos (opción de compresión, opción de suma de verificación, opción de deduplicación). zfs send está creando un objeto que luego ingieres usando zfs recv, que lo escribe casi como si se tratara de datos nuevos. Sin embargo, creo que puede tener una idea errónea sobre zfs send | recv en lo que respecta a la deduplicación. zfs send -D intenta deducir los datos / dentro de la secuencia en sí /, no mantener la deduplicación existente de los datos del conjunto de datos de origen. Esta es la razón por la cual no existe el requisito de que el lado de recepción también tenga habilitada la deducción en el conjunto de datos de destino.
Nex7
Para explicar más detalladamente, actualmente no hay forma de que zfs envíe datos deduplicados | recv de tal manera que todo lo que pasa por el cable sea una sola copia de los datos deduplicados y las entradas de la tabla de deduplicación asociada. Ni siquiera si el origen y el destino están sincronizados y no está enviando nada más que una instantánea incremental. ZFS sigue aumentando los datos de envío a tamaño completo si los datos que contiene no son deduplicables / están dentro del alcance de la transmisión en sí /. Es posible que tenga datos que se deducen fácilmente en el POOL DDT, pero como un pequeño objeto de envío, sea completamente no deduplicable.
Nex7