RAID и HDD - несоответствие времени ожидания
(перевод)
Введение
Когда операционной системе необходимо прочитать данные с диска, она отправляет команду и ожидает ответа. В норме диск успешно возвращает данные.
Если что-то идёт не так, последовательность действий должна быть такой: диск не может считать данные, он пытается повторить операцию еще несколько секунд, если это не удаётся (время ожидания истекло), возвращает операционной системе сообщение об ошибке. Программа управления RAID-массивом вычисляет, какие должны были быть данные, и записывает их обратно на диск (восстанавливает сбойные данные). Подобные ошибки — обычное дело, и если диск не вышел из строя, проблема будет устранена. Если операция чтения с диска не удалась, это не значит, что операция записи на те же сектора тоже завершится неудачей.
Тайм-аут жёсткого диска и тайм-аут ядра
Тайм-аут жёсткого диска — это время, по истечении которого жёсткий диск прекращает попытки чтения данных и возвращает операционной системе сообщение об ошибке. Этот параметр зависит от конкретного диска. Значение по-умолчанию редко указывается в документации! На некоторых дисках можно настроить тайм-аут, на других — нет. Эта функция настройки тайм-аута жёсткого диска называется «управление восстановлением после ошибок» (Error recovery control, ERC), хотя разные производители называют её по-разному. Western Digital, например, называет эту функцию «восстановлением после ошибок с ограничением по времени» (time-limited error recovery, TLER), а Samsung/Hitachi — «ограничением времени выполнения команд» (command completion time limit, CCTL).
Большинство дешёвых современных жёстких дисков для настольных компьютеров не поддерживают функцию контроля восстановления после ошибок. Вам следует обратиться к документации по конкретной модели или найти человека, у которого есть такой диск, и с помощью команды smartctl в Linux выяснить, поддерживает ли он эту функцию.
Чтобы проверить, поддерживает ли диск функцию контроля восстановления после ошибок, посмотрите вывод команды smartctl и проверьте, поддерживается ли функция SCT Error Recovery Control. Для этого можно использовать следующую команду:
smartctl -l scterc /dev/sdx
Если ERC не поддерживается, вам придется смириться с таймаутом жесткого диска по-умолчанию. К сожалению, на настольных компьютерах диски могут простаивать более двух минут (за исключением SMR-дисков, которые работают еще хуже, как мы увидим позже), в то время как ядро Linux ожидает ответа от диска 30 секунд. После чего RAID пересчитывает блок и пытается записать его обратно на диск. Диск все ещё пытается считать данные, но не отвечает, поэтому RAID-массив считает, что диск вышел из строя, и удаляет его из массива. Вот так одна единственная ошибка в работе этих дисков может привести к выходу из строя всего RAID-массива.
Чтобы этого избежать, нужно проверить, поддерживают ли диски технологию ERC, и установить время ожидания диска в районе 7 секунд. Диски, не поддерживающие ERC, лучше всего заменить на те, которые поддерживают эту технологию, но если бюджет ограничен, измените время ожидания в ядре Linux и увеличьте его до 3 минут. Таким образом, в случае ошибки при чтении время ожидания в ядре будет больше, чем время ожидания накопителя, и вы избежите ситуации, когда работающий накопитель будет исключён из массива.
Следующий скрипт был опубликован в списке рассылки Брэдом Кэмпбеллом. Убедитесь, что он запускается при каждой загрузке — особенно это касается дешёвых накопителей, которые забывают все настройки при выключении системы. Скрипт увеличивает время ожидания для всех накопителей, не поддерживающих ERC. Он также устанавливает время ожидания для накопителей, поддерживающих ERC, поскольку у многих старых настольных накопителей, которые его поддерживают, установлены неподходящие настройки.
#!/bin/bash for i in /dev/sd? ; do if smartctl -l scterc,70,70 $i > /dev/null ; then echo -n $i " is good " else echo 180 > /sys/block/${i/\/dev\/}/device/timeout echo -n $i " is bad " fi; smartctl -i $i | egrep "(Device Model|Product:)" blockdev --setra 1024 $i done
ВНИМАНИЕ: это работает не со всеми накопителями, хотя, судя по всему, проблема возникает только со старыми накопителями, выпущенными до 2010 года (и после 2019 года с технологией SMR). Команда smartctl пытается установить время ожидания ERC равным 7 секундам. В случае успеха возвращается значение 0, в случае ошибки — код ошибки. К сожалению, на накопителях, которые вообще не поддерживают SCT, попытка установить ERC завершается ошибкой, но возвращается значение 0, что вводит скрипт в заблуждение. При покупке нового накопителя убедитесь, что он работает должным образом.
Черепичная магнитная запись (Shingled Magnetic Recording, SMR): новая пандемия
В 2019 году новая технология под названием «черепичная магнитная запись» (Shingled Magnetic Recording, SMR) начала набирать популярность. В то время как все производители постепенно внедряют технологию SMR в свои линейки для настольных компьютеров, компания WD, к сожалению, также внедрила ее в свои накопители WD Red, «подходящие для NAS/RAID». К сожалению, сочетание SMR и RAID — не лучшая идея. Многие пользователи сообщают, что новые диски WD Red просто отказываются подключаться к существующему массиву.
В то время как обычным настольным дискам (в которых используется обычная магнитная запись, или CMR) может потребоваться до двух минут, чтобы прекратить чтение, с SMR-дисками дела обстоят еще хуже: есть сообщения о том, что они зависают более чем на 10 минут, пока диск перестраивает данные, чтобы освободить место.
SMR-диски должны сообщать о поддержке команды TRIM. К сожалению, некоторые (многие?) более дешевые SMR-накопители не поддерживают эту функцию, и из-за особенностей SMR-накопителей, которые не поддерживают TRIM, у них возникают проблемы, приводящие к тем самым зависаниям, о которых многие сообщают: накопитель почти постоянно останавливается, так как ему приходится перезаписывать большие объемы данных. Однако обратите внимание, что SMR-накопители бывают как минимум трёх типов: DM (с управлением от устройства), которые могут поддерживать или не поддерживать TRIM, и HM (с управлением от хоста), которые не должны вызывать проблем, так как их работу берет на себя компьютер.
69 14 1 Deterministic data after trim supported 69 5 1 Trimmed LBA range(s) returning zeroed data supported
К сожалению, некоторые накопители не поддерживают эту функцию. Возможно, причина в спецификации ATA. Если я ничего не путаю, то версия 4 спецификации ATA появилась позже, чем эти проблемные накопители. Но она необходима для отображения этих возможностей. Возможно, рассматриваемые накопители соответствуют спецификации версии 3, а не предварительной версии 4.
ATA Version is: ACS-3 T13/2161-D revision 5 SATA Version is: SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
К сожалению, теперь если вы хотите запустить массив, вы не сможете использовать дешевые диски 2020 года выпуска или более поздних версий. Компания WD заявила, что все диски линейки WD Red теперь являются SMR. Чтобы получить CMR, подходящий для RAID, вам нужно купить Red Plus или Red Pro. В любом случае, вы никогда не должны использовать Seagate Barracuda, так как теперь почти все они перешли на SMR (и были переименованы в BarraCuda). Компания Seagate заявила, что линейки IronWolf и IronWolf Pro останутся накопителями с технологией CMR, а линейка FireCuda на данный момент полностью состоит из накопителей с технологией CMR (похоже, они будут чем-то вроде Red Pros — накопителей с технологией CMR, аналогичных BarraCuda).
Скрипт из предыдущего раздела, изменяющий время ожидания, не работает с накопителями SMR.
Вывод: не используйте накопители SMR для RAID.
Ссылка на источник: https://archive.kernel.org/oldwiki/raid.wiki.kernel.org/index.php/Timeout_Mismatch.html