分析と広告のためのCookie
分析と広告のためにCookieを使っており、どちらもGoogleに送られます。拒否しても、目に見える動作は何も変わりません。プライバシーポリシーを読む
1 KiB = 0.0009765625 MiB
値を入力すると、キビバイトからメビバイトへの計算が入力に合わせてその場で進みます。1 KiB あたり 0.0009765625 MiB.この比は測って求めたものではなく、定義で決まっています。計算はお使いの端末の中で行われ、入力した数字が通信に乗ることはありません。ただし、そのまわりのページのほうは、ほかのどのページとも同じように広告を読み込みます。
512 KiB is 0.5 MiB
— 半メビバイト.
4 KiB is 0.003906 MiB
— ほとんどのシステムでのメモリーページ 1 枚.
716800 KiB is 700 MiB
— 音楽 CD 1 枚、あの数字の出どころ.
8192 KiB is 8 MiB
— プログラムが確保するメモリーのひと区画.
| KiB | MiB |
|---|---|
| 10 | 0.009765625 |
| 20 | 0.01953125 |
| 50 | 0.048828125 |
| 100 | 0.09765625 |
| 500 | 0.48828125 |
| 1000 | 0.9765625 |
| 5000 | 4.8828125 |
| 10000 | 9.765625 |
KiB を MiB に変換
1 キビバイトはちょうど 1,024 バイトです。この名前は 1998 年に、「キロバイト」に 1,000 の意味を返してやるために導入されました。もっとも、定着したとは言いがたい状況です。
1 メビバイトは 1,024 キビバイト、つまり 1,048,576 バイトです。Linux のツールとメモリーの数値は、表示が「MB」であってもほぼ常にこちらを指しています。
こちら向きの計算は割り算で、しかも整数で割り切れます。1,024 単位が余りなく メビバイト 1 つに収まります。不便なのは、結果が分数で出てくることだけです——3 分の 1、12 分の 1——逆向きなら得られる、きりのよい整数の代わりに。
それでも丸めで失われるものはありません。割り算が割り切れるからです。結果が小数で収まらない場合——0.0833… のような——それは分数が顔を出しているのであって、誤差が入り込んでいるのではありません。
KiB 1 つはひとつ下の単位の 1,024 倍で、kB 1 つは 1,000 倍です。このページでは 0.001 MiB と 0.001 MiB の差——2.4 %——になり、段を上がるごとにこの隔たりは開いていきます。写真 1 枚では丸め誤差でしかないものが、ハードディスクでは目に見える割合になるのはそのためです。
「容量が消えた」という話の中身は、これだけです。kB で売られたディスクには、書いてあるとおりのバイト数が入っています。それを 1,000 ではなく 1,024 で割り、名前は kB のまま表示しているのが Windows です。macOS は 10.6 以降ディスクの容量を十進の単位で数えているので、同じディスクが 2 台のパソコンで違う大きさに見えることがあります。減ったものはなく、丸めているのでもありません。同じバイト数に、名前が 2 つあるだけです。
この数字を生み出したコマンドのほうが、そのあとの算術より重要です。GNU duは1,024バイト単位で確保済みディスクブロックを数えるので、du -sk build/は「コンテンツが何バイトあるか」ではなく「ファイルシステムのどれだけが確保されているか」に答えています。ls -lはコンテンツのバイト数のほうを報告し、この二つは同じディレクトリに対して何倍も違うことが日常的にあります。
これはMiBの数字が判断に使われる瞬間に重要になります。tarballやコンテナイメージのレイヤー、アップロードのクォータのサイズを決めるのはコンテンツについての問いであり、見かけ上のサイズを求めています。パーティションのサイズを決めたりボリュームがいっぱいになった理由を調べたりするのは確保についての問いであり、duが表示したものを求めています。間違ったほうをMiBに換算すると、算術としては完璧でも量として的外れな答えが出ます。statコマンドは単一ファイルについてこれを解決してくれます。Sizeの行はバイト単位の長さ、Blocksの行はファイルシステムが何を使っていようと512バイト単位で数えた確保量で、後者を半分にするとキビバイトになります。二つが1ブロック以上食い違っていたら、そのファイルはスパースであるかファイルシステムが圧縮しています。
この接頭辞は造語です。kilobinaryがkibiに、megabinaryがmebiに、gigabinaryがgibiになりました。IECは1998年にIEC 60027-2の改訂としてこれを採用し、IEEEは2002年にIEEE 1541でこれを支持し、今はISO/IEC 80000-13に収められています。狙いは「キロバイト」があらゆる文脈で1,000バイトという意味に戻れるようにし、二進法の意味には固有の名前を与えることでした。
普及は片方だけ進んで止まりました。LinuxやBSDのツール、多くの規格文書、いくつかのハイパーバイザー、Kubernetesは全てIEC接頭辞を使っています。ストレージのマーケティング、Windows、macOSのユーザー向け表示、多くのプログラミング言語のドキュメントは一度も使いませんでした。この分裂こそが、画面上のキビバイトの数字がほぼ確実にUnix系ツールから来ていて、同じ量が別の場所にあったらどちらの意味かを知る術がないままKBとラベル付けされていた理由です。
du -h、ls -lh、df -h、free -hはどれもデフォルトで2のべき乗を使い、iの付かない一文字の接尾辞——K、M、G——を印字します。--siフラグを付けると同じツールが10のべき乗に切り替わり、小文字のkを印字します。この一文字の大文字小文字だけが唯一の手がかりであり、チケットに貼り付けられたスクリーンショットの中では見えなくなります。
だから3.5Mと表示されたリストは3.5 MiB、つまり3,670,016バイトであり、これをメガバイトだと仮定して何かに渡すと4.9パーセント少なく見積もることになります。数字が実行するためではなく引用されるために使われるなら、du -B1やls -lで生のバイト数を得ると読みにくくなる代わりに誤解の余地がなくなります。ls -l --block-size=Kやdu --block-size=Kは出力の中で単位を明示してくれるので、チケットやランブックに貼り付けられる可能性がある出力ではこの余分なタイピングをする価値があります。
ファイルシステムはブロック単位で容量を渡します。デフォルトのブロックサイズはext4、XFS、NTFSどれも4 KiBで、これはx86-64のメモリページサイズと一致していて、それは偶然ではありません。200バイトのファイルは1ブロックを占有し、4,096バイトのファイルも同様で、4,097バイトのファイルは2ブロックを占有します。この無駄な余りはスラックと呼ばれ、ディレクトリの合計をMiBに換算して予想の何倍もの数字が出てくるまで見えません。
この算術は一度やっておく価値があります。平均200バイトのファイル1万個はコンテンツとしてはおよそ2 MiBですが、ディスク上では40,960 KiB、つまり40 MiBを占有します。du --apparent-size -skはコンテンツの数字を報告し、素のdu -skは確保された数字を報告します。node_modulesツリーやMaildirはこの差が最悪の形で現れる場所です。
1キビバイトは2の10乗バイト、1メビバイトは2の20乗バイトなので、両者の間の移動は10ビットのシフトです。どんなKiBの値も小数で終端するMiBの値に換算されます——1 KiBは0.0009765625 MiBで、丸めも循環小数もなく完全に書き出せます。1,024は2以外の素因数を持たないため、10進小数はちょうどそうした分母のときに終端するからです。
これは単位換算の中で、浮動小数点の結果を無条件に信頼できる珍しい一角です。2の43乗未満のどんなKiBの値も、分子と分母がどちらも2のべき乗で指数がそのシフトを吸収するため、ビットを一つも失うことなく倍精度浮動小数点数として1,024で割れます。キログラムをポンドに変換する計算はそう主張できませんが、これは主張できます。
du -skはキビバイトのそのままの整数を、du -shは丸められた人間向けの文字列を返します。丸められた形は読むためのもので、整数は計算するためのものです。この二つを取り違えると、容量のスプレッドシートがどこか一行が明らかに間違っているようには見えないまま数パーセントずれてしまいます。丸められた出力はせいぜい有効数字三桁しか持っておらず、1.1Gはおよそ50 MiB未満のすべての情報を捨てています。
実務上の習慣は、KiBで収集し最後に整形することです。du -sk | sort -nは正しくソートされますが、du -sh | sort -hはソート側にも-hフラグが必要で、それがないと1.1Gが9.9Mより上に来るような静かな誤順序が起こります。人が読むタイミングになって初めてMiBに換算してください。それより前ではありません。
Linuxシステムのいくつかの場所は定義上KiBで数えられていて、MiBの数字は使う前に戻す必要があります。ulimit -sはキビバイト単位のスタック上限で、よく見る値は8192です。ディスククォータは1 KiBブロックで設定・報告されます。tmpfsマウントのsize=オプションはこの中の落とし穴です。カーネルのドキュメントによれば裸の数字はバイトを意味するので、size=65536はキビバイトで数えていた人が期待した64 MiBではなく64 KiBになります。k、m、gを付けて意図を明示してください。/proc/meminfoのほとんどすべての行はkBというラベルの付いたキビバイトで、例外はHugePages_で始まる行で、これらは単位のないページ数です。
目的地がこうしたフィールドの一つであるなら、有用な方向はむしろ逆で、ここでの換算は設定のためではなく読み取りのためのものです。8192が8メガバイトではなく8メビバイトであることを確認するためにMiBの数字を計算し、それからキビバイトの数字をそのままフィールドに戻してください。
1 KiB は 0.0009765625 MiB.画面に出しているのは有効数字 12 桁までです。キビバイトとメビバイトの比そのものは定義によって決まっている厳密な値で、丸めが入るのは表示のところだけです。
いいえ。計算はブラウザーの中で行われます。通信を切ったままでも計算は続けられますし、それがいちばん手軽な確かめ方でもあります。
同じ名前の単位が 2 つ動いているからです。メーカーは 1 GB を 1,000,000,000 バイト(10 億バイト)として数えます。一方 Windows が表示しているのはギビバイト、つまり 1,073,741,824 バイトで、それを「GB」と呼んでいます。同じディスクが 7 パーセントほど小さく見えるのはこのためです。消えたものは何もありません。
1MiBは1024KiBです。同じ関係を逆から読んだだけなので、一方のページの答えをもう一方に通せば、必ず元の値に戻ります。
このページがデータ量の単位について述べていることは検証できます。根拠となる資料は次のとおりです。
係数はページ内の定数で、計算は四則演算だけです。だからどこにも送信されませんし、送信する必要もありません。入力した数値はブラウザーから出ません。運ぶためのリクエストが存在しないからです。