|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Aleksey Barabanov 2:5020/400 06 Mar 2004 13:50:06 To : Valentin Nechayev Subject : Re: Пpо пpогpаммный RAID -------------------------------------------------------------------------------- u> <20040304214735.GB7486@iv.nn.kiev.ua> <666mh1-on2.ln1@abb.wessen.ru> u> <20040306080901.GI6190@iv.nn.kiev.ua> From: Aleksey Barabanov <abb@wessen.ru> Valentin Nechayev wrote: > >>>> Aleksey Barabanov wrote: > > AB> Если произошел экстренный останов системы, то всегда актуальным будет > только AB> один диск. > > Какой? > Вот, пожалуйста, расскажите подробнее этот механизм. А я, исходя из того, > что в случае программного RAID'а поддержание такого механизма требует > дорогих решений, сравнимых по ресурсозатратам с самим зеркалом, а именно - > ведением на диске "журнала" вида "вот сейчас мы записали в диск 1, > но не в диск 2", утверждаю, что такого защитного механизма *нет*. > Копаться в коде ядра я пока не хочу - это потребует полдня продирательств, > и я искренне считаю, что задать вопрос в эху здесь будет лучше (заодно > и ознакомит народ с тем, что такая проблема вообще бывает). > Аппаратному raid'у проще - там в состоянии контроллера можно записать > флажок в NVRAM. Какой вы хитрый, Валентин ;) Уж я и так и эдак - сам мол в силах исходники прочесть... ;) Смотрим linux/raid/raid1.h и devices/md/raid1.c. Hаходим в первом mirror_info и raid1_private_data, а во втором raid1_error. Читаем комментарии. Система работает так. Каждая операция с массивом протоколируется. Диск который использовался последим метится в conf->working_disk. Поэтому если массив неожиданно разбить только один диск будет иметь такую метку. И после старта именно он будет главным. Если же разбитую пару подключать по отдельности возможны два варианта. 1. Подключаем только один диск, тогда в структурах этого диска будет помечено после старта, что второй мертв. И если в дальнейшем мы его подключим, то он уже в паре не будет мастером. 2. Подключаем каждый из дисков поотдельности так что каждый из них метит второй бэдом. Тогда при слитном старте приоритет дисков будет решен порядком просмотра. Может я чего и не так понял - за 20 то мин. Hо в целом это соответствует тому что у меня наблюдалось в натуре. > Просмотрите, пожалуйста, логику ещё раз. По пунктам: > 1. Произошёл сбой, в результате которого блок на двух зеркальных дисках > стал иметь разное содержимое, и этот сбой не зафиксирован в состоянии > массива (потому, что нет этого состояния, или было слишком дорого писать). Там работает счема балансинга. Т.е. диски поочередно становятся мастерами. > Простейший пример как это может случиться - программное зеркало > и потеря питания после записи на один из дисков. > 2. После восстановления питания драйвер/контроллер RAID'а считает зеркало > целым и начинает обычную работу с ним. Hет. После сбоя _всегда_ один диск мастер, другой бэд. Hу это практически робастная схема. > 3. Для ускорения чтения с массива, чтение может выполняться с любого > из двух зеркальных дисков. > 4. В разный момент читаются разные данные (неважно, fsck или нет), > что приводит к тому, что код, предполагающий постоянство данных в блоке, > не получает выполнение предусловий корректной работы и идёт вразнос. > > Логические связи между утверждениями здесь бесспорны (да, я настолько > самонадеян). Против утверждений как самих по себе возражения есть? См. выше. Hо рассуждения верны в том плане, что md не отвечает за содержимое блока. И даже в случае его адекватной работы для fs там может быть просто бинарный шум. Т.е. журналируемая fs вкупе с raid1 очень даже полезна. Точно так же как бэкап для них вместе взятых. -- Bye. Aleksey Barabanov <alekseybb at mail.ru> Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru --- ifmail v.2.15dev5.3 * Origin: home (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/7824ac7a9a19.html, оценка из 5, голосов 10
|