Como explicar que o instantâneo do ZFS informa 'WRITTEN' como 4,26 GB, mas o tamanho da transferência é na verdade 31,4 GB?

Como explicar que o instantâneo do ZFS informa 'WRITTEN' como 4,26 GB, mas o tamanho da transferência é na verdade 31,4 GB?

Quando executo esta consulta em um conjunto de dados

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

Vejo as seguintes estatí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

No entanto, quando executo um backup, ele tem o último instantâneo, pois madcow_2023-04-21_01:15:00_UTCo tamanho do backup não é 4,26 GB, mas 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%

adicionar -cpara compactação aumenta o tamanho para 4,3G (são instantâneos ligeiramente diferentes, mas com mais ou menos o mesmo conteúdo.

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

Você pode me ajudar a entender o que pode causar essa grande discrepância de tamanhos? Por que a compactação relatada pelo ZFS é 1,28 e a compactação de transferência é 31,5/4,3=7,3?

Responder1

WRITTENmostracomprimidodados realmente gravados no conjunto de dados/instantâneo. Entre sfg-backup/mx@madcow_2023-04-21_01:15:00_UTCe madcow_2023-04-21_03:15:00_UTCvocê escreveu dados altamente compactáveis ​​sobre dados incompressíveis anteriores, sem desreferenciar o arquivo inteiro.

Suponho que você tenha algum arquivo grande que pode ser substituído aleatoriamente (ou seja: arquivos de imagem de disco virtual, bancos de dados, etc.), e aconteceu que você escreveu 32G de dados brutos que se tornaram 4G de dados compactados.

zfs send -cenvia os registros compactados como estão, transferindo apenas o delta 4G compactado. Por outro lado, zfs send(sem -c) descompacta os dados no disco, expandindo-os para o tamanho total de 32G.

informação relacionada