Привет.

Еще раз (и последний, чтобы закрыть тему) рассказываю печальную историю о том как работают рейды. Для Вашего образования.

Давайте для примера остановимся на рейд1 - это самое простое. И так, если у нас сата или ide диски (у них общий command set) то вся информация дублируется на два носителя. В sata/ide дисках есть смарт для отображения состояния и диагностики и есть скрытая зона ремапов, которая используется диском для замены убитых участков. Важный момент - менеджмент этой зоны ремапов - дело только прошивки, контроллер об этом вообще понятия не имеет.

Дальше, никаких "списков плохих секторов" у обычных рейдов нет. Ни софтварных ни хардварных. Всё, что может сделать рейд если у него возникла ошибка - это попытаться повторить операцию еще раз. Если и это не удалось - он отдаст пользователю данные с живого диска и будет пытаться получить данные еще несколько раз. В случае проблем - просто пометит диск как сбойный, а массив как degraded. Верный признак такой беды - это параметр Current_Pending_Sector. Вы можете сделать что-то вроде dd if=/dev/zero of=/dev/ada0 bs=1M для того, чтобы забить его 0 и таким образом винт активизирует зону ремапов и будет пользоваться ей (это очень хорошо видно на графиках raw read). Когда зона ремапов закончится, то и запись перестанет работать. Вот и все дефект листы.

Идём дальше. Логика SCT таймаутов неплохо описана в стандарте. Немного цитат:

8.3.3 Error Recovery Control command

The Error Recovery Control command is used to set time limits for read and write error recovery. For nonqueued commands, these timers apply to command completion at the host interface. For queued commands where in-order data delivery is enabled, these timers begin counting when the device begins to execute the command, not when the command is sent to the device. These timers do not apply to streaming commands or to queued commands when out-of-order data delivery is enabled. Time limits for error recovery may be used in a data redundant RAID environment where it is more desirable *to have the device
report a data error rather than risk having it being dropped from the RAID*.

Выделение моё.

Вот о том как это работает

If the Read Command Timer is going to expire while the device is performing error recovery, the device shall stop processing the command and report an uncorrectable ECC error for the LBA that was causing error recovery to be invoked prior to timer expiration. Note that the LBA might be recoverable given more time for error recovery. At this point the host may reconstruct the data for the failing LBA from the other devices in a RAID and issue a write command to the target LBA, allowing the device to attempt vendor specific error
recovery on the suspect LBA

The Write Command Timer sets the upper limit for the amount of time a device processes a write command. The minimum value for this command is one. Setting this value to zero shall disable Write Command timeout, allowing the device to perform all available error recovery procedures without a time limit. The Write Command Timer has the effect of controlling how aggressively the device reallocates write data when encountering write errors. A large Write Command Timer value allows the device to use more available error recovery procedures for dealing with write errors. A small Write Command Timer value forces the device to attempt to reallocate sectors that may have otherwise been written without error. If the timer is about to expire, then the device should attempt to reallocate the data before the timer expires. If the device is unable to complete data reallocation before the timer expires then the devices fails the command when the timer expires. When write cache is enabled the operation of the timer is vendor specific.

Таким образом при записи устройство скорее сделает ремап, а не будет уходить в себя. Как следствие - если таймаут сделать слишком маленьким - зона ремапов закончится быстрее.

При этом никаких "волшебных пузырьков" в виде умного рейда запоминающего плохие сектора и чинящего диски у нас нет. Хотите убедиться - да просто вытащите 2 диска из рейд1 аппаратного и сравните их побайтово - отличается только зона для служебной информации контроллера, если она есть. Есть куча утилит для того, чтобы "собрать" аппаратные рейды программно (используются когда контроллер говорит "всё"). В скази и сас есть дефект листы винта и вообще всё несколько сложнее, но мы сейчас не о них.

Резюмируя:

1) В софтрейдах и хардрейдах оно будет рабоать одинаково, и ничего такого особенного хардрейд не делает. Так что не надо говорить ерунду, что это только для хардрейдов. 2) Выставление таймаута на запись и в самом деле уменьшает риск выпадения диска из рейда при проблемах записи. Но в целом - несильно, так как ремапы обычно быстро проходят и с отключенным таймаутом. 3) Таймаут на чтение на это не влияет, так как диск всё равно будет выброшен из массива при достижении некоторого количества попыток (могу показать вам логи с 3вари или с lsi, их у меня ОЧЕНЬ много). 4) На большинстве винтов scterc можно поменять. В том числе и десктопных. На многих server edition он по умолчанию выставлен в 8-10 секунд. И, кстати, прекрасно отключается, так как в случае не-рейд применения это фича скорее вредная (пусть лучше попыхтит 5 минут, но достанет сбойный сектор). 5) Никаких дефект листов для ата дисков рейд контроллер не ведёт и не использует. И логика его работы практически ничем не отличается от mdraid/gmirror. И формат данных на дисках для RAID1/RAID10 обычно крайне просто понять.

Ответить