Necesito crear un fs ext4 sobre un zpool. Quería utilizar todo (o casi todo) el espacio disponible, como se muestra a continuación.
# 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 -
Mi problema es que "1,75T" no se acepta como tamaño de volumen. (Pero se muestra como un tamaño). Su valor se redondea a 0,01T, que es 10G. Lo siguiente que intenté fue obtener el tamaño disponible en bytes, Mbytes o GBytes o bloques, o prácticamente cualquier cosa que me indique el tamaño exacto y que pueda usarse con "zfs create -V". Me sorprendió ver que no existe la opción "zfs get" para eso. Según los documentos, la opción "-H" debería "mostrar el resultado en una forma más fácil de analizar mediante scripts". Omitió los encabezados y usó pestañas para separar los campos, pero el formato es malo. El tamaño todavía se muestra en TBytes y se redondea con una precisión de +/- 10G. Un problema menor, pero está formateado usando la configuración regional actual (en mi caso, el punto decimal "." se reemplaza por ","). Sería un número entero en KBytes.
Tenga en cuenta que el comando "df" no se puede utilizar en este caso particular porque no hay nada montado. Podría hacer esto para mostrar bloques libres en Kbytes:
# mkdir -p /nat2012
# zfs set mountpoint=/nat2012 nat2012
# df -k | grep nat2012
nat2012 1885339520 128 1885339392 1% /nat2012
Pero esto daría un resultado falso. Como puede ver, ahora está montado como sistema de archivos zfs y el conjunto de datos ya utiliza el 1% del espacio disponible. Esto no me dice el tamaño exacto que está disponible para crear un nuevo volumen ext4. (La opción -V es obligatoria; si no la especifica, ext4.mkfs no podrá formatearlo).
Por supuesto, siempre puedo hacer una prueba, algo como esto:
# 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
En este punto, puedo estar seguro de que queda como máximo 1G de espacio sin utilizar. Esto esmuy torpe. Puedo vivir con esto, pero tengo que hacer lo mismo en varias unidades en el futuro.
¿Existe una mejor manera de "utilizar todo el espacio disponible" para crear untamaño fijo¿volumen?