Как это работает
Единицы хранения данных считают двумя разными способами, и оба верны. Десятичная система, которой пользуются производители дисков и Международная система единиц, умножает на 1000 на каждой приставке: кБ — это 1000 байт, МБ — миллион, а ТБ — триллион. Двоичная система, родившаяся вместе с компьютерами, умножает на 1024, потому что память и шины адресуются степенями двойки.
Беда в том, что десятилетиями обе системы использовали одни и те же названия. Когда проводник Windows пишет «ГБ», на самом деле он считает гибибайты, то есть делит на 1024 три раза. Поэтому диск на 1 ТБ, в котором ровно триллион байт, отображается на экране как 931,32 ГБ: ничего не пропало, изменилась лишь линейка. С 1998 года стандарт МЭК 80000-13 снимает эту двусмысленность двоичными приставками KiB, MiB, GiB и TiB.
Инструмент переводит ёмкость сразу в три семейства единиц —десятичные, двоичные и биты— и показывает точное число байт, цифру производителя и ту, что покажет операционная система, вместе с процентом расхождения между ними. Все вычисления выполняются в браузере.
Примеры
1 TB931,32 GBНа диске 1 000 000 000 000 байт — ровно столько, сколько обещает коробка. Система делит их три раза на 1024 и показывает 931,32 ГБ, что строго говоря есть 931,32 GiB. На экране будто не хватает почти 69 ГБ; на диске не пропало ни байта.1 GiB1073741824 BГибибайт — это 2^30 байт. Десятичный гигабайт — 1 000 000 000, значит двоичный больше на 7,37 %. Это та же разница, что отделяет то, что вы имеете в виду, когда говорите «гиг», от того, что понимает под этим каждая программа.4 TB3,64 TiBЧем больше приставка, тем сильнее расходятся системы: 2,34 % на кило, 6,87 % на гига и 9,05 % на тера. Именно поэтому ощущение «маленького диска» усиливается как раз на больших дисках.100 Mbit12,5 MBСетевые каналы меряют в битах, а хранилище — в байтах. Канал 100 Мбит/с качает максимум 12,5 МБ в секунду, потому что в каждом байте 8 бит. Этот расчёт объясняет половину претензий к интернет-провайдерам.Сценарии использования
- Понять, почему диск на 1 ТБ или флешка на 64 ГБ показывают меньшую ёмкость, чем указано на упаковке.
- Перевести в читаемый вид размер в байтах, который возвращает API, журнал или команда ls -l.
- Сравнить размер резервной копии или образа между двумя инструментами, которые меряют по-разному.
- Рассчитать квоты, тома и лимиты загрузки, когда документация говорит в MiB, а интерфейс — в МБ.
- Перевести скорость канала в Мбит/с в реальную скорость скачивания в МБ/с.
- Объяснить клиенту на цифрах, что купленный диск не содержит меньше места, чем обещано.
Часто задаваемые вопросы
Купил диск на 1 ТБ, а вижу 931 ГБ — меня обманули?
Нет. На диске 1 000 000 000 000 байт, а именно это и означает 1 ТБ в десятичной системе, которой пользуются все производители. Windows берёт те же байты, делит их три раза на 1024, получает 931,32 и подписывает результат «ГБ» вместо «GiB». Это проблема надписи, а не ёмкости: все байты на месте. По-настоящему теряется другое — то, что резервирует файловая система при форматировании.
В чём разница между ГБ и GiB?
ГБ — это 1 000 000 000 байт (10^9), а GiB — 1 073 741 824 (2^30). Гибибайт больше на 7,37 %. То же соотношение повторяется на каждом уровне: кБ против KiB, МБ против MiB, ТБ против TiB. В двоичных обозначениях в середине стоит буква «i», и читаются они как киби, меби, гиби и теби.
Все ли операционные системы показывают одно и то же?
Нет, и это добавляет путаницы. Windows считает степенями 1024, но подписывает результат как ГБ и ТБ, поэтому для диска на 1 ТБ показывает 931 ГБ. macOS с 2009 года меряет десятично, и тот же диск отображается как 1 ТБ. В Linux всё зависит от утилиты: df -h и ls -lh используют 1024, df -H и ls -l --si — 1000, а многие программы уже пишут GiB там, где это уместно. Диск не менялся; менялся тот, кто его меряет.
Почему объём оперативной памяти совпадает с надписью на коробке?
Потому что память производят и адресуют степенями двойки: модуль «16 ГБ» на самом деле содержит 16 GiB, то есть 17 179 869 184 байта. Так как операционная система тоже считает в двоичной системе, оба числа совпадают и никто ничего не замечает. С дисками наоборот: производитель считает десятично, а система двоично, и расхождение сразу бросается в глаза.
Насколько растёт разница с каждой приставкой?
Она накапливается по 2,4 % на уровень. Показанное системой число меньше на 2,34 % у кило, 4,63 % у мега, 6,87 % у гига, 9,05 % у тера, 11,18 % у пета и 13,26 % у экса. Поэтому в файле в несколько килобайт разница незаметна, а в массиве на несколько петабайт это сотни терабайт ожиданий.
Мбит — это то же самое, что МБ?
Нет, разница в восемь раз. Сетевые каналы меряют в битах в секунду, а хранилище — в байтах, и в байте 8 бит. Канал 300 Мбит/с даёт максимум 37,5 МБ/с при скачивании, ещё до вычета заголовков протоколов. К тому же сетевые приставки всегда десятичные: Мбит — это миллион бит, а не 1 048 576.
Почему у моего SSD не хватает ещё больше места?
К разнице между десятичной и двоичной системами добавляются две вещи. Первая — резервирование (over-provisioning): контроллер оставляет себе часть флеш-памяти, недоступную пользователю, чтобы заменять изношенные блоки и ускорять запись. Вторая — файловая система, которая сразу после форматирования занимает место под таблицы, журнал и метаданные. Ни то, ни другое не является неисправностью: это плата за то, что накопитель работает и служит долго.
Какую же единицу использовать в документации?
Ту, что не оставляет сомнений. Если значение считается степенями 1024, пишите MiB или GiB; если степенями 1000 — МБ или ГБ. В API или файле конфигурации надёжнее всего отдавать количество байт напрямую и позволить интерфейсу решать, как его показать. Это одна строка кода, которая избавляет от часов споров о том, почему два инструмента показывают разные цифры для одного и того же файла.