Чому пристрій raid 10 потрібно ініціалізувати?


9

Під час створення рейдового пристрою linux в якості пристрою raid10 я плутаю, чому його потрібно ініціалізувати. Це ж питання стосується насправді raid1 або raid0.

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

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

Це просто так, щоб люди почували себе краще?


1
Хороше питання. Можливо пропустити синхронізацію під час створення RAID, і я натрапив на рекомендації щодо цього, якщо один або кілька базових пристроїв є SSD. Я не знаю, чи існують сценарії, в яких синхронізація потрібна для правильної роботи.
kasperd

Відповіді:


2

Початкова синхронізація потрібна, оскільки будь-які відмінності між дзеркалами виявляться як помилки під час періодичної перевірки.

І вам слід робити періодичні перевірки.


1
Я можу зрозуміти, чому періодичні перевірки на читабельність даних можуть бути корисними. Але яка користь робить періодична перевірка на наявність ідентичних реплік? Такі перевірки можуть бути корисними, якщо їх виконує файлова система, яка перевіряє суми даних. Але на рівні RAID без знання файлової системи ви не можете знати, яка з двох різних реплік хороша, ви не можете знати, як розбіжність відбулася в першу чергу, і ви не можете знати, на який файл (якщо такий є) впливає. Таким чином, видається, що сповіщення про невідповідності цього шару здебільшого марні, оскільки адміністратор нічого не може зробити із сповіщеннями.
kasperd

Оскільки вам потрібно прочитати дані в будь-якому випадку, вартість їх порівняння мінімальна, але це може показати вам, що один з дисків розробив інакше не виявлену проблему (наприклад, погана ОЗУ у власному кеші диска). Потім адміністратор розбиває масив, вручну розглядає відмінності та вибирає, який диск буде замінено.
Саймон Ріхтер

Тоді слід розширити це у своїй відповіді.
kasperd

Я знаю, що минуло багато років, але це єдина поважна причина, яку я бачу. Я не думаю, що це має значення інакше, якщо дані не синхронізовані, оскільки ці дані за визначенням ще не записані, тому файлова система, застосована до рейдового накопичувача, ніколи не буде читати з цих блоків. Переконайтесь, що періодичні перевірки проходять з самого початку, однак це робить необхідним. Дякую!
Майкл Графф

7

Рейд 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".

Caveat:

Це все невизначене поведінка. Чому я перевірив Linux, використовуючи mdadmінші програми програмного забезпечення RAID, може поводитися по-різному. Інші версії ядра та / або mdadmінструментів Linux, ніж я використовую, також можуть поводитись інакше.


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.Загрожує чим? Я усвідомлюю, що прочитане може призвести до чого-небудь, але чому це може спричинити певну небезпеку для користувача, якщо (a) інформація, яку читають, ніде не використовується, і (b) запис має відбутися?
Вегард

1
@kasperd Ви праві, він копіює перший пристрій на другий. Тест на urandom-ініціалізованому пристрої з ldd mdadm показує, що перші 80k залишаються різними, як і останні 48k. Останнє, ймовірно, пов'язане з округленням розміру RAID до розміру блоку. Я не тестував різні розміри пристроїв, але 80 + 48 - це саме різниця в розмірах між RAID-пристроєм та базовим блоковим пристроєм.
Torinthiel

1
Варто враховувати, що зазвичай під час ініціалізації, рейдова система ЗАВЖДИ читатиме диск A та копіює його на диск B. Чому? Оскільки ви можете використовувати диск під час його ініціалізації, можливо, ви записали дані в блок 100 000. Як тільки рейд-ініт потрапить до цього блоку, і А, і Б вже ідентичні, тому нічого не відбувається. Якби це замість нульових блоків, це стерло б хороші дані. Таким чином, ще раз я бачу дві причини, щоб забезпечити однакові блоки: "це завжди робиться" і "щоб ви могли запустити перевірку пізніше" - я також сумніваюся в корисності цієї перевірки. Читання добре, порівняння? не впевнений.
Майкл Граф

5

Пам'ятайте, що RAID 1 - це дзеркало, а RAID 10 - смуга дзеркал.

Питання полягає в тому, на якому диску в кожному дзеркалі діють дані? У щойно створеному масиві це неможливо знати, оскільки диски можуть мати різні дані.

Пам'ятайте також, що RAID працює на дуже низькому рівні; він нічого не знає про файлові системи або будь-які дані, що можуть зберігатися на диску. Можливо, навіть не використовується файлова система.

Таким чином, ініціалізація в цих масивах складається з даних з одного диска в кожному дзеркалі, яке копіюється як на інший диск.

Це також означає, що масив безпечно використовувати з моменту створення і може бути ініціалізований у фоновому режимі; Більшість контролерів RAID (і Linux mdraid) мають для цього опцію або роблять це автоматично.


Коментарі не для розширеного обговорення; ця розмова була переміщена до чату .
Майкл Хемптон

1

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

Їх потрібно перетворити в ідеальні копії один одного.

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

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

Процес реконструкції прозорий, тому ви можете фактично використовувати пристрій, навіть якщо дзеркало зараз реконструюється.


2
Але чому вони повинні бути ідеальними копіями один одного? Що може перешкодити тому, що два непослідовні у секторах, які ніколи не використовувала файлова система?
kasperd

@kasperd RAID реалізований на нижчому рівні, ніж будь-яка файлова система. Тож стає питання, що таке "файлова система", на яку ви посилаєтесь.
Таємир

@Taemyr Я не маю на увазі будь-яку конкретну файлову систему. Виберіть те, що вам зручніше, і поясніть, що буде порушено, використовуючи його на RAID-1, де репліки не синхронізувалися до ініціалізації файлової системи.
kasperd

@kasperd Там немає ні файлової системи , щоб розірвати на рівні RAID працює.
Таємир

1
У моєму випадку, як оригінальний плакат, мені байдуже, яка файлова система. Я не знаю жодної файлової системи, яка б читала сектори, про які ніколи не писалося, тому будь-який невизначений стан цих неписаних секторів не має значення.
Майкл Граф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.