何も失われていない
「1 TB」とラベル付けされたドライブを接続すると、ほとんどのオペレーティング システムは約 931 GB と報告します。実際には容量は失われていません。ドライブにはラベルに記載されている内容がそのまま含まれており、「欠落している」69 GB は、キロ、メガ、ギガ、テラという接頭辞の二つの異なる定義が同じ物理的バイト数に適用されたことによる、単なる副産物です。
二つの接頭辞システム、同じ名前、異なる意味
| 十進法 (SI 形式) | 値 | 二進法 (IEC) | 値 |
|---|---|---|---|
| キロバイト (kB) | 1,000 バイト (103) | キビバイト (KiB) | 1,024 バイト (210) |
| メガバイト (MB) | 1,000,000 バイト (106) | メビバイト (MiB) | 1,048,576 バイト (220) |
| ギガバイト (GB) | 1,000,000,000 バイト (109) | ギビバイト (GiB) | 1,073,741,824 バイト (230) |
| テラバイト (TB) | 1,000,000,000,000 バイト (1012) | テビバイト (TiB) | 1,099,511,627,776 バイト (240) |
ストレージ メーカーは十進法を使用しており、この区別が別々の名前を持つようになる前からずっとそうしてきました。なぜなら、マーケティングされた容量を丸い数字にでき、他のあらゆる業界が「キロ」と「メガ」を使う方法と一致するからです。1 TB とラベル付けされたドライブには、実際に 1,000,000,000,000 バイトが含まれています。
正確な算術的背景
Windows File Explorer の従来の動作のままである二進法で「GB」を計算するオペレーティング システムは、ドライブの実際のバイト数を 1,024 の累乗で除算し、ラベルを「GiB」という正しい表記ではなく「GB」のままで出力します。
1×1012 バイト ÷ 230 バイト/GiB = 1,000,000,000,000 ÷ 1,073,741,824 = 931.32… GiB
この数値 931.32 は、二進法で除算する OS が表示する値で、「GB」という誤ったラベルが付いています。フォーマットやオーバーヘッドで何も失われていません。同じ 1,000,000,000,000 バイトを、メーカーが使用した除数より大きい除数で割り、結果に対して間違った単位名を付けただけです。
二つの名前システムの由来
あいまいさは古いものです。コンピュータの初期の日から、「キロバイト」は 1,000 バイトと 1,024 バイトの両方に対して使い分けられていました。なぜなら 210 (1,024) は 103 (1,000) に十分近かったため、小規模ではこの不正確さはめったに問題にならなかったからです。容量がギガバイト範囲に達すると、これは有害になるのをやめます。そこでは二つの定義が 7.4% 異なり、テラバイト範囲では、ほぼ 10% 異なります。December 1998 に国際電気標準会議は、修正第 2 号を IEC 60027-2 に承認し、二進法接頭辞キビ、メビ、ギビ、テビを導入して、二進法の量に独自の明確な名前を付けることであいまいさを終わらせ、キロ、メガ、ギガが計測学の他のあらゆる場所と同じように厳密に 1,000 の累乗を意味するようにしました。その標準は後に IEC 80000-13 (2008) に組み込まれました。これは国際量体系の情報科学および技術に関する部分で、両方の接頭辞セットの現在の権限として機能しています。
採用はオプションであり、それが表れている
標準化団体は正しい名前を定義できます。しかし、オペレーティング システムがそれを使用するよう強制することはできません。Apple は Mac OS X 10.6 「Snow Leopard」で macOS を十進法ベースのレポーティングに切り替えました in 2009 — 1 TB ドライブは Finder では「1 TB」と表示され、メーカーのラベルと一致します。Finder は 1,000 の累乗で除算するようになったからです。Windows は同等の切り替えを行いませんでした。File Explorer はまだ 1,024 の累乗で除算しながら「GB」というラベルを出力しており、これが同じ物理ドライブが接続されている OS によって異なる数値を表示する理由です。Linux はデザインではなくツール単位で一貫性がありません。多くのコマンドライン ユーティリティ (特に--siフラグなしのls -lhとdu -h) は二進法による除算をデフォルトにしていますが、いくつかのデスクトップ ファイル マネージャーは十進法をデフォルトにしており、正しくラベル付けされています。
RAM は二進法が単なるラベル付けの選択ではない唯一の場所
ストレージ容量は製造上の決定です。原則としては、ドライブ コントローラーはあらゆるバイト数を公開するように構築できます。RAM 容量はそうではありません。メモリ チップは二進法アドレス ラインで物理的にアドレス指定されるため、チップの容量はアーキテクチャ上二の累乗です。「8 GB」RAM モジュールは実際に 8 × 1,073,741,824 = 8,589,934,592 バイト、正しい名前で言えば 8 GiB を含んでいますが、「8 GB」フラッシュ ドライブは 8 × 1,000,000,000 = 8,000,000,000 バイトを含んでいます。同じ印刷されたラベルですが、二つの異なる物理量です。二つの異なる根本的な理由のためです。一つはハードウェア上の制約であり、もう一つはメーカーが選択した単位規約です。
バイトではなくビット、ネットワーク速度の場合
このトラップの隣にはもう一つのプリフィックス トラップがあります。ネットワーク速度は毎秒ビット数で引用され、ファイル サイズはバイト単位です。バイトは 8 ビットなため、広告されている 1 Gbps 接続は、プロトコル オーバーヘッド前には毎秒約 125 MB のファイル転送でピークに達し、1,000 MB/s ではなく 1 GB/s ではありません。広告されたリンク速度を 8 で割って、実際のファイル転送スループットを推定すると、「接続は高速です」と「ダウンロードは遅く感じます」の間の混乱の大部分が解決されます。
どちらの定義も一貫して使用していない唯一のフォーマット
3.5 インチの「1.44 MB」フロッピー ディスクは異なり、脚注ではなく本当に有益なケースです。実際のフォーマット容量は 1,474,560 バイトです。その数値は 1.44 × 1,000,000 (1,440,000、十進法による読み取り) ではなく、1.44 × 1,048,576 (1,509,949、二進法による読み取り) でもありません。1.44 × 1,024 × 1,000 です。「キロ」は二進法 1,024 として読まれ、メモリとディスク セクターが実際にアドレス指定される方法と一致しますが、「メガ」はその既に二進法のキロバイトの十進法 1,000 倍として読まれるハイブリッドです。IEC 二進法規約も通常の SI 十進法規約も説明しません。このフォーマットは 1998 年の標準化努力と多ギガバイト ドライブがもたらしたマーケティング圧力の前にさかのぼります。それは単位定義で出荷され、特に誰も満足させませんでした。
広告されたサイズをサニティ チェックする簡単な方法
ある数値が、RAM やフラッシュ チップ ダイ サイズなど、二進法単位で物理的に数えられるハードウェア容量を説明するために使用されている場合、それが二の累乗であることが予想され、したがってどちらのプリフィックス システムを使用しても同一です。ストレージ ドライブ、クラウド ストレージ層、帯域幅割り当てなど、十進法ターゲットに製造または提供されたものを説明する場合、「欠落している」パーセンテージは、オペレーティング システムがそれを二進法で除算され、誤ったラベルが付いた単位でレポートしすぐに表示されることが予想されます。