X

Очень медленное восстановление raid

Сегодня взял в аренду очередной сервак у Hetzner-а, с тремя винтами по 1.5 Тб. После автоустановки образа Debian-a, я увидел, что из винтов сделан Raid5. Это меня устроило, и я продолжил настройку сервера. Однако при попытке разбить большой файл на несколько меньших с помощью команды split, я заметил, что скорость работы с винтами очень маленькая..

Тогда я решил проверить все ли с ними впорядке. Прежде всего я установил smartmontools:

# apt-get install smartmontools

и проверил S.M.A.R.T. информацию каждого винта, на предмет сбоев:

# smartctl -a /dev/sda
...
# smartctl -a /dev/sdb
...
# smartctl -a /dev/sdc

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

После этого я решил проверить сам raid массив:

# cat /proc/mdstat

Тут я увидел, что идет восстановление (синхронизация), и до его завершения осталось около недели:

Personalities : [raid1] [raid6] [raid5] [raid4]
md2 : active raid5 sda3[0] sdc3[3] sdb3[1]
      2925027328 blocks level 5, 512k chunk, algorithm 2 [3/2] [UU_]
      [==============>......]  recovery = 72.5% (1061097000/1462513664) finish=1197.0min speed=940K/sec

Разумеется, я сразу подумал, что мне достался какой-то убитый винт. Особенно смотря на скорость копирования инфы - меньше 1МБ/сек, это при том, что мои домашние SATA винты легко дают 100+МБ/сек:

Скорость копирования образа

Можно конечно, принять в учет, что сервер в этот момент, уже обслуживал много людей, однако все равно 1 МБ/сек это чертовски мало. Как всегда во время проблем, я полез в гугл за информацией, и нашел такой пост: HowTo: Speed Up Linux Software Raid Building And Re-syncing (http://www.cyberciti.biz/tips/linux-raid-increase-resync-rebuild-speed.html)

В этом посте, человек столкнулся с похожей проблемой, и оказалось, что это ограничение скорости задано в конфигах. Насколько я понял, это сделано чтобы  не оказывать, во время выполнения, большой нагрузки на файловую систему. Однако в моем случае, надо было побыстрее закончить эту процедуру, и посмотреть не будет ли она возникать (а соотвественно и мешать) мне в будущем.

Согласно посту, для того чтобы "тюнингануть" скорость, надо записать значение в КБ/с, вот сюда: /proc/sys/dev/raid/speed_limit_min

Дабы удостовериться в необходимости этой процедуры, я вначале посмотрел существует ли такой файл у меня и что в нем за значение:

# cat /proc/sys/dev/raid/speed_limit_min

На экране мне показали 1000. Значит, это именно то, про что и писали. Пробуем увеличить до 50 МБ/с ( или 50000 КБ/с ):

echo 50000 > /proc/sys/dev/raid/speed_limit_min

После этого я вновь посмотрел на скорость восстановления:

Personalities : [raid1] [raid6] [raid5] [raid4]
md2 : active raid5 sda3[0] sdc3[3] sdb3[1]
      2925027328 blocks level 5, 512k chunk, algorithm 2 [3/2] [UU_]
      [==============>......]  recovery = 74.9% (1095814656/1462513664) finish=132.8min speed=45988K/sec

Теперь она поднялась до 45988 КБ/с, и время завершения сократилось с 7 дней, до 2 часов. Вот так тюнинг 🙂

После этого, я добавил так же, эти параметры в файл: /etc/sysctl.conf

nano /etc/sysctl.conf

и добавляем, или если уже присутствует, меняем значения:

dev.raid.speed_limit_min = 50000
dev.raid.speed_limit_max = 200000

Значения вступят в силу после перезагрузки, а в случае необходимости задействовать их прямо сейчас, нужно дополнительно выполнить:

# sysctl -p

Если у меня эпопея с винтами на этом не закончится, тогда возможно будет продолжение..

P.S. Для тех, у кого на этом проблемы не исчезли, вот полезная ссылка, по которой в доступной форме и на русском написано, как определить "плохой" диск и поменять его: Узнаем какой диск из софтварного райда надо менять (http://unix-forum.ru/topic774.html)

Категории: Hetzner Linux Хостинг