“zfs send” 报告的大小是准确的还是估计的?

“zfs send” 报告的大小是准确的还是估计的?

考虑以下命令和输出:

zfs send -Pvi \
    tank/vms/langara@zfsnap-2016-05-11_00.00.00--1w \
    tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w \
        | dd  > /dev/null

运行 1:

incremental   zfsnap-2016-05-11_00.00.00--1w tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w    4903284160
size 4903284160
17:29:42   1244483472  tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w
17:29:43   2487508120  tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w
17:29:44   3741453864  tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w
9582310+895 records in
9582799+1 records out
4906393272 bytes (4.9 GB) copied, 3.94883 s, 1.2 GB/s

运行 2:

incremental   zfsnap-2016-05-11_00.00.00--1w tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w    4903284160
size 4903284160
17:30:07   1209666712  tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w
17:30:08   2411042632  tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w
17:30:09   3632274072  tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w
17:30:10   4853372344  tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w
9582450+654 records in
9582799+1 records out
4906393272 bytes (4.9 GB) copied, 4.05346 s, 1.2 GB/s

不带选项运行-P

total estimated size is 4.57G
TIME        SENT   SNAPSHOT
17:36:23   1.11G   tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w
17:36:24   2.25G   tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w
17:36:25   3.39G   tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w
17:36:26   4.50G   tank/vms/langara@zfsnap-2016-05-13_00.00.00--1w
9582443+679 records in
9582799+1 records out
4906393272 bytes (4.9 GB) copied, 4.01077 s, 1.2 GB/s

我有 4 个相关问题。

  1. 带有开关的初始大小是-P估算值吗?我认为它与没有开关时相同-P,但没有说明它是一个估算值。
  2. zfs send发送完成后有没有办法输出实际的流大小?
  3. 有没有办法通过使用现有的 ZFS 属性来确定估计的流大小zfs send,还是试运行发送是唯一的方法?
  4. 是否有类似的东西logicalwritten(注意:不是真正的属性)可以给我与written属性相同的信息,但使用未压缩的大小?

答案1

  1. 根据手册页描述,我认为Print machine-parsable verbose information about the stream package generated这些信息是相同的,只是格式更好(例如,以字节为单位,而不是转换为 KB/MB/GB)。另外,从您的示例 4903284160/1024^3~=4.566 开始,四舍五入为 4.57,结果正确。
  2. 看一下此 Oracle 文档,这可能会有所帮助:

    Use the following dry-run syntax to estimate the size of the snapshot stream but not send it.
    # zfs send -rnv tank/source@snap1
    estimated stream size: 10.0G
    
    You can monitor the progress of the send stream by inserting the pv command between the zfs send and the zfs receive commands. [...] When the snapshot stream is completely received, the progress monitor identifies the total size received. For example:
    # zfs send tank/source@snap1 | pv |zfs recv pond/target
    10GB 0:01:55 [88.5MG/s] [       <=>   ]
    

    Solaris 11.3 还引入了一些新的监控功能,将来send/recvillumos/OpenZFS 可能会采用类似的东西。

  3. 预估尺寸已经有了,你是指真实尺寸吗?遗憾的是无法获取真实尺寸,详情请参阅此主题
  4. 也许logicalused?从FreeBSD 手册页zfsillumos 也具有该属性,但是手册页缺少描述):

    logicalused
    
    The amount of space that is "logically" consumed by this dataset and
    all its descendents.  See the used property.  The logical space
    ignores the effect of the compression and copies properties, giving a
    quantity closer to the  amount of data that applications see.
    

相关内容