Як безпечно замінити ще не вийшов з ладу диск в масиві Linux RAID5?


26

У мене є програмний масив RAID5 (Linux md) на 4 дисках.

Я хотів би замінити один з дисків на новий, не ставлячи масив у деградований стан , а по можливості в Інтернеті. Як це було б можливо?

Це важливо, тому що я не хочу:

  • ризикуйте напружити інші диски, щоб один зрізався під час відновлення,
  • ризикніть опинитися в "стані паритету", тому я не маю запобіжної мережі деякий час.

Я вважаю, що робити це в Інтернеті занадто багато запитань, і я повинен просто необгрунтувати копію ( dd) даних старого диска на новий в автономному режимі, а потім замінити їх, але я думаю, що це теоретично можливо ...

Деякий контекст : всі ці диски крутилися майже постійно протягом більше 5,5 років. Вони все ще прекрасно працюють на даний момент, і всі вони проходять (довгий) SMART самотест. Однак у мене є підстави вважати, що один з цих 4 дисків не прослужить набагато довше (передбачуваний збій з прогнозуванням).

Відповіді:


36

Використання mdadm 3.3

З mdadm3.3 (випущений 2013 р., 3 вересня), якщо у вас є ядро 3.2+ , ви можете продовжити наступним чином:

# mdadm /dev/md0 --add /dev/sdc1
# mdadm /dev/md0 --replace /dev/sdd1 --with /dev/sdc1

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

Цей --withпараметр необов’язковий, якщо його не вказано, буде використана будь-яка наявна запасна частина.

Старіша версія mdadm

Примітка: Вам все одно потрібно ядро 3.2+ .

По- перше, додати новий диск в якості запасного (замінити md0і sdc1з RAID і дискового пристрою, відповідно):

# mdadm /dev/md0 --add /dev/sdc1

Потім ініціюйте операцію з заміни копії на зразок цієї ( sdd1що є несправним пристроєм):

# echo want_replacement > /sys/block/md0/md/dev-sdd1/state 

Результат

Система буде копіювати всі читабельні блоки з sdd1у sdc1. Якщо мова йде про нечитабельний блок, він реконструює його з паритету. Після завершення операції колишній запасний (тут sdc1:) активізується, а несправний диск буде позначено як збій (F), тому ви можете його видалити.

Примітка: кредит належить Frostschutz та Ансгару Естерману, які знайшли оригінальне рішення (див. Повторне запитання ).

Старіші ядра

Інші відповіді пропонують:

  • Джонні «s підхід : новонавернений масив RAID6," замінити "диск, а потім назад в RAID5,
  • Hauke Laging «s підхід : коротко видалити диск з масиву RAID5, зробити його частиною RAID1 (дзеркало) з новим диском і додати , що дзеркало приводу назад в масив RAID5 (теоретичного) ...

2
mdadm --addвсе ще потрібен, перш ніж --replaceпрацювати. ( mdadm3.3, Ubuntu 15.10). Якщо ви зробите це --addпісля --replace, копіювання розпочнеться, як тільки буде додана запасна. (Пристрій залишається позначеним як "бажає заміни").
Пітер Кордес

3

Це може бути можливо виконати вимоги

  1. онлайн
  2. не напружуйте жоден диск, крім того, який потрібно замінити

Але навіть якщо наступне може спрацювати, ви, мабуть, не знайдете жодної такої рекомендації "в книгах" ...

Ідея:

  1. Вийміть диск OLD з масиву (ненадовго): mdadm --manage /dev/raid5 --fail /dev/OLD
  2. Створіть новий md-пристрій (RAID-1) з дисків СТАРИЙ та НОВИЙ: mdadm --build /dev/md42 --level=mirror --raid-devices=2 /dev/OLD /dev/NEW
  3. Помістіть RAID-1 назад у масив (замість / dev / OLD): mdadm --manage /dev/raid5 --re-add /dev/md42

Що повинно :-) статися:

  1. RAID-5 отримує / dev / md42 синхронізовано. Це не повинно зайняти багато часу.
  2. Зазвичай RAID-5 знову працює (але повільніше).
  3. / dev / NEW синхронізується з / dev / OLD.

Слідкуйте за ходом ( cat /proc/mdstatабо mdadm --monitor) синхронізації . Якщо синхронізація закінчена, вийміть RAID-1 з RAID-5, зупиніть RAID-1, повторно додайте / dev / NEW до RAID-5. Якщо все добре, перезапишіть суперблоки mdraid на / dev / OLD, щоб уникнути проблем:mdadm --zero-superblock

Попередження: швидка синхронізація RAID-5 може працювати лише в тому випадку, якщо ви використовуєте растрову карту. Якщо у вас немає, то краще спершу зробіть тест з фіктивним RAID-5 (без растрової карти). Або додати його. Принаймні слід додати зовнішнє. В іншому випадку може знадобитися зупинити RAID-5 перед зміною пристроїв. Якщо ви завантажуєтесь з RAID-5, це все-таки стане дещо складним.


3

Якщо ви не заперечуєте про те, щоб запустити RAID-6 (2 диски парності, а не 1), і якщо ви працюєте з mdadmin 3.1.x або новішою, ви можете перетворити свій масив RAID-5 в RAID-6, щоб додати додатковий диск парності . Це, однак, поставить масив під напругу під час відновлення. І це має певні наслідки для продуктивності, оскільки для запису є більше дискет для паритету.

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

Я не знаю онлайн-способу зберегти масив як RAID-5 та замінити диск, не переводячи масив у деградований режим, оскільки, на мою думку, ви повинні позначати його як невдалий його заміна. Ваша ідея копії DD може бути способом зробити це.


@haukelaging FYI тепер можна з ядра 3.2, дивіться мою відповідь .
Тотор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.