1

我试图通过将可用物理扩展区的数量乘以扩展区大小来计算 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::FormatNumber::Bytes::Human都不支持从一个“后缀”到另一个的转换,例如 MB -> TB。是否有执行此操作的现有模块?我真的很喜欢Number::FormatNumber::Bytes::Human如何处理 SI/非 SI 单位(MB 与 MiB),允许您设置精度等,因此如果有,我会犹豫推出我自己的解决方案类似的全功能模块已经做到了。

编辑:范围大小并不总是以 MB 为单位,可用空间也不总是以 TB 为单位,所以我不是在问如何从 MB 转换为 TB(这将是微不足道的)。我问是否有任何现有模块可以从一个 [任意] 后缀转换为另一个而无需先转换为字节。

4

1 回答 1

1

无需通过字节即可从 MB 转换为 TB:

TB 数 = MB 数 *(1 TB 中的字节数/1 MB 中的字节数)


更新:概括:

新单元数 = 旧单元数 *(1 个新单元中的字节数 / 1 个旧单元中的字节数)

于 2013-07-31T19:42:13.340 回答