Как объяснить, что снимок ZFS сообщает о записи «ЗАПИСАНО» размером 4,26 ГБ, но фактический размер передаваемых данных составляет 31,4 ГБ?

Как объяснить, что снимок ZFS сообщает о записи «ЗАПИСАНО» размером 4,26 ГБ, но фактический размер передаваемых данных составляет 31,4 ГБ?

Когда я запускаю этот запрос к набору данных

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

Я вижу следующую статистику:

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

Однако, когда я запускаю резервное копирование, оно содержит последний снимок, поскольку madcow_2023-04-21_01:15:00_UTCразмер резервной копии составляет не 4,26 ГБ, а 31,4 ГБ.

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%

добавление -cсжатия увеличивает размер до 4,3 Гб (это немного разные снимки, но с более или менее одинаковым содержимым).

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

Можете ли вы помочь мне понять, что может быть причиной такого большого расхождения в размерах? Почему сообщаемое ZFS сжатие составляет 1,28, а сжатие передачи — 31,5/4,3=7,3?

решение1

WRITTENпоказываетсжатыйданные, фактически записанные в набор данных/моментальный снимок. Между sfg-backup/mx@madcow_2023-04-21_01:15:00_UTCи madcow_2023-04-21_03:15:00_UTCвы записали высокосжимаемые данные поверх предыдущих несжимаемых данных, без разыменования всего файла.

Я предполагаю, что у вас есть какой-то большой файл, который может быть случайно перезаписан (например, файлы образов виртуальных дисков, базы данных и т. д.), и так получилось, что вы записали 32 ГБ необработанных данных, которые превратились в 4 ГБ сжатых данных.

zfs send -cотправляет сжатые записи как есть, передавая только сжатую дельту 4G. С другой стороны, zfs send(без -c) распаковывает данные на диске, расширяя их до полного размера 32G.

Связанный контент