Тему преобразования raw- в usable-емкость в этом блоге я поднимаю не в первый раз, прежде всего потому, что вокруг этой темы наверчено всегда множество мифов и непонимания. Ранее я писал на эту тему тут и тут. Сегодня же я хотел бы остановиться на особенностях “арифметики”, используемой в нашей отрасли.
Об опасности, связанной со смешением результатов "двоичной" и "десятичной" арифметик при расчете емкости я уже также писал, а сегодня углубимся в эту тему отдельно.
Как вы все, наверное, знаете, в IT исторически принято считать в "двоичной" арифметике, то есть "килобайт" у нас равен не тысяче, как следовало бы из использования приставки kilo- во всех прочих случаях, а 1024-м байтам. Казалось бы, какая ерунда, всего 24 байта на каждой тысяче, можно не обращать внимания. ?? мы часто не обращали, пока не выросли объемы.
В ранее опубликованной записи я уже показывал, как эта "незначительная разница" достигает 10 процентов на емкостях в терабайт и более.
Для устранения этой неоднозначности, международная организация стандартизации ISO, несколько лет назад настоятельно рекомендовала использовать для "двоичных" множителей специальный набор приставок, чтобы избежать этой путаницы в дальнейшем. Однако они по-прежнему чрезвычайно редко применяются, и путаница продолжается.
С этой особенностью ближе всего знакомы те, кто используют жесткие диски. Производители жестких дисков указывают емкость своих продуктов в "десятичных" единицах (и при этом абсолютно правы, формально, кроме того, "в попугаях" их емкость "гораздо длиннее";), в то время, как в компьютере у нас всюду используются "двоичные" меры исчисления. Килобайт там состоит не из 1000, а из 1024 байт, мегабайт из 1024 килобайт, и так далее.
Если мы посмотрим на спецификации жестких дисков (возьмем для примера WD RE4 на "2TB") , то мы увидим там следующее:
Sectors per disk drive = 3 907 029 168
Formatted capacity = 2 000 398MB
Давайте проверим приведенные значения:
3 907 029 168 секторов x 512 байт = 2 000 398 934 016 байт
2 000 398 934 016 байт /1000 = 2 000 398 934kB /1000 = 2 000 398MB
Таким образом все верно, WD указал емкость в десятичных единицах, и емкость в них диска WD RE4 действительно равна 2 000 398 Мегабайт.
Однако для компьютера, который считает в "двоичной арифметике", в которой в “килобайте” не 1000, а 1024 байт, та же емкость будет следующей:
3 907 029 168 секторов x 512 байт = 2 000 398 934 016 байт
2 000 398 934 016 байт /1024 = 1 953 514 584 kiB /1024 = 1 907 729 MiB = 1 863 GiB
Обратите внимание на то, что, в отличие от компьютера, чтобы не путать вас, я указал в качестве единиц измерения именно "бинарные" приставки: kiB, MiB, GiB - "кибибайты", "мебибайты" и "Гибибайты".
??того, ваш компьютер, считающий в "двоичной" (Base2) арифметике, покажет вам емкость вашего диска примерно на 10% меньше. В этом нет никакого обмана (если этим не пользуются в корыстных целях), но не надо удивляться полученному результату. Однако 10% емкости “двухтерабайтного” диска это совсем не "24 байта на тысячу", которыми можно пренебречь, это без малого 200 "гигабайт".
Все только ухудшается, если емкости растут, например если вы собираетесь делать RAID из множества дисков 2TB, причем желали бы получить в итоге строго определенную емкость.
В эту ловушку попадали на моей памяти уже многие, при планировании емкости системы хранения.
"Если нам надо 50TB, то возьмем 2 полки DS14mk2-AT c 14 дисками 2TB в каждой, итого будет 28 помножить на 2 - 56TB, минус два на RAID parity, минус один на hot spare - вот и получается 50".
Не получается. Помните об этом.
Но это еще не все.
О затратах емкости на Zone и Block checksum - в следующем посте.