Лучший способ замены еще не вышедшего из строя диска

Вопрос или проблема

У меня есть массив из 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

  1. Добавьте новый диск в массив:

    mdadm --manage /dev/md0 --add /dev/sdf1
  2. Увеличьте RAID до уровня 6:

    mdadm --grow /dev/md0 --raid-devices 5 --level 6 --backup-file /<path>/mdadm-backup
  3. Замените неисправный диск:

    mdadm --manage /dev/md0 --replace /dev/sdb1 # Установите диск как неисправный, но оставьте его для замены, пока не придет запасной диск.
  4. После поступления второго диска:

    mdadm --manage /dev/md0 --add /dev/sdg1

Этот подход может быть рискованным, поскольку RAID 5 полагается на целостность всех оставшихся дисков. Если в процессе роста RAID до уровня 6 возникнет ошибка чтения на другом диске, это может привести к потере данных. Этот метод может также вызвать увеличенную нагрузку на существующие диски во время выполнения операций.

Вариант 2: Сначала замена неисправного диска

  1. Добавьте новый диск в массив:

    mdadm --manage /dev/md0 --add /dev/sdf1
  2. Замените поврежденный диск:

    mdadm --manage /dev/md0 --replace /dev/sdb1 --with /dev/sdf1
  3. После замены диска:

    mdadm --manage /dev/md0 --add /dev/sdg1
  4. Увеличьте 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 массиве.

Оцените материал
Добавить комментарий

Капча загружается...