Parted: The resulting partition is not properly aligned for best performance

Тем кто сталкивался с разметкой емких дисковых подсистем знакома утилита parted. Для тех кто читает про нее впервые поясню – утилита fdisk или cfdisk не умеют работать с дисковыми подсистемами емкостью >2Tb, о чем честно и пишут:

Соответственно при помощи утилиты parted мы можем сделать 2-е базовые вещи:

  • Изменить тип таблицы разделов с MBR на GPT
  • Разметить дисковую подсистему на нужное количество разделов

Указанным функционалом возможности данной утилиты не ограничиваются, более подробно познакомиться с ней вы можете прочтя документацию доступную по ссылке.

Но вернемся к сообщению указанному в заголовке заметки. Это сообщение выводится в случае если при разметке parted считает что вы указали неправильные значения для начала и конца раздела, например:

И из-за этого данные, которые будут записываться или читаться с диска, будут размещены не самым оптимальным способом. Данная проблема возникла в связи с переходом производителей жестких дисков на другой размер секторов, а именно с 512B на 4KB, и в связи с этим, если при разметке диск указать неправильный стартовый сектор для раздела, то может получиться ситуация, когда один логический блок данных в 512B будет записан сразу на два 4KB сектора, которые будут прочитаны контроллером жесткого диска при запросе на выборку данных, что в итоге приводит к снижению производительности всей дисковой подсистемы. Более подробно очень детально описана данная ситуация на сайте Seagate.

Так чем же нам может помочь утилита parted для решения описанной проблемы – у ней есть встроенный функционал для расчета оптимального начального смещения для корректного выравнивания границ разделов. Настроить логику работы данного функционала можно при помощи ключа “-a”, более подробно можно прочитать в документации.

Данный функционал работает по следующей логике:

Где указанные параметры – это значения в sysfs привязанные к дисковой подсистеме или конкретному разделу, например:

Поэтому для решения указанной в заголовке проблемы, вы можете посчитать номер стартового сектора в ручном режиме по формуле и указать его в parted:

Либо довериться аналогичному алгоритму встроенному в утилиту:

В случае если ошибка не возникнет и раздел будет размечен можете считать что вы все сделали правильно и у вас правильно произведено выравнивание блоков на дисковой подсистеме.

comments powered by HyperComments
cormorant
2015-01-26 07:25:03
Очень пригодилось, спасибо)
Пётр
2015-02-05 13:40:45
Небольшое уточнение про расчёт: startsector = (optimal_io_size + alignment_offset) / physical_block_size
WTF FTW
2016-03-16 09:51:01
mkpart primary 0% 100% profit
admin
2016-04-02 19:04:21
Yep, check last part of this article. But sometimes this algoritm can fail, so first part of article describe alternative way for same goal.
risky
2017-09-21 23:20:24
<strong>risky</strong> Parted: The resulting partition is not properly aligned for best performance | SysAdmins Location