При создании программного raid-устройства linux в качестве raid10-устройства я не понимаю, почему его нужно инициализировать. На самом деле тот же вопрос относится к raid1 или raid0.
В конечном итоге большинство людей поместят поверх него какую-либо файловую систему, и эта файловая система не должна принимать какое-либо состояние данных на диске. Каждая запись будет влиять на оба диска в настройке raid10 или raid1, куда записываются N зеркал. Не должно быть никаких причин для первоначальной инициализации raid10, так как это произойдет со временем.
Я могу понять, почему для настройки raid5 / 6, где есть требование четности, но даже тогда кажется, что это можно сделать лениво.
Просто чтобы люди чувствовали себя лучше?
Raid 1, будучи зеркалом, зависит от того, что все диски в зеркале являются точными копиями друг друга. Возьмите свой случайный жесткий диск и другой случайный жесткий диск, и у вас, возможно, есть другие данные, что нарушает это предположение. Вот почему необходима инициализация. Он просто копирует содержимое первого диска на другие. Обратите внимание, что в некоторых случаях вы можете обойтись без инициализации дисков - обычно новые заводские устройства уже имеют нули повсюду, поэтому вы можете просто игнорировать это. В mdadm
вариант --assume-clean
делает это, но предупреждает вас:
--assume-clean
Сообщите mdadm, что массив уже существует и известен как чистый. Это может быть полезно при попытке восстановления после серьезного сбоя, поскольку вы можете быть уверены, что никакие данные не будут затронуты, если вы не произведете запись в массив. Его также можно использовать при создании RAID1 или RAID10, если вы хотите избежать первоначальной повторной синхронизации, однако эта практика, хотя обычно безопасная, не рекомендуется. Используйте это, только если вы действительно знаете, что делаете.
Если вы этого не сделаете, есть несоответствие между дисками и данными чтения, неизвестно, что будет читать диск. Вы должны быть в безопасности с файловой системой (но примечание ниже), потому что, скорее всего, вы напишете до того, как что-нибудь прочитаете с этого устройства, и тогда все будет ясно.
Обратите внимание, что по крайней мере Linux mdadm
инициализирует массив в фоновом режиме. Вы можете с радостью создать FS поверх него в первую секунду. Производительность будет падать, пока не завершится инициализация, но это все.
Но:
а) При выполнении mkfs
некоторые утилиты проверяют, есть ли что-то на этом диске. Хотя это касается только нескольких хорошо известных областей диска, оно считывается, прежде чем вы что-либо записываете, что подвергает вас опасности.
б) Если вы выполняете периодическую повторную синхронизацию массива, устройство RAID ничего не знает о вашей FS. Он просто считывает каждый блок с каждого устройства и сравнивает их. И если вы не используете FS с копированием при записи (например, ZFS или BTRFS) и никогда не заполняете свою FS, вполне вероятно, что блок останется неинициализированным с точки зрения FS в течение многих лет.
По той же причине вы выполняете повторную синхронизацию с устройствами RAID5 или любым другим уровнем (кроме RAID0). Он читает все данные и сравнивает / проверяет контрольные суммы RAID (в RAID 5 или 6). Если бит каким-либо образом был перевернут (из-за спонтанного переворота памяти HD, потому что сотовые телефоны вас и ваших 5 соседей просто случайно вмешались в эту конкретную область пластинки, что угодно), он обнаружит несоответствие, но не сможет помочь тебе. Если, OTOH, один из жестких дисков просто сообщит «Я не могу прочитать этот блок», что более вероятно при отказе диска, вы просто обнаружили сбой на ранней стадии и сократили время работы в ухудшенном режиме (считая от сбой диска, а не с того момента, когда вы его заметили). Raid не поможет, если выйдет из строя один диск, а через месяц выйдет из строя другой, если вы не заметите первый сбой в этом месяце.
Теперь для RAID10 все вышеперечисленное верно. В конце концов, RAID10 - это просто умный способ сказать: «Я помещаю два своих устройства RAID1 в пару RAID0».
Все это неопределенное поведение. Почему я проверял Linux, используя mdadm
, другие реализации программного обеспечения RAID могут вести себя иначе. Другие версии ядра Linux и / или mdadm
инструменты, чем я использую, также могут вести себя иначе.
Помните, что RAID 1 - это зеркало, а RAID 10 - это полоса зеркал.
Вопрос в том, на каком диске в каждом зеркале действительны данные? В только что созданном массиве это неизвестно, поскольку на дисках могут быть разные данные.
Помните также, что RAID работает на очень низком уровне; он ничего не знает о файловых системах или любых данных, которые могут храниться на диске. Может даже не быть быть используемая файловая система.
Таким образом, инициализация в этих массивах заключается в том, что данные с одного диска в каждом зеркале копируются как есть на другой диск.
Это также означает, что массив безопасно использовать с момента создания и может быть инициализирован в фоновом режиме; большинство RAID-контроллеров (и Linux mdraid) имеют опцию для этого или делают это автоматически.
Первоначальная синхронизация необходима, потому что любые различия между зеркалами будут отображаться как ошибки во время периодической проверки.
И вам следует проводить периодические проверки.
Проще говоря, потому что не ожидается, что два новых диска с самого начала будут зеркально копировать друг друга.
Их нужно превратить в точные копии друг друга.
Кроме того, инициализация включает настройку суперблока метаданных с информацией о конфигурации массива.
Файл / proc / mdstat должен сообщить вам, что устройство было запущено, зеркало реконструируется, а также ETA завершения реконструкции. Реконструкция выполняется с использованием полосы пропускания ввода-вывода в режиме ожидания. Итак, ваша система по-прежнему должна реагировать, хотя светодиоды на вашем диске также будут показывать большую активность.
Процесс реконструкции прозрачен, поэтому вы можете использовать устройство, даже если зеркало в настоящее время находится на реконструкции.
Если вы используете Linux LVM для создания файловой системы RAID 1 (или 10), которую вы сразу же загрузите данными, вот как вы можете избежать большей части ненужного ввода-вывода при инициализации.
Сначала создайте обычную линейную файловую систему (без RAID) и загрузите в нее свои данные. затем преобразовать его в файловую систему RAID с помощью lvconvert. Зеркальное устройство будет инициализировано данными вашей уже загруженной файловой системы, поэтому единственный "ненужный" ввод-вывод будет при копировании нераспределенных блоков в вашей уже загруженной файловой системе. Это лучше, чем сначала копировать каждый блок с одного неинициализированного устройства на другое, а затем записывать данные на оба устройства. Посредством сериализации двух операций (загрузки файловой системы и последующего создания зеркала) вы также позволите дискам выполнять последовательный ввод-вывод, что намного быстрее, чем случайный поиск, который происходит при записи в зеркальную пару RAID, которая все еще инициализируется.