Резервное копирование это конечно вещь полезная и необходимая, но о текущем состоянии вашего железа тоже необходимо заботиться и мониторить его постоянно, для того чтобы в случае потенциально возникающих проблем оперативно заменить железо.
Если вы возьмете себе за правило мониторить состояние оборудования, то вы сможете запланировать замену оборудования которое может вызвать в ближайшее время сбой на нерабочее время или период минимальной загруженности.
Начнем с анализа текущего состояния жесткого диска системой внутренней самодиагностики smart.
Проверка состояния диска по системе внутренний диагностики SMART
Для работы с внутренней системой самодиагностики жесткого диска используется пакет smartmontools и этот пакет вы можете установить командой:
# aptitude install smartmontools
Основная утилита используемая для получения информации называется smartctl и для получения максимально подробных сведений о внутренних счетчиках ошибок жесткого диска вам потребуется выполнить простую команду:
# smartctl -a /dev/sda
Отчет предоставленный командой 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, но это будет конечно гораздо сложнее и эта операция может оказаться достаточно сложной даже для опытных системных администраторов.
Во втором случае, используется утилита ext4.fsck с параметром -c который запускает проверку поверхности раздела с добавлением поврежденных секторов в таблицу сбойных с последующим запретом их использования.
В общем виде, команда полной проверки раздела накопителя выглядит следующим образом:
# fsck.ext4 -y -с /dev/sda2
Но обратите внимание, что здесь используется функционал файловых систем ext и если у вас имеется раздел подкачки, то для него такой метод не подойдет и вам необходимо использовать первый метод.
https://help-me-24.com/blog/rabota-so-sbojnymi-blokami-zhestkogo-diska-v-linux