Почему устройство raid 10 необходимо инициализировать?

9

При создании программного устройства raid для Linux в качестве устройства raid10 я не понимаю, почему его нужно инициализировать. Тот же вопрос относится к raid1 или raid0, правда.

В конечном счете, большинство людей ставят какую-то файловую систему поверх нее, и эта файловая система не должна принимать какое-либо состояние данных на диске. Каждая запись влияет на оба диска в настройках raid10 или raid1, где записано N зеркал. Не должно быть никаких причин для первоначальной инициализации raid10, поскольку это произойдет со временем.

Я могу понять, почему для установки raid5 / 6, где есть требование четности, но даже тогда кажется, что это можно сделать лениво.

Просто так люди чувствуют себя лучше?

Майкл Графф
источник
1
Хороший вопрос. Можно пропустить синхронизацию при создании RAID, и я натолкнулся на рекомендации для этого в случае, если одно или несколько базовых устройств являются SSD. Я не знаю, существуют ли сценарии, в которых синхронизация необходима для правильной работы.
Касперд

Ответы:

2

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

И вы должны делать периодические проверки.

Саймон Рихтер
источник
1
Я понимаю, почему периодические проверки на удобочитаемость данных могут быть полезны. Но что хорошего в периодической проверке идентичности реплик? Такие проверки могут быть полезны, если они выполняются файловой системой, которая проверяет контрольные суммы данных. Но на уровне RAID без знания файловой системы вы не можете знать, какая из двух разных реплик хороша, вы не можете знать, как возникло несоответствие, и вы не можете знать, на какой файл (если есть) это повлияло. Таким образом, кажется, что оповещения о несоответствиях на этом уровне в основном бесполезны, поскольку администратор все равно ничего не может сделать с оповещениями.
Касперд
Поскольку вам все равно нужно читать данные, затраты на их сравнение минимальны, но это может показать вам, что на одном из дисков возникла иная необнаруженная проблема (например, плохая память в собственном кеше диска). Затем администратор разбивает массив, вручную просматривает различия и выбирает, какой диск заменить.
Саймон Рихтер
Вы должны расширить это в своем ответе тогда.
Касперд
Я знаю, что прошло много лет, но это единственная веская причина, которую я вижу. Я не думаю, что в противном случае имеет значение, если данные не синхронизированы, так как эти данные по определению еще не записаны, поэтому файловая система, примененная к диску raid, никогда не будет считывать эти блоки. Убедившись, что периодические проверки проходят с самого начала, это делает это необходимым. Спасибо!
Майкл Графф
7

Raid 1, будучи зеркалом, зависит от того, являются ли все диски в зеркале точными копиями друг друга. Возьмите ваш случайный жесткий диск и другой случайный жесткий диск, и у вас там могут быть другие данные, что нарушает это предположение. Вот почему инициализация необходима. Он просто копирует содержимое первого диска другим. Обратите внимание, что в некоторых случаях вы можете обойтись без инициализации дисков - обычно на новых устройствах уже есть нули, поэтому вы можете просто проигнорировать это. mdadmВариант --assume-cleanделает это, но предупреждает вас:

   --assume-clean

Скажите mdadm, что массив уже существовал и известен как чистый. Это может быть полезно при попытке восстановления после серьезного сбоя, поскольку вы можете быть уверены, что никакие данные не будут затронуты, если вы фактически не запишете в массив. Его также можно использовать при создании RAID1 или RAID10, если вы хотите избежать первоначальной повторной синхронизации, однако эта практика - хотя обычно безопасная - не рекомендуется. Используйте это, только если вы действительно знаете, что делаете.

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

Обратите внимание, что по крайней мере Linux mdadmбудет инициализировать массив в фоновом режиме. Вы можете счастливо создать FS поверх него в первую секунду. Производительность пострадает до завершения инициализации, но это все.

Но:

а) При выполнении mkfsнекоторых утилит проверьте, есть ли уже что-то на этом диске. Хотя это касается только нескольких известных областей диска, оно читает перед тем, как что-то написать, тем самым подвергая вас опасности.

б) Если вы делаете периодическую синхронизацию вашего массива, устройство RAID ничего не знает о вашей FS. Он просто читает каждый блок с каждого устройства и сравнивает их. И если вы не используете FS при копировании при записи (например, ZFS или BTRFS) и никогда не заполняете свою FS, вполне вероятно, что блок останется неинициализированным с точки зрения FS в течение многих лет.

Почему повторная синхронизация с устройствами RAID1?

По той же причине вы повторно синхронизируете с устройствами RAID5 или любым другим уровнем (кроме RAID0). Он считывает все данные и сравнивает / проверяет контрольные суммы RAID (в RAID 5 или 6). Если бит был каким-либо образом перевернут (потому что память HD стала самопроизвольно перевернутой, потому что мобильные телефоны вас и ваших 5 соседей просто случайно вмешались в эту конкретную область тарелки, что угодно), это обнаружит несогласованность, но не сможет помочь тебе. Если, OTOH, один из жестких дисков просто сообщит «Я не могу прочитать этот блок», что более вероятно при неисправном диске, вы только что обнаружили сбой раньше и сократили время работы в ухудшенном режиме (считая от сбой диска, а не с того момента, когда вы заметили это). Рейд не поможет вам, если один диск выйдет из строя, а через месяц другой выйдет из строя, если вы не

RAID10

Теперь для RAID10 все вышеперечисленное выполняется. В конце концов, RAID10 - это просто умный способ сказать «я помещаю два моих устройства RAID1 в пару RAID0».

Предостережение:

Это все неопределенное поведение. Почему я проверил на Linux, используя mdadmдругие программные реализации RAID, может вести себя по-другому. Другие версии ядра Linux и / или mdadmинструментов, чем я использую, также могут вести себя по-другому.

Torinthiel
источник
1
Пожалуйста, предоставьте цитату для If you don't do it, there is a discrepancy between the drives and it's read, the RAID device will report failure of a drive. Я считаю это утверждение неверным. По крайней мере, приведите пример сообщения об ошибке, чтобы можно было обратиться к источнику, чтобы проверить, при каких обстоятельствах оно возникает.
kasperd
1
Так-то лучше. Вы проверили утверждение о записи нулей? Я думаю, что он не записывает нули, а скорее копирует один из дисков на другой (ие).
kasperd
1
While this only touches a few well-known regions of drive, it reads before you write anything, thus putting you in danger.В чем опасность? Я понимаю, что чтение может привести к чему угодно, но почему это приведет к некоторой опасности для пользователя, если (а) считываемая информация нигде не используется и (б) запись должна произойти?
Вегард
1
@ kasperd вы правы, он копирует первое устройство на второе. Тест на urandomинициализированном устройстве с linux mdadm показывает, что первые 80 КБ остаются разными, как и последние 48 КБ. Последнее, вероятно, связано с округлением размера RAID до размера блока. Я не тестировал устройства разных размеров, но размер 80 + 48 - это как раз разница в размерах между устройством RAID и базовым блочным устройством.
Торинтиэль
1
Необходимо учитывать, что обычно во время инициализации система raid ВСЕГДА читает диск A и копирует его на диск B. Почему? Поскольку вы можете использовать диск во время его инициализации, вы можете записать данные в блоке 100 000. Как только raid init попадает в этот блок, и A, и B уже идентичны, поэтому ничего не происходит. Если бы он вместо этого обнулял блоки, он уничтожил бы хорошие данные. Таким образом, еще раз, я вижу две причины, чтобы убедиться, что блоки идентичны: «это всегда было сделано» и «чтобы вы могли запустить проверку позже» - я также подвергаю сомнению полезность этой проверки. Чтение это хорошо, сравнение? Точно сказать не могу.
Майкл Графф
5

Помните, что RAID 1 является зеркалом, а RAID 10 - полосой зеркал.

Вопрос в том, на каком диске в каждом зеркале действительны данные? В недавно созданном массиве это не может быть известно, поскольку диски могут иметь разные данные.

Помните также, что RAID работает на очень низком уровне; он ничего не знает о файловых системах или каких-либо данных, которые могут быть сохранены на диске. Может даже не быть используемой файловой системы.

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

Это также означает, что массив безопасен для использования с момента создания и может быть инициализирован в фоновом режиме; большинство RAID-контроллеров (и Linux mdraid) имеют опцию для этого или делают это автоматически.

Майкл Хэмптон
источник
Комментарии не для расширенного обсуждения; этот разговор был перенесен в чат .
Майкл Хэмптон
1

Проще говоря, потому что два новых диска с самого начала не должны быть зеркальными копиями друг друга.

Их нужно превратить в идеальные копии друг друга.

Кроме того, инициализация включает настройку суперблока метаданных с информацией о конфигурации массива.

Файл / proc / mdstat должен сообщать вам, что устройство было запущено, что зеркало восстанавливается, и ETA завершения реконструкции. Реконструкция выполняется с использованием пропускной способности простоя ввода / вывода. Таким образом, ваша система по-прежнему должна реагировать, хотя светодиодные индикаторы диска также будут проявлять большую активность.

Процесс восстановления прозрачен, поэтому вы можете использовать устройство, даже если зеркало в данный момент находится на реконструкции.

HBruijn
источник
2
Но почему они должны быть идеальными копиями друг друга? Что может сломаться из-за несовместимости двух секторов в секторах, которые никогда не использовались файловой системой?
Касперд
RAID-массив @kasperd реализован на более низком уровне, чем любая файловая система. Таким образом, возникает вопрос, что такое «файловая система», на которую вы ссылаетесь.
Taemyr
@Taemyr Я не имею в виду какую-либо конкретную файловую систему. Выберите то, что вы предпочитаете, и объясните, что может сломаться, используя его на RAID-1, где реплики не были синхронизированы, до инициализации файловой системы.
Касперд
@kasperd Там нет нет файловой системы , чтобы разорвать на уровне RAID работает.
Taemyr
1
В моем случае, как оригинальный плакат, мне все равно, какая файловая система. Я не знаю ни одной файловой системы, которая будет считывать сектора, в которые никогда не записывались данные, поэтому любое неопределенное состояние этих неписанных секторов не имеет значения.
Майкл Графф