¿Cómo explicar que la instantánea de ZFS informa 'ESCRITO' como 4,26 GB, pero el tamaño de transferencia es en realidad 31,4 GB?

¿Cómo explicar que la instantánea de ZFS informa 'ESCRITO' como 4,26 GB, pero el tamaño de transferencia es en realidad 31,4 GB?

Cuando ejecuto esta consulta en un conjunto de datos

zfs list -d 1 -t all -o name,used,refer,written,compressratio sfg-backup/mx

Veo las siguientes estadísticas:

zfs list -d 1 -t all -o name,used,refer,written,compressratio sfg-backup/mx
NAME                                           USED     REFER  WRITTEN  RATIO
sfg-backup/mx                                  300G      276G        0  1.80x
sfg-backup/mx@madcow_2023-04-15_23:15:00_UTC  4.04G      275G     275G  1.28x
...
sfg-backup/mx@madcow_2023-04-21_01:15:00_UTC     0B      276G        0  1.28x
sfg-backup/mx@madcow_2023-04-21_02:15:00_UTC     0B      276G    4.26G  1.28x
sfg-backup/mx@madcow_2023-04-21_03:15:00_UTC     0B      276G        0  1.28x

Sin embargo, cuando ejecuto una copia de seguridad, tiene la última instantánea ya que madcow_2023-04-21_01:15:00_UTCel tamaño de la copia de seguridad no es de 4,26 GB sino de 31,4 GB.

syncoid --no-sync-snap 10.0.1.2:sfg-backup/mx work/sfg/mx
NEWEST SNAPSHOT: madcow_2023-04-21_03:15:00_UTC
Sending incremental sfg-backup/mx@madcow_2023-04-21_01:15:00_UTC ... madcow_2023-04-21_03:15:00_UTC (~ 31.4 GB):
31.5GiB 0:03:16 [ 163MiB/s] [==================================================================================================>] 100%

agregar -ccompresión lleva el tamaño a 4.3G (estas son instantáneas ligeramente diferentes, pero con más o menos el mismo contenido).

zfs send -nv -c -I sfg-backup/mx@madcow\_2023-04-24\_00:15:00\_UTC sfg-backup/mx@madcow\_2023-04-24\_03:15:00\_UTC
send from @madcow_2023-04-24_00:15:00_UTC to sfg-backup/mx@madcow_2023-04-24_01:15:00_UTC estimated size is 215M
send from @madcow_2023-04-24_01:15:00_UTC to sfg-backup/mx@madcow_2023-04-24_02:15:00_UTC estimated size is 4.09G
send from @madcow_2023-04-24_02:15:00_UTC to sfg-backup/mx@madcow_2023-04-24_03:15:00_UTC estimated size is 624B
total estimated size is 4.30G

# without -c flag:
zfs send -nv  -I sfg-backup/mx@madcow\_2023-04-24\_00:15:00\_UTC sfg-backup/mx@madcow\_2023-04-24\_03:15:00\_UTC
send from @madcow_2023-04-24_00:15:00_UTC to sfg-backup/mx@madcow_2023-04-24_01:15:00_UTC estimated size is 216M
send from @madcow_2023-04-24_01:15:00_UTC to sfg-backup/mx@madcow_2023-04-24_02:15:00_UTC estimated size is 31.3G
send from @madcow_2023-04-24_02:15:00_UTC to sfg-backup/mx@madcow_2023-04-24_03:15:00_UTC estimated size is 624B
total estimated size is 31.5G

¿Pueden ayudarme a comprender qué puede causar esta gran discrepancia en los tamaños? ¿Por qué la compresión informada por ZFS es 1,28 y la compresión de transferencia es 31,5/4,3=7,3?

Respuesta1

WRITTENmuestracomprimidodatos realmente escritos en el conjunto de datos/instantánea. Entre sfg-backup/mx@madcow_2023-04-21_01:15:00_UTCy madcow_2023-04-21_03:15:00_UTCescribiste datos altamente comprimibles sobre datos incompresibles anteriores, sin eliminar la referencia al archivo completo.

Supongo que tienes un archivo grande que se puede sobrescribir aleatoriamente (es decir, archivos de imagen de disco virtual, bases de datos, etc.) y sucedió que escribiste 32 G de datos sin procesar que se convirtieron en 4 G de datos comprimidos.

zfs send -cenvía los registros comprimidos tal como están, transfiriendo solo el delta 4G comprimido. Por otro lado, zfs send(sin -c) descomprime los datos en el disco, expandiéndolos al tamaño completo de 32G.

información relacionada