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