O tamanho relatado por 'zfs send' é exato ou estimado?

6

Considere o seguinte comando e a saída:

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

Execução 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

Execução 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

Executar sem a opção -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

Eu tenho 4 perguntas relacionadas.

  1. O tamanho inicial listado com -P altera uma estimativa? Eu assumo que é o mesmo que sem a opção -P , mas falta o esclarecimento de que é uma estimativa.
  2. Existe alguma maneira de ter zfs send a saída do tamanho real do fluxo quando o envio estiver completo?
  3. Existe alguma maneira de descobrir o tamanho do fluxo estimado em zfs send usando as propriedades do ZFS existentes ou o envio direto é o único caminho?
  4. Existe algo como logicalwritten (NOTA: não é uma propriedade real) que me daria as mesmas informações que a propriedade written , mas usando tamanhos não compactados?
por Ryan J 14.05.2016 / 01:50

1 resposta

1

  1. Eu julgaria da descrição da página man Print machine-parsable verbose information about the stream package generated que é a mesma informação, apenas em um formato melhor (por exemplo, bytes em vez de conversão para KB / MB / GB). Além disso, do seu exemplo 4903284160/1024 ^ 3 ~ = 4.566, arredondado para 4.57, que faz check-out.
  2. Dê uma olhada em esta documentação do Oracle , pode ser útil:

    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] [       <=>   ]
    

    O Solaris 11.3 também introduziu novos recursos de monitoramento de send/recv , algo semelhante pode ser adotado pelo illumos / OpenZFS no futuro.

  3. O tamanho estimado já está lá, você quis dizer o tamanho real? Não é possível obter o tamanho real, infelizmente, para obter detalhes, consulte este tópico .
  4. Talvez logicalused ? Da página do FreeBSD de zfs (illumos também tem a propriedade, mas a man page está faltando a descrição):

    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.
    
por 17.05.2016 / 11:58