Ничего не исчезло
Подключите диск с надписью «1 ТБ» и большинство операционных систем покажут примерно 931 ГБ. На самом деле никакая ёмкость не исчезла. Диск содержит ровно то, что указано на этикетке, а «недостающие» 69 ГБ полностью являются следствием применения двух различных определений префиксов кило-, мега-, гига- и тера- к одному и тому же количеству физических байт.
Две системы префиксов, одинаковые названия, разные значения
| Десятичная (SI-стиль) | Значение | Двоичная (МЭК) | Значение |
|---|---|---|---|
| килобайт (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 ТБ» действительно содержит 1 000 000 000 000 байт.
Точная арифметика
Операционные системы, которые вычисляют «ГБ» путём двоичного деления (что по-прежнему является поведением по умолчанию в Windows File Explorer), берут реальное количество байт на диске и делят на степени 1 024, продолжая при этом печатать надпись «ГБ» вместо правильного «ГиБ»:
1×1012 байт ÷ 230 байт/ГиБ = 1 000 000 000 000 ÷ 1 073 741 824 = 931,32… ГиБ
Это число, 931,32, показывает двоично-делящая ОС, ошибочно обозначив его как «ГБ». При форматировании или из-за расходов ничего не потеряно. Это те же 1 000 000 000 000 байт, разделённые на больший делитель, чем использовал производитель, и получившим неправильное название единицы.
Откуда появилась система с двумя названиями
Двусмысленность старая. С самых ранних дней вычислительной техники слово «килобайт» использовалось свободно как для 1 000, так и для 1 024 байт, потому что 210 (1 024) достаточно близко к 103 (1 000), чтобы такая небрежность редко имела значение в малых масштабах. Это перестало быть безопасным, когда ёмкости достигли диапазона гигабайт, где два определения расходятся на 7,4%, и диапазона терабайт, где они расходятся почти на 10%. В декабре 1998 г. Международная электротехническая комиссия одобрила Поправку 2 к МЭК 60027-2, введя двоичные префиксы киби-, меби-, гиби- и теби-, специально для прекращения двусмысленности путём присвоения двоичным количествам собственных однозначных названий, оставляя кило-, мега- и гига- для обозначения строго степеней 1 000, как они используются везде в метрологии. Этот стандарт позже был включён в МЭК 80000-13 (2008), часть Международной системы величин, охватывающую информационные науки и технологии, которая остаётся текущей авторитетной базой для обоих наборов префиксов.
Внедрение было добровольным, и это видно
Органы по стандартизации могут определять правильные названия; они не могут заставить операционные системы их использовать. Apple переключила macOS на десятичную отчётность с Mac OS X 10.6 «Snow Leopard» в 2009 г. — диск объёмом 1 ТБ показывается как «1 ТБ» в Finder, соответствуя надписи производителя, потому что Finder теперь делит на степени 1 000. Windows никогда не сделала эквивалентный переход: File Explorer по-прежнему делит на степени 1 024, выводя надпись «ГБ», вот почему один и тот же физический диск показывает разные числа в зависимости от того, на какую ОС он подключён. Linux непоследователен по инструментам, а не по замыслу — многие утилиты командной строки, ls -lh и du -h без флага --si, по умолчанию используют двоичное деление, в то время как несколько файловых менеджеров для рабочего стола используют десятичное деление с правильными обозначениями.
ОЗУ — единственное место, где двоичное деление — это не просто выбор обозначений
Ёмкость накопителя — это решение производителя; контроллер диска можно в принципе собрать для предоставления любого количества байт. Ёмкость ОЗУ — нет: микросхемы памяти физически адресуются двоичными линиями адреса, поэтому ёмкость микросхемы архитектурно представляет собой степень двойки. Модуль «8 ГБ» ОЗУ действительно содержит 8 × 1 073 741 824 = 8 589 934 592 байт, 8 ГиБ по правильному названию, в то время как флеш-накопитель объёмом «8 ГБ» содержит 8 × 1 000 000 000 = 8 000 000 000 байт. Одинаковая печатная надпись, две разные физические величины, по двум разным основным причинам: одна — аппаратное ограничение, другая — соглашение о единицах, которое выбрал производитель.
Биты, не байты, для сетевой скорости
Ещё одна ловушка с префиксами находится рядом с этой: скорости сетей указываются в битах в секунду, размеры файлов в байтах. Так как байт это 8 бит, объявленное соединение 1 Гбит/с обеспечивает примерно 125 МБ/с передачи файлов до учёта служебной нагрузки протокола, а не 1 000 МБ/с и не 1 ГБ/с. Деление объявленной скорости канала на 8 для оценки реальной пропускной способности передачи файлов разрешает большинство путаницы между «соединение быстрое» и «загрузка идёт медленно».
Один формат, который не использовал ни одно из определений последовательно
Флоппи-диск размером 3,5 дюйма объёмом «1,44 МБ» является исключением, и это поистине поучительный случай, а не сноска. Его фактическая отформатированная ёмкость составляет 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 того уже двоичного килобайта. Ни двоичное соглашение МЭК, ни простое десятичное соглашение SI не описывают его; формат предшествует обеим попыткам стандартизации 1998 г. и маркетинговому давлению, которое пришло с многогигабайтными накопителями, и он поставлялся с определением единицы, которое никого конкретно не удовлетворяло.
Быстрый способ проверить здравомыслие любого заявленного размера
Если число используется для описания ёмкости оборудования, которую вы можете физически подсчитать в двоичных единицах, таких как ОЗУ или размер кристалла флеш-памяти, ожидайте, что это будет чистая степень двойки и, следовательно, идентичная в обеих системах префиксов. Если оно описывает что-то изготовленное или выделённое для круглой десятичной цели, накопители, облачное хранилище, тарифные планы пропускной способности, ожидайте, что «недостающий» процент появится в тот момент, когда операционная система сообщит его вам обратно в двоично-разделённых, ошибочно обозначенных единицах.