Консистенси чек (consistency check, parity check, verify...)

Данный раздел пополняется силами модераторов и постоянных посетителей.

Модераторы: Trinity admin`s, Free-lance moderator`s

Ответить
Аватара пользователя
gs
Сотрудник Тринити
Сотрудник Тринити
Сообщения: 16650
Зарегистрирован: 23 авг 2002, 17:34
Откуда: Москва
Контактная информация:

Консистенси чек (consistency check, parity check, verify...)

Сообщение gs » 17 июл 2007, 20:30

Консистенси чек = проверка и восстановление целостности информации на рэйд массиве.

Суть в том, что ЛЮБОЙ массив не абсолютно надежен (даже если все исправно).

Например проблемы кабельной системы могу привести к некорректной записи данных на блины (хотя как правило они конечно компенсируются в процессе передачи).

Гораздо хуже обстоит дело со сбоями питания. Вырубание электрики или отказ БП (а зачастую и ребут) во время интенсивной записи могут привести к несоответствию блоков данных и парити.

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

Ну и, естественно, в процессе работы ни один диск не застрахован от бэд блоков. Контроллер о них ничего не знает до тех пор, пока не полезет в тот блок, что может быть очень редко.

Чем это грозит. А все очень просто. Если вдруг откажет диск, то при наличии неконсистентных данных, в процессе ребилда на новый диск информация будет записана с ошибками, и никто не будет об этом знать! Если же есть реальные, а не логические сбои (бэд блоки), ребилд просто не пройдет (эта ситуация повторялась уже столько раз, что у меня мата не хватает). Т.е. винт поменяли, а массив как был полудохлым, так и есть. И это еще хорошо, если ребилд не пойдет - хуже, если пройдет, но со скрытыми ошибками (Вы будете пребывать в ложной уверенности - пока петух не клюнет).
Самое главное - НИКТО НЕ СМОЖЕТ такой массив восстановить!!! Только бэкап-рестор того, что еще можно прочитать.

Поэтому периодическая проверка ЛЮБОГО массива уровней 1, 5, 6, 10, 50 - вещь просто ОБЯЗАТЕЛЬНАЯ. Если конечно Вас интересует результат (С).

Что делает консистенси чек. Он - а) читает поверхность дисков, входящих в массив, б) СВЕРЯЕТ блоки парити и блоки данных (или просто блоки данных в случае рэйд1 и 10).

Если все блоки читаются, но имеется несоответствие, он перезаписывает парити на рэйд5, 6. Как он сделает на рэйд1 или 10 - честно говоря не знаю, наверно волевым решением примет один из блоков "правильным" (некая надежда на аллаха имеет место быть).
Если есть бэд блоки, он вычислит содержавшуюся в нем информацию на основании парити и запишет его заново (диск при этом отремапится).

Вот собственно. Это вовсе не страшилка, а весьма злобная правда жизни.

PS. Да, еще. Консистенси чек обязательно надо делать ПЕРЕД операциями рестрайпинга (изменения уровня массива) и экспанда (добавления дисков в массив).

Аватара пользователя
Tert
Advanced member
Сообщения: 4233
Зарегистрирован: 19 янв 2003, 08:09
Откуда: Москва
Контактная информация:

Сообщение Tert » 23 июл 2007, 23:00

gs
Если все блоки читаются, но имеется несоответствие, он перезаписывает парити на рэйд5, 6. Как он сделает на рэйд1 или 10 - честно говоря не знаю, наверно волевым решением примет один из блоков "правильным" (некая надежда на аллаха имеет место быть).
Немного неточно.
Кроме данных для восстановления (в массивах RAID 5, 6) на диски пишутся некоторые контрольные суммы (куда они пишутся и по каким алгоритмам считаются, обычно зависит от производителя контроллера), которые позволяют сделать вывод о достоверности информации, записанной в этот блок (что то вроде контроля четности). И уже на основе этой информации можно принимать решение о том, что делать: пересчитать парити или перезаписать блок с данными.
Кстати, основное время при инициализации массива и уходит на вычисление этих контрольных сумм.

Ответить

Вернуться в «Массивы - FAQ»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей