Работа со сбойными блоками жесткого диска в Linux

    Общий рейтинг статьи: 0 (проголосовало 0 )
    Опубликовано:  [просмотров 473]


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

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

    Ворматирование жесткого диска с проверкой на BadBlocks

    Если вы возьмете себе за правило мониторить состояние оборудования, то вы сможете запланировать замену оборудования которое может вызвать в ближайшее время сбой на нерабочее время или период минимальной загруженности.

    Начнем с анализа текущего состояния жесткого диска системой внутренней самодиагностики smart.

    Проверка состояния диска по системе внутренний диагностики SMART

    Для работы с внутренней системой самодиагностики жесткого диска используется пакет smartmontools и этот пакет вы можете установить командой:

    # aptitude install smartmontools

    Основная утилита используемая для получения информации называется smartctl и для получения максимально подробных сведений о внутренних счетчиках ошибок жесткого диска вам потребуется выполнить простую команду:

    # smartctl -a /dev/sda

    Проверка диска HDD при помощи утилиты Smart

    Отчет предоставленный командой smartctl состоит из двух частей, первая часть содержит техническую информацию о накопителе:

    === START OF INFORMATION SECTION ===
    Model Family:     Western Digital Scorpio Blue Serial ATA
    Device Model:     WDC WD2500BEVT-35A23T0
    Serial Number:    WD-WXA1A6063720
    LU WWN Device Id: 5 0014ee 25a068ecc
    Firmware Version: 01.01A01
    User Capacity:    250,059,350,016 bytes [250 GB]
    Sector Size:      512 bytes logical/physical
    Rotation Rate:    5400 rpm
    Device is:        In smartctl database [for details use: -P show]
    ATA Version is:   ATA8-ACS (minor revision not indicated)
    SATA Version is:  SATA 2.6, 3.0 Gb/s
    Local Time is:    Wed Sep 13 17:16:57 2017 +07
    SMART support is: Available - device has SMART capability.
    SMART support is: Enabled

    А вторая, содержит интересующую нас информацию о состоянии жесткого диска и из всего объема данных нас интересуют только значения атрибутов SMART:

    SMART Attributes Data Structure revision number: 16
    Vendor Specific SMART Attributes with Thresholds:
    ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
      1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       238
      3 Spin_Up_Time            0x0027   154   148   021    Pre-fail  Always       -       1300
      4 Start_Stop_Count        0x0032   094   094   000    Old_age   Always       -       6580
      5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
      7 Seek_Error_Rate         0x002e   200   200   000    Old_age   Always       -       0
      9 Power_On_Hours          0x0032   062   062   000    Old_age   Always       -       28289
     10 Spin_Retry_Count        0x0032   100   100   000    Old_age   Always       -       0
     11 Calibration_Retry_Count 0x0032   100   100   000    Old_age   Always       -       0
     12 Power_Cycle_Count       0x0032   094   094   000    Old_age   Always       -       6573
    192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       206
    193 Load_Cycle_Count        0x0032   001   001   000    Old_age   Always       -       2067117
    194 Temperature_Celsius     0x0022   107   090   000    Old_age   Always       -       36
    196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0
    197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       5
    198 Offline_Uncorrectable   0x0030   100   253   000    Old_age   Offline      -       0
    199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       27
    200 Multi_Zone_Error_Rate   0x0008   100   253   000    Old_age   Offline      -       0

    Начинающие системные администраторы (а иногда даже и опытные) довольно часто неверно трактуют эти данные и соответственно делают некорректные выводы.

    Обратите внимание, что параметр RAW_VALUE это сырое значение и оно задается производителем накопителя и не стандартизированно, а вот VALUE это уже обработанный показатель:

    • RAW_VALUE - 6-ти байтовое значение задаваемое производителем
    • VALUE - одно байтовое значение которое сравниваем с "рекомендуемыми"

    Параметр VALUE необходимо сравнивать со значением THRESH, а Threshold - это внутренний показатель заданный производителем для определения критического значения Value этого же атрибута. И вот здесь надо обратить внимание, что если Value больше Threshold то все в порядке, а вот если меньше либо равен, то "Хьюстон у нас проблемы". 

    Ориентируйтесь на эти данные и вы сможете оперативно реагировать на потенциальные проблемы которые делятся производителем на две категории:

    • Pre-fail - важный параметр который говорит, что у ваш накопитель может выйти из строя очень скоро.
    • Old_age - этот параметр говорит, что выработан ресурс заданный производителем и накопитель необходимо заменить. Не такой важный как pre-fail, но все равно будьте аккуратнее.

    Даже если смарт сообщает, что все отлично, я бы вам все равно порекомендовал раз в пару месяцев выполнять проверку представленной ниже утилитой.

    Проверка на наличие физических сбойных секторов

    Для поиска физических сбойных секторов в Линукс используется команда badblocks. Эта утилита может быть запущена в двух режимах:

    • Режим только чтение - в этом режиме производится последовательное посекторное чтение с диска и замеряется время операции. При превышении определенного порога вы получите сообщение о потенциально сбойном секторе. Этот режим используется по умолчанию
    • Режим с записью - аналогичен предыдущему но дополнительно производится запись на диск. Этот режим деструктивный и уничтожает информацию на накопителе. Для активации режима используйте дополнительную опцию -w

    В простейшем случае, вам необходимо выполнить команду badblocks с параметром -v и указанием диска который необходимо проверить:

    # badblocks -v /dev/sda

    В процессе работы программы, последовательно будут выводиться номера сбойных секторов:

    root@micro-01:~# badblocks -v /dev/sda
    Checking blocks 0 to 244198583
    Checking for bad blocks (read-only test): 2105396
    2105397
    2105398
    2105399
    22092260
    22092261
    22092262
    22092263
    161771832
    161771833
    161771834
    161771835
    213104268
    213104269
    213104270
    213104271
    213510684
    213510685
    213510686
    213510687
    done    

    Процесс проверки довольно длительный и вы можете добавить дополнительно опцию -s которая добавляет прогрессбар и подсчет ориентировочно оставшегося времени, но несколько искажает выводимую информацию:

    # badblocks -sv /dev/sda
    Checking blocks 0 to 244198583
    Checking for bad blocks (read-only test): 2105396 done, 1:13 elapsed. (0/0/0 errors)
    2105397 done, 1:29 elapsed. (1/0/0 errors)
    2105398 done, 1:44 elapsed. (2/0/0 errors)
    2105399 done, 2:00 elapsed. (3/0/0 errors)
    22092260done, 6:40 elapsed. (4/0/0 errors)
    ...
    232787730one, 1:08:41 elapsed. (22/0/0 errors)
    232787731one, 1:08:57 elapsed. (23/0/0 errors)
    done                                                 
    Pass completed, 24 bad blocks found. (24/0/0 errors)

    И естественно, как я уже говорил вы можете добавить опцию -w для тестирования в режиме записи, но учтите, что это деструктивная операция.

    Так же, я хотел бы обратить ваше внимание, на небольшую особенность про которую обычно забывают, а именно то, что сбои в чтении с накопителя могут быть вызваны не только физически поврежденными секторами, но и плохим контактом на дата-разъеме кабеля или недостатком питания.

    Обязательно проверьте дважды поверхность жесткого диска в режиме только для чтения и если номера сбойных секторов совпадают, то это означает, что имеет место быть проблема с поверхностью диска, а в противном случае прежде всего проверьте питание и замените шлейфы данных возможно это устранит ошибки.

    Постоянный мониторинг состояния накопителя

    К методам которые я описал выше, обычно обращаются когда уже настала точка невозврата, которой на самом деле можно было избежать при своевременном мониторинге.

    После установки пакета smartmontools автоматически запускается демон smartd который проводит периодические проверки состояния атрибутов smart и записывает ошибки в системный журнал.

    # cat /var/log/syslog | grep SMART
    Sep 14 07:16:57 localhost smartd[477]: Device: /dev/sda [SAT], SMART Usage Attribute: 194
    Temperature_Celsius changed from 114 to 115
    Sep 14 07:46:57 localhost smartd[477]: Device: /dev/sda [SAT], SMART Usage Attribute: 194
    Temperature_Celsius changed from 115 to 114

    Вы можете использовать систему централизованного мониторинга лог-файлов или изменить конфигурационный файл /etc/smartd.conf добавив в него отправку сообщений по электронной почте.

    Для отправки почты используется системный MTA-агент и вам естественно понадобится его сконфигурировать для корректной отправки почтовых сообщений администратору.

    Работа со сбойными секторами в Linux (пометка сбойного сектора неиспользуемым)

    И хотя я рекомендую при обнаружении неперемещаемых секторов я рекомендую оперативно заменить жесткий диск на новый, но это не всегда возможно так как в ряде компаний действует жесткий принцип, что железо используется "до полного уничтожения" или закончился ремфонд или еще ряд препонов обычно бюрократического характера.

    Продлить жизнь диску на котором появились сбойные сектора можно, для этого можно или переразбить диск таким образом чтобы разделы не попадали на сбойные области или пометить сектор как сбойный средствами файловой системы.

    В первом варианте, проще всего отключить накопитель и перераспределить разделы с сохранением данных при помощи утилиты gparted (номера сбойных секторов полученные при помощи теста командой badblocks я надеюсь вы сохранили).

    Так же, вы можете воспользоваться и стандартной консольной утилитой fdisk, но это будет конечно гораздо сложнее и эта операция может оказаться достаточно сложной даже для опытных системных администраторов.

    Изменение структуры разделов при помощи fdisk

    Во втором случае, используется утилита ext4.fsck с параметром -c который запускает проверку поверхности раздела с добавлением поврежденных секторов в таблицу сбойных с последующим запретом их использования.

    В общем виде, команда полной проверки раздела накопителя выглядит следующим образом:

    # fsck.ext4 -y -с /dev/sda2

    Но обратите внимание, что здесь используется функционал файловых систем ext и если у вас имеется раздел подкачки, то для него такой метод не подойдет и вам необходимо использовать первый метод.


    Связанные записи в блоге

    Обсуждение статьи

    Ваш комментарий: