ZFS のスナップショットでは「書き込み済み」が 4.26 GB と報告されているのに、転送サイズは実際には 31.4 GB だということをどう説明すればよいでしょうか。

ZFS のスナップショットでは「書き込み済み」が 4.26 GB と報告されているのに、転送サイズは実際には 31.4 GB だということをどう説明すればよいでしょうか。

このクエリをデータセットに対して実行すると

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.26GBではなく31.4GBであるため、最後のスナップショットがあります。

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.3G になります (これらはわずかに異なるスナップショットですが、内容はほぼ同じです)。

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_UTCmadcow_2023-04-21_03:15:00_UTCファイル全体を逆参照せずに、以前の圧縮不可能なデータの上に高度に圧縮可能なデータを書き込みました。

ランダムに上書きされる可能性のある大きなファイル (仮想ディスク イメージ ファイル、データベースなど) があり、32G の生データを書き込んだ結果、4G の圧縮データになったとします。

zfs send -c圧縮されたレコードをそのまま送信し、圧縮された 4G デルタのみを転送します。一方、zfs send( なし-c) はディスク上のデータを解凍し、32G のフルサイズに拡張します。

関連情報