Como fornecer facilmente todo o espaço disponível para o comando “zfs create -V”?

Como fornecer facilmente todo o espaço disponível para o comando “zfs create -V”?

Preciso criar um ext4 fs em um zpool. Queria usar todo (ou quase todo) o espaço disponível, conforme mostrado abaixo.

# zpool list
NAME      SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
nat2012  1,81T   124K  1,81T        -         -     0%     0%  1.00x    ONLINE  -
# zfs list
NAME      USED  AVAIL     REFER  MOUNTPOINT
nat2012   105K  1,76T       24K  none
# zfs create -V 1.75T nat2012/backup
bad volume size '1.75T': invalid numeric suffix '.75T'
# zfs get avail nat2012
NAME     PROPERTY   VALUE  SOURCE
nat2012  available  1,76T  -
# zfs get -H avail nat2012
nat2012 available   1,76T   -

Meu problema é que "1,75T" não é aceito como tamanho de volume. (Mas é exibido como um tamanho.) Seu valor é arredondado para 0,01T, que é 10G. A próxima coisa que tentei foi obter o tamanho disponível em bytes, Mbytes ou GBytes ou blocos, ou praticamente qualquer coisa que me diga o tamanho exato e possa ser usado com "zfs create -V". Fiquei surpreso quando vi que não existe a opção "zfs get" para isso. De acordo com os documentos, a opção "-H" deve "exibir a saída em um formato mais facilmente analisado por scripts". Omitiu os cabeçalhos e usou tabulações para separar os campos, mas a formatação é ruim. O tamanho ainda é exibido em TBytes e arredondado com precisão de +/- 10G. Problema menor, mas é formatado usando a localidade atual (no meu caso, o ponto decimal "." é substituído por ","). Seria um número inteiro em KBytes.

Observe que o comando "df" não pode ser usado neste caso específico, porque nada está montado. Eu poderia fazer isso para exibir blocos livres em Kbytes:

# mkdir -p /nat2012
# zfs set mountpoint=/nat2012 nat2012
# df -k | grep nat2012
nat2012        1885339520        128 1885339392   1% /nat2012

Mas isso daria um resultado falso. Como você pode ver, agora ele está montado como sistema de arquivos zfs e o conjunto de dados já usa 1% do espaço disponível. Isso não me diz o tamanho exato disponível para criar um novo volume ext4. (A opção -V é obrigatória - se você não especificá-la, ext4.mkfs não poderá formatá-la.)

Claro, sempre posso fazer um teste, algo assim:

# zfs create -V 1760G nat2012/backup
cannot create 'nat2012/backup': out of space
# zfs create -V 1755G nat2012/backup
cannot create 'nat2012/backup': out of space
# zfs create -V 1750G nat2012/backup
cannot create 'nat2012/backup': out of space
# zfs create -V 1740G nat2012/backup
# zfs destroy nat2012/backup
# zfs create -V 1745G nat2012/backup
cannot create 'nat2012/backup': out of space
# zfs create -V 1744G nat2012/backup
cannot create 'nat2012/backup': out of space
# zfs create -V 1743G nat2012/backup

Neste ponto, posso ter certeza de que há no máximo 1G de espaço não utilizado. Isso émuito desajeitado. Posso conviver com isso, mas terei que fazer as mesmas coisas em várias unidades no futuro.

Existe uma maneira melhor de "usar todo o espaço disponível" para criar umtamanho fixovolume?

informação relacionada