Это статья по методам диагностики жёстких дисков в *nix. Дополнения всячески приветствуются.

Для проведения тестов можно выбрать специализированный LiveCD дистрибутив типа PartedMagic или GParted, либо в уже работающем дистрибутиве (например на домашнем\рабочем компьютере) доустановить нужное программное обеспечение. В статье нет информации о том, как восстанавливать данные - этому будет посвящена отдельная работа.

Подключение устройства к компьютеру

Подключение SATA или PATA устройств к компьютеру производится при выключенном питании. В серверах возможна манипуляция дисками и без выключения питания, но для этого функцию должна поддерживать аппаратура: сами диски (SAS\SCSI) и "корзина" (эксандер).

Для персональных компьютеров, повреждение шлейфа\sata-кабеля может вывести диск из строя, поэтому при первых же подозрениях на неисправность - меняйте на новый. Например, китайские sata-кабели способны выдержать 5…10 подключений на каждый разъём, а потом контакты начинают давать сбои. В PATA-шлейфах, обрыв одной из линий данных может давать неправильную ёмкость или название диска в БИОСе, либо вообще он может не определиться.

Плохой контакт в разъёме питания устройств может может привести к периодическим отключениям диска и появлению бэд-блоков. Также возможен вариант появления ошибок при чтении\записи. При подключении дисков внимательно посмотрите\проверьте:

|
Классический разъём питания IDE-устройств
  • для классического подключения (PATA-диски): чтобы контакты подключаемого разъёма не ходили свободно по контактам разъёма жёсткого диска. Цилиндрики разъёма (помечены красной стрелкой) от блока питания должны входить с трением. Если это не так - нужно цилиндрики подогнуть (уменьшить их диаметр); не переусердствуйте!

Также проверьте, что сами цилиндрики вошли до конца - попробуйте не сильно утопить провода в разъём.

  • для SATA-разъёмов: если разъём от блоки питания свободно входит и выходит из разъёма жёсткого диска, без трения и защёлки, то лучше таким разъёмом не пользоваться - со временем он может подвести.

При включении ПК возможно что не запустится шпиндель: если питание в норме (т.е. блок питания может выдать мощность для запуска диска) и контакты тоже - возможен вариант неконтакта платы контроллера с гермоблоком или неисправность драйвера. В первом случае проблема решается прочисткой контактов, а во втором, - при этом плата контроллера на самом жёстком диске будет сильно нагреваться, поможет только сервисный центр. Также не исключены случаи заклинивания подшипников шпинделя или падение головок на поверхность диска. В этом случае, если на диске есть важная информация, то нужно обратиться в специализированную компанию по восстановлению данных.

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

  • неконтакт между платой контроллера и гермоблоком (см. выше);
  • вариант нехватки питания (просадки напряжений из-за слабенького блока питания) - проверяется разгрузкой блока питания от периферии, заменой блока питания и проверкой контактов питания жёсткого диска;
  • повреждение системных областей на диске: некоторые диски записывают свою служебную информацию в области на этом же диске, и если эта область оказывается повреждённой, то вариантов извлечь информацию в домашних условиях нет, нужно обращаться в специализированный сервисный центр.

Определение устройства в системе

Бывает так, что подключив жёсткий диск к компьютеру, он запускается, но "не видится" операционной системой. Рассмотрим варианты диагностики.

Сперва, любой жёсткий диск должен быть идентифицирован в БИОСе компьютера или платой RAID-контроллера. В первом случае - заходим в настройки БИОС и проверяем наличие всех IDE устройств в списке. Во втором - список устройств появляется после заставки БИОС или сам контроллер предлагает войти в своё меню по какой-то комбинации клавиш.

Далее, устройство должно быть идентифицировано ядром *nix. Посмотреть это можно через команды: dmesg, lshw, lsblk.

 # dmesg | grep ata

- выведет список строк лога ядра, где есть упоминание "ata".

 # lshw -class disk

- выведет краткую информацию о дисках и CD\DVD-накопителях, подключенных к ПК.

 # lsblk

- выведет схему иерархий активных блочных устройств.

 # hdparm -I /dev/sda 

- выведет подробную информацию о жёстком диске /dev/sda

lsblk, hdparm и lshw в Debian 7 не входят в минимальный комплект утилит и устанавливаются отдельно.

Определение разделов и файловых систем на дисках

Следующий уровень - разделы дисков. Выводим список:

 # fdisk -l

- выведет список разделов и файловых систем на всех дисках. Посмотреть разделы диска также можно с помощью программы с графическим интерфейсом GParted.

Проверка диска на наличие сбойных или повреждённых блоков

Быстро оценить состояние диска поможет утилита smartctl, которая входит в пакет smartmontools.

 # smartctl --all /dev/sda
smartctl 5.40 2010-07-12 r3124 [i686-pc-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF INFORMATION SECTION ===
Model Family:     Western Digital Caviar Blue Serial ATA family
Device Model:     WDC WD6400AAKS-22A7B2
Serial Number:    WD-WCASY2332416
Firmware Version: 01.03B01
User Capacity:    640 135 028 736 bytes
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   8
ATA Standard is:  Exact ATA specification draft version not indicated
Local Time is:    Sat Dec  7 17:34:37 2013 YAKT
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x82)	Offline data collection activity
					was completed without error.
					Auto Offline Data Collection: Enabled.
Self-test execution status:      (   0)	The previous self-test routine completed
					without error or no self-test has ever 
					been run.
Total time to complete Offline 
data collection: 		 (10800) seconds.
Offline data collection
capabilities: 			 (0x7b) SMART execute Offline immediate.
					Auto Offline data collection on/off support.
					Suspend Offline collection upon new
					command.
					Offline surface scan supported.
					Self-test supported.
					Conveyance Self-test supported.
					Selective Self-test supported.
SMART capabilities:            (0x0003)	Saves SMART data before entering
					power-saving mode.
					Supports SMART auto save timer.
Error logging capability:        (0x01)	Error logging supported.
					General Purpose Logging supported.
Short self-test routine 
recommended polling time: 	 (   2) minutes.
Extended self-test routine
recommended polling time: 	 ( 127) minutes.
Conveyance self-test routine
recommended polling time: 	 (   5) minutes.
SCT capabilities: 	       (0x3037)	SCT Status supported.
					SCT Feature Control supported.
					SCT Data Table supported.

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       -       50
  3 Spin_Up_Time            0x0027   160   159   021    Pre-fail  Always       -       4958
  4 Start_Stop_Count        0x0032   099   099   000    Old_age   Always       -       1745
  5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x002e   100   253   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   075   075   000    Old_age   Always       -       18830
 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   099   099   000    Old_age   Always       -       1743
192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       98
193 Load_Cycle_Count        0x0032   200   200   000    Old_age   Always       -       1745
194 Temperature_Celsius     0x0022   111   093   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       -       1
198 Offline_Uncorrectable   0x0030   200   200   000    Old_age   Offline      -       1
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0008   200   200   000    Old_age   Offline      -       0

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
No self-tests have been logged.  [To run self-tests, use: smartctl -t]


SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

В отчёте подробно описано состояние жёсткого диска /dev/sda которое знает внутренняя система S.M.A.R.T. контроллера. Разберём отчёт в таблице:

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0

- RAW-значение этого параметра говорит о количестве переназначенных секторов, т.е. сектор, определённый как сбойный заменяется на сектор из резервной области.

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       1

- RAW-значение этого параметра говорит, что один сектор возможно сбойный (нестабильный или под подозрением). Если при обращении к нему возникнут ошибки, то контроллер жёсткого диска пометит его как "точно" сбойный, произведёт замену и увеличит счётчики "Reallocated_Sector_Ct" и "Reallocated_Event_Count".

S.M.A.R.T. знает далеко не о всех проблемах диска, поэтому, для сканирования плохих блоков можно применить утилиту badblocks:

 # badblocks -nvs -o /tmp/badblocks.log /dev/sda

- здесь:

  • n - не использовать деструктивный режим, - т.е. проверять без потери данных на диске;
  • v - выводить больше информации о своей работе;
  • s - показывать прогресс работы;
  • o имя_файла - выводить список повреждённых блоков в файл для дальнейшей обработки;

По умолчанию, за раз, программа обрабатывает 64 блока по 1024 байта - эти параметры могут быть заданы отдельно. Длительность проверки зависит от объёма жёсткого диска. Если присутствуют ошибки, то процесс растягивается надолго. Если нужен просто факт наличия хотя бы одного неисправного блока, можно применить ключ -e и указать количество блоков, после которого тест будет прекращён.

Бывает так, что во время восстановления данных или вышеописанной диагностики плохих блоков, жёсткий диск перестаёт определяться операционной системой и начинает бесконечно работать головками. Это может произойти из-за физического повреждения поверхности дисков или ошибки контроллера. Если диагностика и чистка контактов между гермоблоком и платой контроллера ничего не дала, то можно 100% считать, что диск имеет дефект и дальнейшая его эксплуатация более невозможна. Восстановление данных в таких случаях проводится как раз в моменты, когда диск "находится в сознании" и может занять достаточное количество времени.

Факультативно, если есть желание дальше протестировать диск на наличие плохих блоков, то утилита badblocks имеет опции для указания начального и конечного блока для тестирования.

Реальный пример:
Диск в 120Гб с количеством 117220823 блоков по 1024 байта тестировался всю ночь, выдал 54359294 ошибки и размер лога перевалил за 480Мбайт, что говорит о сбое процесса тестирования (диск "ушёл в несознанку"). Текстовым редактором открываем лог и находим то место, где начинается последовательное бесконечное перечисление блоков:

....
62860714
62860715
62861196
62861197
62861198
62861199 
62862264 <-- место сбоя
62862265
62862266
62862267
62862268
62862269
62862270
62862271
...
117220820
117220821
117220822
117220823

Теперь, чтобы диск пришёл в себя, выключаем компьютер, снова включаем (перезагрузка обычно не помогает), и пробуем продолжить тестирование с того места, откуда произошло прерывание:

 # badblocks -nvs -o /tmp/badblocks2.log /dev/sda 117220823 62862260

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

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

Раздел ждёт своего автора ;-)

Смотрите также

Печать/экспорт