Что такое Advanced Format?


Все началось с жалобы клиента, который как он утверждал обнаружил брак в одном из наших контроллеров LSI (уже тогда Broadcom) 9260-8i, который никак не хотел видеть полный объем его диска ST6000NM004, т.е. вместо положенных 6ТБ, контроллер определял всего 750Гб. Но через час он перезвонил и сказал, что проблема скорее в дисках, т.к. контроллер мат.платы Supermicro тоже определяет эти диски с доступной емкостью 750Гб.

А все дело в том, что контроллер 9260 построен на чипе RoC LSI 2108, который не поддерживает диски формата 4KN, мало того, в одном из разделов FAQ Supermicro сообщалось, что чипсет С600 также не поддерживает диски 4KN.  Так в чем же особенность этих дисков?

По старинке (традиционно)  в дисках использовалось разделение его на сектора размером 512 байт, в новых же дисках этот сектор составляет 4096 байт. Нужно это для увеличения эффективности размещения данных на диске. Дело в том, что каждый сектор из 512 байт несет в себе 50 байт кода для коррекции ошибок и другие служебные данные, в то время как сектор из 4096 байт имеет аналогичный блок коррекции ошибок, который составляет всего 100 байт. Соответственно большинство объемных дисков современности будут иметь этот формат сектора.

Для наглядности картинка ниже:

Чтобы это все работало, необходимо чтобы контроллер работающий с диском понимал этот сектор в 4096 байт. Как оказалось эту проблему ранее удавалось не замечать благодаря эмуляции традиционного размера в 512 байт со стороны диска. Данный стандарт именуется как 512Е.

В целом получается, что на рынке сейчас существуют три стандарта разметки диска:

  • 512N (native) — c  логическим и физическим размером сектора в 512 байт
  • 512E (emulation) — логический размер 512 байт, физический 4096 байт
  • 4KN  — логический и физический размер сектора 4096 байт

Эмуляция вещь удобная но и она же создает некоторые проблемы. Дело в том, что если Вам необходимо записать блок размером в 512байт, при эмуляции необходимо считать весь сектор целиком, поменять в нем блок данных размером в 512 байт и заново записать. Получается тройная операция, которая сказывается на производительности, а еще есть еще важный нюанс, допустим, если при разметки диска не будет учтено смещение, то произойдет смещение логического сектора относительно физического и это приведет к постоянным операциям чтения\изменение\запись что однозначно скажется не производительности. Наглядная картинка взятая с habrahabr.ru ниже:

 

Поэтому в современных ОС изначально раздел создается со смещением 1Мб, т.е. 1024 Кб. Ранее загрузочные разделы создавались с 63 сектора, а это получается 63*512=32256, а эта цифра не кратна 4096, вот вам и смещение, отсюда и снижение производительности. А еще немаловажно, что если в процессе изменения эмулированного блока произойдет сбой электропитания, вероятность потери данных заметно увеличивается. Особенно это важно при работе дисков в RAID.

Несколько постулатов основанных на сказанном выше:

  • Смешивать разные диски (512N\E и 4KN) в одном массиве нельзя.
  • Диски 4KN будут выдавать блоки размером 4096 байт соответственно для загрузки с них необходимо GPT, соответственно UEFI.
  • Обязательно проверять совместимость контроллера с форматом ваших дисков. (в нашем случае, диски ST6000NM004 удалось распознать на контроллере Broadcom LCI 9361)

 

Статья упрощена и написана по материалам доступным по ссылке: https://habrahabr.ru/post/245085/