空き物理エクステントの数にエクステント サイズを掛けて、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 (ヨッタバイト) までの数値をサポートしていることがわかりますが、まだアルファ版であるため、製品コードで使用することをためらっています。
次に考えたのは、空き容量を MB 単位で計算してから TB に変換できるのに、なぜそもそもバイトに変換する必要があるのかということでした。残念ながら、Number::FormatもNumber::Bytes::Humanも、ある「サフィックス」から別の「サフィックス」への変換 (MB -> TB など) をサポートしていないようです。これを行う既存のモジュールはありますか? Number::FormatとNumber::Bytes::Humanが SI/非 SI 単位 (MB と MiB) の両方を処理し、精度などを設定できるようにする方法がとても気に入っています。同様に、フル機能のモジュールはすでにそれを行っています。
編集:エクステントサイズは常にMBではなく、空き容量は常にTBではないため、MBからTBに変換する方法を尋ねていません(それは簡単です)。最初にバイトに変換せずに、ある [任意の] サフィックスから別のサフィックスに変換できる既存のモジュールがあるかどうかを尋ねています。