Добрый день.
После миграции с DS211j (RAID1) на DS416Play встал вопрос о выборе RAID для работы со всеми четырьмя дисками.
Выбрал RAID5 т.к. вскоре планирую нарастить объемы хардов, а на RAID10 замена осложняется.
DSM позволяет изменить тип RAID1 на RAID5 уже после добавления 3-го диска, так что никаких проблем вроде слива информации на донора, а потом её восстановления нет. Просто вставляем диски и делаем rebuild.
Вот только идет он очень медленно. При настройках по-умолчанию скорость ребилда не поднимается выше 3мб\с.
С моим массивом из 4х2TB ребилд займет около 8.000 мин ~ 6 дней .
В поисках решения проблемы я перелопатил много разных форумов и сайтов, хочу поделиться с вами полученным опытом.
Здесь считаю нужным сделать оговорку, что я выполнял данные операции на свой страх и риск, при этом имея в запасе бекап критически важных данных. Если у вас нет бекапа и вы не понимаете что делаете, не рекомендую экспериментировать.
При этом реальной информации о сроках окончания DSM не дает. В диспетчере хранения мы можем увидеть только процент текущего выполнения (да и то от медитации на эти цифры оказывается больше вреда чем пользы, но об этом ниже).
http://www.pro-blog.com/wp-content/uploads/2015/02/rebuild-percentage.png
Посмотреть текущую скорость и время окончания можно по SSH.
Для выполнения команд нужно использовать логин root, сейчас насколько я понимаю Synology что-то поменяли в логике аутентификации SHH поэтому сразу под ним зайти нельзя.
Сначала вводим учетку ADMIN и пароль от нее. Затем выполняем команду
sudo -i
И снова вводим пароль админа.
курсор должен смениться на
root@DiskStation:~#
Для оценки скорости и длительности процесса нужно подключаться к NAS через SHH и воспользоваться командой.
# cat /proc/mdstat
Которая будет возвращаять что-то вроде
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md2 : active raid5 sdd3[3] sdc3[2] sdb3[0] sda3[1] 1948792256 blocks super 1.2 level 5, 64k chunk, algorithm 2 [4/4] [UUUU] [======>..............] reshape = 3.2% (608558016/1948792256) finish=8936.4min speed=2385K/sec
Почитав форумы и несколько статей, выяснилось что по умолчанию переменные отвечающие за пропускную способность RAID выставлены в минимальные значения.
Видимо, так сделали для того что бы не страдали от дефицита ресурсов остальные задачи сервера.
Но нам с вами остальные задачи не важны, нам нужно поскорее перестроить массив и наслаждаться.
Установим минимальную скорость в 50 Мб/сек, а максимальную в 300 Мб/cек (вы можете варьировать данные значения)
echo 50000 > /proc/sys/dev/raid/speed_limit_min echo 300000 > /proc/sys/dev/raid/speed_limit_max
Уже это многим помогает увеличить скорость в разы.
Однако, в моем случае данная команда помогла не сильно, скорость осталась в районе 3мб/с.
Здесь важно отметить - если у вас открыт диспетчер хранения (что в общем-то логично, при мониторинге процесса), это может замедлить скорость ребилда до 10 (!!!) раз.
Как это объяснить - не понимаю. Возможно кто-то из вас знает - поделитесь.
А пока нам остается смотреть скорость и время ребилда через SHH при закрытом DSM.
Так же имеет смысл увеличить stripe_cache_size. Данный способ нельзя назвать полностью безопасным, т.к. вот тут http://www.pro-blog.com/fix-synology-long-...-rebuild-times/ один из пользователей развалил свой RAID после неё (хотя очевидно он где-то ошибся в синтаксисе, в любом случае доступ к данным ему удалось восстановить через службу поддержки synology).
Синтаксис команды:
echo ххххх >/sys/block/md2/md/stripe_cache_size
Где ххххх - величина в байтах.
А md2 - создаваемый RAID5. Нумерация идет след. образом. md0 - первый диск зеркала, md1 - второй диск в зеркале, md2 - новый массив.
Соответственно перед вводом команды проверьте нумерацию, если мигрируете с другой конфигурации (например 3 диска), то она может отличаться, в любом случае cat /proc/mdstat покажет структуру.
Задавая значение кеша нужно опираться на количество доступной в вашем NAS паяти и количество дисков в массиве. Для своего DS416Play я выставил значение в 24мб.
Табличку с рассчетом потребления памяти можно найти тут: https://romanrm.net/mdadm-raid

Там же приведен синтаксис команд для параметров Chunk size и Read Ahead.
Chunk size - не получиться изменить на работающем массиве, так что на ней останавливаться не будем.
А вот параметр read ahead может быть интересен.
# Посмотреть текущий: blockdev --getra /dev/md? #Поменять: blockdev --setra <новое значение в секторах (512 байт)> /dev/md?
У себя я использовал след. параметры
blockdev --setra 65536 /dev/md0 blockdev --setra 65536 /dev/md1
Т.е. увеличил для обоих дисков с зеркала (т.к. с них идет основное чтение, кстати по умолчанию там стояло что-то около 4000)
Повышаем приоритет обработки процесса ребилда. Диапозон параметра от -20 до 19.
renice 5 -p PID
PID - id номер процесса, который возвращает команда
pidof program_name
program_name - можно найти в мониторе процессов DSM. В данном случае повышался приорите для 2х задач:
md2_raid5
md0_resync
Соответственно с приоритетом 5 и 6.
В итоге удалось повысить скорость с 3мб/с сначала до 30-35 мб/с, а затем до 130 мб/с что приближается к максимальной скорости дисков.
Ребилд занял около 12 часов вместо 140.
http://i85.fastpic.ru/big/2016/0915/58/e5a07c6d537705804c92e397c8ed4758.png
Надеюсь моя компиляция данных по этому вопросу кому-то поможет.
Дополнения - приветствуются.