Вопрос или проблема
У меня есть массив из 4-х дисков в RAID 5. Один из дисков (sdb) показывает много ошибок, и мой массив демонстрирует высокие задержки при доступе.
В настоящее время у меня есть один новый диск, а другой уже заказан.
В рамках замены я также хочу увеличить уровень RAID с 5 до 6. Я определил, как это сделать:
Сначала увеличив до уровня 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, потому что это накладывает недеструктивную операцию на другие диски.
И делайте/имейте резервные копии…
Ответ или решение
Ваша ситуация требует тщательного подхода, поскольку работа с RAID-массивами всегда связана с рисками потери данных, особенно при наличии проблем с одним из дисков. Рассмотрим предложенные вами два метода замены неисправного диска и перехода с RAID 5 на RAID 6.
Вариант 1: Сначала переход на RAID 6
-
Добавьте новый диск в массив:
mdadm --manage /dev/md0 --add /dev/sdf1
-
Увеличьте RAID до уровня 6:
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 полагается на целостность всех оставшихся дисков. Если в процессе роста RAID до уровня 6 возникнет ошибка чтения на другом диске, это может привести к потере данных. Этот метод может также вызвать увеличенную нагрузку на существующие диски во время выполнения операций.
Вариант 2: Сначала замена неисправного диска
-
Добавьте новый диск в массив:
mdadm --manage /dev/md0 --add /dev/sdf1
-
Замените поврежденный диск:
mdadm --manage /dev/md0 --replace /dev/sdb1 --with /dev/sdf1
-
После замены диска:
mdadm --manage /dev/md0 --add /dev/sdg1
-
Увеличьте RAID до уровня 6:
mdadm --grow /dev/md0 --raid-devices 5 --level 6 --backup-file /<path>/mdadm-backup
Этот метод считается более безопасным, так как сначала вы работаете с более стабильным массивом. Заменив неисправный диск, вы обеспечиваете, что RAID будет работать в нормальном режиме, и можете минимизировать риск отказа из-за возможных ошибок чтения на других дисках. После успешной замены и восстановления массива вы сможете выполнить изменение уровня RAID на 6, что обеспечит дополнительную защиту от возможного сбоя одного из дисков.
Рекомендации
- Обязательно создайте резервные копии всех данных перед началом операций с RAID.
- Убедитесь, что все ваши диски имеют обновленный статус S.M.A.R.T. (как у вас в запросе), и следите за такими параметрами, как количество "первичных ожидающих секторов" и "перераспределенных секторов". Проблемы с этими показателями могут сильно повлиять на успешность операций с RAID.
- Если у вас есть возможность, старайтесь выполнять операции в период минимальной загрузки системы, чтобы снизить риск появления ошибок.
- Если ваша система критична, рассмотрите возможность использования RAID 10 или другого уровня RAID, предлагающего лучшую защиту и производительность.
Надеюсь, эти рекомендации помогут вам безопасно и эффективно провести замену дисков в вашем RAID массиве.