我试图通过将可用物理扩展区的数量乘以扩展区大小来计算 LVM 物理卷上的可用空间,例如:
3623365 free extents * 4.00 MB each = 13.8 TB
我使用Number::Format将范围大小转换为字节并将乘法的结果转换回人类可读的字符串,但不支持 TB 和更高,所以我最终得到了更长、更不可读的14,153.8 GB
.
根据文档,不支持 TB 及以上的原因是因为 32 位系统上的整数溢出,这让我想知道我是否应该在不使用类似Math::BigInt的情况下将任意大数相乘。我看到Number::Bytes::Human支持高达 YB(yottabytes)的数字,但它仍处于 alpha 阶段,所以我不愿在生产代码中使用它。
我的下一个想法是,当我可以以 MB 为单位计算可用空间然后转换为 TB 时,为什么还要先转换为字节?不幸的是,似乎Number::Format和Number::Bytes::Human都不支持从一个“后缀”到另一个的转换,例如 MB -> TB。是否有执行此操作的现有模块?我真的很喜欢Number::Format和Number::Bytes::Human如何处理 SI/非 SI 单位(MB 与 MiB),允许您设置精度等,因此如果有,我会犹豫推出我自己的解决方案类似的全功能模块已经做到了。
编辑:范围大小并不总是以 MB 为单位,可用空间也不总是以 TB 为单位,所以我不是在问如何从 MB 转换为 TB(这将是微不足道的)。我在问是否有任何现有模块可以从一个 [任意] 后缀转换为另一个而无需先转换为字节。