2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

KiB, MiB, GiB 〜 120GBと言われたデータが128GBのUSBメモリに収まらない理由

Last updated at Posted at 2022-11-08

はじめに

 知ってしまえばどうということはない話だった。突き詰めれば KBKiB の違い。ファイルサイズやディスクの使用サイズ、空き容量などを調べるとみかけるこれらの表記。大した違いじゃないだろうと思ってたものの、地味に気にはなっていた。
 今回、古いディスクのパーティション分割やフォーマットの機会があったので、ついでに調べてみた。

身近にあった例が表題の件。思い返せば、128 GB のUSBメモリを買ったのに、サイズが 119 GiB と表示されたのにもびっくりした記憶。

予備知識

GBはさておきKBから。

KBはキロバイト、KiBはキビバイトと読む。違うのは読み方だけでなく、定義も違うし、具体的なバイト数も異なる。

1 KB  = 1000 B = 10^3 B(10の3乗バイト)
1 KiB = 1024 B = 2^10 B(2の10乗バイト)

前者のKは10進数が基準のSI接頭語であり慣れ親しんだ表現だけど、後者は2進接頭語を用いた表現であり馴染みが薄い。これまであまり気にしてなかったけど、それぞれ1000倍、1024倍して接頭語が1段階上がるたびに差が広がっていく。大して変わらないだろうと軽視してると、ギガを超えたあたりで痛い目を見る。(というか見た)

よく知られているように、10進数が基準のSI接頭語の世界では1000倍していくごとにキロ=K、メガ=M、ギガ=G、テラ=Tといった略記号が用いられる。1MBは1000KBで、1TBは1000GBだ。一方、2進接頭語の世界ではこれに対応する形で1024倍していく。それが KiB=キビバイト、MiB=メビバイト、GiB=ギビバイト、TiB=テビバイト。

1 MiB = 1,024 KiB
      = 1,024 * 1,024 Byte
      = 1,048,576 Byte

1 GiB = 1,024 MiB
      = 1,024 * 1,024 * 1,024 バイト
      = 1,073,741,824 バイト

1 TiB = 1,024 GiB
      = 1,024 * 1,024 * 1,024 * 1,024 バイト
      = 1,099,511,627,776 バイト

これらを SI接頭語を用いて表すなら

1 MiB ≒ 1,048 KB
      > 1 MB

1 GiB ≒ 1,073 MB
      > 1GB

1 TiB ≒ 1,099 GB 
      >> 1TB

となる。1TiBと1TBの差は99GB、実に1割近くもあり、目を疑う

メモリのサイズが思ってたのと違うけど

以上が日常で見かけるデータサイズやディスク容量の表記に対する違和感の正体。そして冒頭でも触れた例のように、USBメモリのサイズが買った時とPCに差して見たときとで

16 GB → 14.4 GiB
128 GB → 119.2 GiB

となってびっくりしたり、騙されたor損した気分になるのもそういうこと(実際にはファイルシステムやOSが管理領域を確保したりするので、空き容量はもっと小さい)。

しかしこれはUSBメモリ等の商品パッケージの誤表記ではない。くどいようだが 16GiB や 128GiB という表記じゃないのは定義上違うから当然だし、GBとGiBとでは実際の差が無視できないくらい大きいので、なおさら当然。よく見るとわかるが128GBのメモリはちゃんと

128 GB  = 128,000,000,000 Byte

分の容量はある。(大抵はこれよりも少し多めに作ってあるようだ)。

もしこの 128GB を 128 GiB と同一視しちゃうと嘘になっちゃう。

128 GiB = 128 * 1024 * 1024 * 1024 Byte
        = 137,438,953,472
        ≒ 137 GB

※実際には128GBのものを137GBのものとして売るわけにはいかない。

そしてこの手の混乱がもたらされた結果、例えば、実際は 120GiB のデータなのに「120GB のデータだよ」と言われてもらったものが 128GBのUSBメモリ(総容量 119.2 GiB)に入らなかったりするのもこういうこと。

定義を知ってしまえば当たり前のことだけど、要するにこういうことだ。

1 KiB  > 1 KB
1 MiB  > 1 MB
1 GiB  > 1 GB
1 TiB >> 1 TB
...

同程度のオーダーで生じる差異

接頭語の定義の違いは分かったけど、個人的に知りたいのは1バイト単位での正確な数値なのだった。(パーティションを正確に切りたかったので)。欲しい一覧が意外とすぐに見つからなかったので、計算してまとめた。

パーティション分割に使う fdisk コマンドは +1G とサイズ指定したときに GiB で計算してくれる。今回作った一覧で確認できた。他の接頭語も同様。期待した方の仕様で良かった。

なお、Y=ヨタやYiB=ヨビバイトの上の接頭語は2022年11月に決まるらしい。奇遇にもホットな話題だったので、先行して書いておいた。確定でないので ? を付けてある

※SI接頭語は 10^(3*n), 2進接頭語は 2^(10*n) のようにも書けるが比較しやすいようにした。

SI接頭語 べき表記(SI) 2進接頭語 べき表記(2進) バイト数(2進接頭語表記の場合) 差(2進 - SI)
1 1000^0 1 1024^0 1 0
k 1000^1 KiB 1024^1 1,024 24
M 1000^2 MiB 1024^2 1,048,576 48,576
G 1000^3 GiB 1024^3 1,073,741,824 73,741,824
T 1000^4 TiB 1024^4 1,099,511,627,776 99,511,627,776
P 1000^5 PiB 1024^5 1,125,899,906,842,624 125,899,906,842,624
E 1000^6 EiB 1024^6 1,152,921,504,606,846,976 152,921,504,606,846,976
Z 1000^7 ZiB 1024^7 1,180,591,620,717,411,303,424 180,591,620,717,411,303,424
Y 1000^8 YiB 1024^8 1,208,925,819,614,629,174,706,176 208,925,819,614,629,174,706,176
R? 1000^9 RiB? 1024^9 1,237,940,039,285,380,274,899,124,224 237,940,039,285,380,274,899,124,224
Q? 1000^10 QiB? 1024^10 1,267,650,600,228,229,401,496,703,205,376 267,650,600,228,229,401,496,703,205,376

kBとKiBの間では誤差は2.4%程度だけどTBとTiBになると9.9%で約1割に拡大する。さらにその約1テラ倍に相当するYBとYiBになると2割に拡大する。

読み方

2進接頭語の記号は「●iB」という表記だけど、読み方は「●ィビバイト」とは限らないらしい。身近なKiBは「キビバイト」、GiBは「ギビバイト」だけど、MiBはミビバイトではなく「メビバイト」、TiBはティビバイトやチビバイトではなく「テビバイト」と読むとのこと。SI接頭語の発音を知ってたら類推しやすいというのがまた悩ましい。

k        M     G    T    P    E    Z     Y     R?     Q?
Kilo     Mega  Giga Tera Peta Exa  Zetta Yotta Ronna? Quetta?

KiB      MiB   GiB  TiB  PiB  EiB  ZiB   YiB   RiB?   QiB?
Kibibyte Mebi- Gibi Tebi Pebi Exbi Zebi  Yobi  Robi?  Quebi?

ただやはり、そのうちMiBをミビバイト、TiBをティビバイトとか読み始めて混乱しそう。

TiBはチビバイトじゃないぞって思い出そう。

大文字と小文字の区別

実はキロバイトは正しくはkBと表記するのが正しいのだとか。そういえばkgとかkmとかは確かにそう。でも「キロバイト」のかな漢字変換で「KB」が出たりと、世の中的にも混乱している。WindowsとかURLとか、大文字小文字を区別しない文化もあるから、ありがちな自然か。

大文字小文字の区別といえば、Bはバイトでbはビット。1バイト=8ビット=2^3ビットでバイトの考え方自体が2進数由来なわけだけど、にもかかわらず以前から1KBなどと言っていた頃から既にまかれていた混乱の種が、大容量の時代に芽吹いたということか。

おわりに

GBやGiB、TBやTiB、もっと大きなオーダーの略記号を見かけたら、どちらの意味なのか注意しよう。違いは大きい。身近な単位で大雑把に言うと、

  1 MiB =   1.05 MB
100 MiB = 105    MB
  1 GiB =   1.07 GB
100 GiB = 107    GB            <----- 7GB !
  1 TiB =   1.10 TB = 1100 GB  <--- 100GB !!

なのだ。

そしてできればGiBやTiBを使う方が良いだろう。

参考資料

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?