Вопрос или проблема
У меня есть четыре диска в массиве RAID 5. Один из дисков (sdb) показывает много ошибок, и массив имеет высокую задержку при доступе.
У меня в настоящее время есть один новый диск, а другой уже заказан.
В рамках замены я также хочу увеличить уровень RAID с RAID 5 до RAID 6. Я считаю, что можно достичь этого следующим образом:
Сначала увеличив до RAID 6:
mdadm --manage /dev/md0 --add /dev/sdf1
mdadm --grow /dev/md0 --raid-devices 5 --level 6 --backup-file /<path>/mdadm-backup
mdadm --manage /dev/md0 --replace /dev/sdb1 # Установите неисправный, но оставьте его для замены, пока запасной диск не будет доступен
# После того, как второй диск прибудет
mdadm --manage /dev/md0 --add /dev/sdg1
Сначала заменив неисправный диск, а затем увеличив до RAID 6:
mdadm --manage /dev/md0 --add /dev/sdf1
mdadm --manage /dev/md0 --replace /dev/sdb1 --with /dev/sdf1
# после прибытия второго диска
mdadm --manage /dev/md0 --add /dev/sdg1
mdadm --grow /dev/md0 --raid-devices 5 --level 6 --backup-file /path/mdadm-backup
Есть ли разница между двумя решениями? Одно безопаснее другого, накладывая меньшую нагрузку на диски в массиве?
[Редактировать] добавление результатов SMART:
Sdb (почти неисправный)
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000f 082 072 006 Pre-fail Always - 22562487
3 Spin_Up_Time 0x0003 093 093 000 Pre-fail Always - 0
4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 124
5 Reallocated_Sector_Ct 0x0033 077 077 010 Pre-fail Always - 29352
7 Seek_Error_Rate 0x000f 087 060 030 Pre-fail Always - 4963671931
9 Power_On_Hours 0x0032 026 026 000 Old_age Always - 65627
10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0
12 Power_Cycle_Count 0x0032 100 100 020 Old_age Always - 124
184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0
187 Reported_Uncorrect 0x0032 001 001 000 Old_age Always - 4793
188 Command_Timeout 0x0032 100 072 000 Old_age Always - 137445703785
189 High_Fly_Writes 0x003a 001 001 000 Old_age Always - 107
190 Airflow_Temperature_Cel 0x0022 073 056 045 Old_age Always - 27 (Min/Max 25/28)
191 G-Sense_Error_Rate 0x0032 100 100 000 Old_age Always - 0
192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 82
193 Load_Cycle_Count 0x0032 100 100 000 Old_age Always - 296
194 Temperature_Celsius 0x0022 027 044 000 Old_age Always - 27 (0 14 0 0 0)
197 Current_Pending_Sector 0x0012 001 001 000 Old_age Always - 35384
198 Offline_Uncorrectable 0x0010 001 001 000 Old_age Offline - 35384
199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
sbc
1 Raw_Read_Error_Rate 0x000f 118 099 006 Pre-fail Always - 194860592
3 Spin_Up_Time 0x0003 093 093 000 Pre-fail Always - 0
4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 124
5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 24
7 Seek_Error_Rate 0x000f 087 060 030 Pre-fail Always - 654004767
9 Power_On_Hours 0x0032 026 026 000 Old_age Always - 65631
10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0
12 Power_Cycle_Count 0x0032 100 100 020 Old_age Always - 124
184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0
187 Reported_Uncorrect 0x0032 094 094 000 Old_age Always - 6
188 Command_Timeout 0x0032 100 099 000 Old_age Always - 2
189 High_Fly_Writes 0x003a 062 062 000 Old_age Always - 38
190 Airflow_Temperature_Cel 0x0022 073 059 045 Old_age Always - 27 (Min/Max 24/27)
191 G-Sense_Error_Rate 0x0032 100 100 000 Old_age Always - 0
192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 82
193 Load_Cycle_Count 0x0032 100 100 000 Old_age Always - 295
194 Temperature_Celsius 0x0022 027 041 000 Old_age Always - 27 (0 14 0 0 0)
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
sdd
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000f 113 094 006 Pre-fail Always - 51447952
3 Spin_Up_Time 0x0003 093 093 000 Pre-fail Always - 0
4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 124
5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0
7 Seek_Error_Rate 0x000f 087 060 030 Pre-fail Always - 665278320
9 Power_On_Hours 0x0032 026 026 000 Old_age Always - 65630
10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0
12 Power_Cycle_Count 0x0032 100 100 020 Old_age Always - 124
184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0
187 Reported_Uncorrect 0x0032 001 001 000 Old_age Always - 173
188 Command_Timeout 0x0032 100 099 000 Old_age Always - 1
189 High_Fly_Writes 0x003a 001 001 000 Old_age Always - 188
190 Airflow_Temperature_Cel 0x0022 073 055 045 Old_age Always - 27 (Min/Max 25/27)
191 G-Sense_Error_Rate 0x0032 100 100 000 Old_age Always - 0
192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 82
193 Load_Cycle_Count 0x0032 100 100 000 Old_age Always - 296
194 Temperature_Celsius 0x0022 027 045 000 Old_age Always - 27 (0 14 0 0 0)
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 16
198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 16
199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
Да, есть разница, но я не уверен, что лучше.
Когда вы заменяете диск в RAID5, вам необходимо, чтобы все остальные диски не имели ошибок чтения, чтобы восстановить новый диск. С современными дисками это непростая задача. Вероятность ошибки чтения на огромных современных дисках почти такая, что вы гарантированно столкнетесь с одной. Вот почему RAID5 больше не рекомендуется. Вы можете найти много информации об этом в интернете.
При миграции на RAID6 у вас также возникнет нагрузка на запись на старых дисках. Это может быть даже выгодно: у диска могут быть «ожидающие сектора» (см. SMART). Это означает сектора, которые он считает поврежденными. Он переназначит их, как только они получат новую запись. Если сектор все еще недостаточно хорош, чтобы получить запись, счетчик «переназначенных секторов» возрастет. Таким образом, сектор будет прозрачным образом находиться где-то еще на диске.
Мой первый шаг был бы смотреть на статус SMART ваших дисков и смотреть на указанные два параметра.
Но я колеблюсь рекомендовать один способ перед другим, если у ваших дисков действительно имеются ожидающие сектора. Я думаю, если их нет, я бы сначала заменил диск в RAID5, потому что это накладывает неразрушающую операцию на другие диски.
И имейте/создайте резервные копии…
Я вернулся с хорошими новостями. Это было решение, которое я использовал.
mdadm --manage /dev/md0 --replace /dev/sdb1 --with /dev/sdf1
На это потребовалось 28 долгих дней, чтобы завершить, потому что неисправный диск не мог считывать быстрее 1,5 МБ/с, но в конце концов мой массив вернулся в хорошее состояние. Теперь я собираюсь увеличить его до RAID 6. Спасибо @Halfgaar за вашу поддержку.
Ответ или решение
Заменить выходящий из строя жесткий диск в RAID 5 можно разными способами, однако правильный подход зависит от конкретных условий, в которых находится ваш массив. В данном случае подробное рассмотрение двух предложенных методов и выводы относительно их безопасности и эффективности могут существенно помочь вам в принятии решения.
Стратегии замены жесткого диска и увеличение RAID
1. Замена диска с последующим увеличением уровня RAID до RAID 6:
mdadm --manage /dev/md0 --add /dev/sdf1
mdadm --manage /dev/md0 --replace /dev/sdb1
# после поступления второго диска
mdadm --manage /dev/md0 --add /dev/sdg1
mdadm --grow /dev/md0 --raid-devices 5 --level 6 --backup-file /path/mdadm-backup
2. Сначала увеличение уровня RAID до RAID 6, затем замена диска:
mdadm --manage /dev/md0 --add /dev/sdf1
mdadm --grow /dev/md0 --raid-devices 5 --level 6 --backup-file /path/mdadm-backup
mdadm --manage /dev/md0 --replace /dev/sdb1
# после поступления второго диска
mdadm --manage /dev/md0 --add /dev/sdg1
Сравнительный анализ методов
-
Риск чтения и записи:
При первом подходе, когда диск заменяется до увеличения уровня, вероятность столкновения с ошибками чтения на остальных дисках ниже. Это связано с тем, что текущая конфигурация массива (RAID 5) подразумевает необходимость прочитать данные с других дисков для восстановления информации на новом диске. Если один из оставшихся дисков имеет нездоровые сектора (как показывают результаты SMART), это увеличивает риск потери данных. -
Использование платформы RAID 6:
Второй подход предусматривает увеличение массива до RAID 6 до замены диска. Это увеличивает уровень защиты, поскольку RAID 6 допускает одновременный выход из строя двух дисков. Однако в процессе роста массива данные на старых дисках будут перезаписываться, что чревато риском переработки сектора, который может быть уже поврежден и не может быть правильно перезаписан. -
Оптимальное использование времени:
По методике, предполагающей сразу замену диска в RAID 5 с последующим повышением до RAID 6, удастся быстрее вернуться к стабильному состоянию массива. При этом, если замена выполнена успешно, вы не подвергнете массив дополнительной нагрузке на этапе роста.
SMART-данные и их значение
Результаты SMART указывают на значительное количество «потенциально поврежденных» секторов на диске sdb, что делает небезопасной попытку выполнить операцию чтения в условиях RAID 5. Это подчеркивает важность анализа состояния дисков перед принятием решения о замене. В данной ситуации хорошей идеей будет сначала заменить проблемный диск, после чего начать увеличивать RAID до RAID 6.
Рекомендации
-
Резервное копирование:
Убедитесь, что у вас есть актуальные резервные копии всех важных данных перед выполнением каких-либо манипуляций с RAID массивом. -
Мониторинг состояния дисков:
Постоянно следите за SMART-данными всех дисков, чтобы избежать неожиданного выхода из строя. -
Планирование времени выполнения операций:
Необходимо учитывать, что операции замены и роста массива могут занять продолжительное время и повлиять на производительность системы.
Следуя данным рекомендациям, вы сможете безопасно заменить выходящий из строя жесткий диск и успешно модернизировать RAID массив, минимизировав риски потери данных и повреждения оставшихся дисков.