Оголошення

Згорнути
Поки немає оголошень.

Восставший из зАДА или восстановление HDD Linux :)

Згорнути
X
 
  • Фільтр
  • Час
  • Показати
Очистити все
нові повідомлення

  • Восставший из зАДА или восстановление HDD Linux :)

    Недавно я поимел честь поиметь проблемы с поимевшим меня HDD, который работал в среде Linux и неожиданно сдох.
    На любое действие из консоли был только такой ответ:
    Файловая система доступна только для чтения
    При перезагрузке сервер уверенно лёг...
    Для админа увидеть такое сообщение - настоящий АД!
    Сразу нарисовалась триединая задача:
    • - достучаться до сервера;
    • - диагностировать проблему и её причины;
    • - восстановить файлы баз данных.

    При несоответствии хранимых в системе каталогов целостности ФС происходит самозащита от ещё большего её разрушения, тоесть только чтение.
    Причин может быть масса: неправильная парковка, физический износ HDD, ошибки контроллеров и т.д. Сначала стоит проверить SMART HDD.
    Перезагрузиться обычным способом у вас не получится, сервер хчать хотел на любые команды (sbin/reboot: Ошибка ввода/вывода), в том числе и на
    Код:
    reboot
    В данном случае перезагружаемся через команды ядра, прописывая их по очереди:
    Код:
    echo 1 > /proc/sys/kernel/sysrq
    Код:
    echo b > /proc/sysrq-trigger
    Но это вам ничем не поможет без предварительного ремонта файловой системы.

    Проверяем состояние HDD.
    Утилита smartmontools:
    Код:
    smartctl --all /dev/sda
    Показ полной картины SMART вашего диска. Обращаем внимание на такие параметры:
    Код:
    Vendor Specific SMART Attributes with Thresholds:
    ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
      1 Raw_Read_Error_Rate     0x000f   081   065   044    Pre-fail  Always       -       148971598
      3 Spin_Up_Time            0x0003   099   099   000    Pre-fail  Always       -       0
      4 Start_Stop_Count        0x0032   100   100   020    Old_age   Always       -       31
     [COLOR="#FF0000"] 5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       0[/COLOR]
      7 Seek_Error_Rate         0x000f   076   061   030    Pre-fail  Always       -       8675665654
      9 Power_On_Hours          0x0032   094   094   000    Old_age   Always       -       5866
     10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
     12 Power_Cycle_Count       0x0032   100   037   020    Old_age   Always       -       31
    184 End-to-End_Error        0x0032   100   100   099    Old_age   Always       -       0
    187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
    188 Command_Timeout         0x0032   100   090   000    Old_age   Always       -       26
    189 High_Fly_Writes         0x003a   100   100   000    Old_age   Always       -       0
    190 Airflow_Temperature_Cel 0x0022   066   039   045    Old_age   Always   In_the_past 34 (0 22 35 19)
    194 Temperature_Celsius     0x0022   034   061   000    Old_age   Always       -       34 (0 16 0 0)
    195 Hardware_ECC_Recovered  0x001a   065   037   000    Old_age   Always       -       148971598
    [COLOR="#FF0000"]197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
    198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0[/COLOR]
    199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0
    Красные значения должны быть в нулях:
    Reallocated_Sector_Ct - количество переназначенных секторов;
    Current_Pending_Sector - секторы кандидаты на замену (подозрительные);
    Offline_Uncorrectable - количество нескорректированных ошибок, то есть серьёзное повреждение поверхности диска. Появляются такие ошибки когда заканчивается место в резервной зоне диска для переназначения секторов.

    У меня значение Current_Pending_Sector было - 97!

    Порядок восстановления файловой системы:

    Есть два варианта: работать в повреждённой системе и подкинуть снятый диск в рабочую систему Linux. Я использовал второй вариант. Если доступен второй вариант, то вы легко сможете сделать резервные копии с существующими правами доступа и хозяевами файлов.

    Основное: проверяемый диск должен быть отмонтирован из системы! Иначе будут утеряны данные.

    Скорее всего у вас второй диск будет определяться как sdb:
    Код:
    fdisk -l
    Начинаем ремонт на (непримонтрованном разделе)
    Код:
    fsck -p /dev/sdb1
    Скорее всего вам сразу будет сказано:
    Код:
    /dev/sdb1: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
    Это значит, что утилита fsck не решается восстановить диск обычным способом, она перекладывает всё ответственность обратно на вас, типа: хочешь порешать проблему - вникни в неё глубже и выбери подходящие параметры.
    Мы и должны выбрать вариант с автоматическим ответом "yes" на все вопросы (восстановить, перезаписать пустые блоки и прочее):
    Код:
    fsck -vyfc /dev/sdb1
    Все тонкости программ почитаете в манах, я даю только рабочие выжимки.
    Программа отработает до конца и выдаст статистику.
    Проконтролируем результат восстановления ФС:
    Код:
    fsck -p /dev/sdb1
    Программа больше не ругается. Теперь можно подкинуть диск опять в упавшую систему и с него загрузиться, перед этим можно сделать бэкапы важных файлов на маточной системе.
    Когда всё важное скопировано можно и поиграться для выявления плохих блоков:
    Код:
    badblocks -v  /dev/sda
    Выберите букву диска в зависимости от вашей системы. Если в конце выдаст инфу о присутствии битых блоков, то читаем ниже. Диск нужно лечить и это возможно!

    Заходим на сайт проги MHDD и выбираем удобоваримую версию. Я работал с дискеты (USB Floppy).
    В меню выбираем
    Код:
    ERASE
    Это сотрёт все блоки посекторно (и всё инфу на диске!), что и удалит Current_Pending_Sector из таблицы SMART, если проблемы были soft-bad, тоесть не железные. Если нет, то опять есть выход - несите диск на помойку! Это уже не может быть сервером.

    Проверяем SMART, если контрольные значения стали по нулям, то осталась самая малость:
    • - поставить начисто систему:
    • - пробэкапиться обратно, тоесть залить назад копии;
    • - вернуть все настройки;
    • - отнести сервак в дата-центр (или вернуть под батарею как у ботов )


    Ось и усе любі друзі!
    Буду рад, если кому-то поможет.
    Musik ertönt aus Ost und West...

  • #2
    Недавно полетел очередной HDD на сервере Frag. Вместе с ним и сервера, ценные файлы и прочее.
    Танцы с бубном вокруг отказавшего HDD привели только к ухудшению ситуации и возрастанию количества потерянных файлов. Так иногда бывает, но мы вспоминаем о своевременных бекапах только после облома.

    Зато сейчас установлен новый диск, в котором сомневаться не приходится (пока).
    Такие отказы - частое явление на загруженных серверах, где круглосуточно записываются тысячи файлов и обрабатываются миллионы запросов. Так что удивления у нас это не вызвало, скорее всё было не неожиданно и ничего беды не предвещало. SMART даже при таком отказе сказал нам - PASSED. Но уже на руках при тесте он сразу загнулся.

    Вывод: чаще заглядывайте в логи и мониторинги системы.
    Musik ertönt aus Ost und West...

    Коментар


    • #3
      На неделе пробовал лечить битый винт.
      с помощью
      dd if=/dev/sda1 of=~/disk.img conv=sync,noerror bs=512 сделал образ с выкидыванием плохих секторов
      потом повторил геометрию полуживого винта на другом диске и всунул туда этот образ
      dd if=~/disk.img of=/dev/sdb1 bs=32M

      хотел ещё пометить битый сектор с помощью WHDD но она почему-то смогла сделать лишь тест на чтение
      Помечать пришлось Victoria'ей

      Коментар

      Обробка...
      X