Я нахожусь в процессе новой установки Linux, и прежде чем я решил это сделать, я подумал, что сейчас самое время проверить работоспособность жесткого диска, поскольку я могу при необходимости безопасно перезаписать любые данные на жестком диске.
Сначала я попытался проверить с помощью smartmontools ... Мой жесткий диск Seagate сообщает об одном текущем ожидающем секторе и одном недоступном для исправления отключенном (предположительно, одном и том же). Количество перераспределенных секторов равно нулю.
5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 0
...
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 1
198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 1
Однако самотестирование SMART (короткое, длинное, автономное, транспортировка) не обнаруживает ошибок.
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Extended offline Completed without error 00% 6631 -
# 2 Conveyance offline Completed without error 00% 6630 -
# 3 Extended offline Completed without error 00% 6622 -
# 4 Short offline Completed without error 00% 6600 -
# 5 Extended offline Completed without error 00% 6632 -
Я также попытался запустить badblocks -wsv (полный проходной тест чтения-записи 4) на диске, и плохие блоки не были найдены. Затем я последовал руководству (насколько это было возможно, поскольку я удалил свою файловую систему после запуска badblocks), найденному здесь: http://smartmontools.sourceforge.net/badblockhowto.html
Там написано, что если я перезаписываю сектор всеми нулями, диск должен переместить (перераспределить) ожидающий сектор. Шаблон последней записи Badblocks - все нули, так что следовало бы это сделать. однако ничего не изменилось. У меня все еще есть счетчик ожидающих секторов 1.
Затем я попытался выяснить, какой сектор является проблемным, и в выводе SMART есть журнал ошибок:
Error 2 occurred at disk power-on lifetime: 5344 hours (222 days + 16 hours)
When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were:
ER ST SC SN CL CH DH
-- -- -- -- -- -- --
84 51 7c 1b 1a 02 ae Error: ABRT at LBA = 0x0e021a1b = 235018779
Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
-- -- -- -- -- -- -- -- ---------------- --------------------
20 20 7f 18 1a 02 ae 00 00:09:05.228 READ SECTOR(S)
20 20 01 17 1a 02 ae 00 00:09:05.228 READ SECTOR(S)
20 20 01 01 00 00 a0 00 00:08:59.830 READ SECTOR(S)
91 20 3f 01 00 00 af 00 00:08:59.826 INITIALIZE DEVICE PARAMETERS [OBS-6]
10 20 01 01 00 00 a8 00 00:08:59.678 RECALIBRATE [OBS-4]
Error 1 occurred at disk power-on lifetime: 5009 hours (208 days + 17 hours)
When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were:
ER ST SC SN CL CH DH
-- -- -- -- -- -- --
40 51 00 b7 8c 02 e0 Error: UNC at LBA = 0x00028cb7 = 167095
Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
-- -- -- -- -- -- -- -- ---------------- --------------------
25 20 1e 9e 8c 02 e0 00 00:02:20.691 READ DMA EXT
25 20 1e 80 8c 02 e0 00 00:02:20.691 READ DMA EXT
25 20 1e 62 8c 02 e0 00 00:02:20.690 READ DMA EXT
25 20 1e 44 8c 02 e0 00 00:02:20.690 READ DMA EXT
25 20 1e 26 8c 02 e0 00 00:02:20.690 READ DMA EXT
Таким образом, по-видимому, диск имел две ошибки.
84 51 7c 1b 1a 02 ae Error: ABRT at LBA = 0x0e021a1b = 235018779
и
40 51 00 b7 8c 02 e0 Error: UNC at LBA = 0x00028cb7 = 167095
Итак, я предположил, что это номера секторов: 167095 и 235018779. И я попытался написать нули с помощью dd:
dd if=/dev/zero of=/dev/sda bs=512 count=1 seek=167095
Теперь это хорошо. Однако, когда я попробовал с другим сектором:
dd if=/dev/zero of=/dev/sda bs=512 count=1 seek=235018779
Я получаю дд: '/ dev / sda': не могу искать: неверный аргумент . Затем я заметил, что мой жесткий диск имеет только 234441658 секторов. Так что это вне диапазона. Но тогда почему SMART сообщил об ошибке по этому адресу ?!
Может ли кто-нибудь помочь мне понять это, а также посоветовать мне, как сделать это правильно, если я делаю это неправильно? Я подозреваю, что, возможно, я ошибаюсь при использовании блока 512 с dd. Это размер сектора, о котором сообщает SMART. возможно, эти адреса LBA являются байтами, а не блоками. Я попытался установить bs = 1 и записать только один байт в эти адреса на жестком диске. Это сработало (процесс записи dd)… Однако число ожидающих секторов после этого не изменилось. Я также вызвал sync и smartctl -t offline / dev / sda, чтобы попытаться «заставить» диск перераспределить сектор. Ничего...
Вот мой полный вывод smartctl --all / dev / sda :
smartctl 5.43 2012-06-30 r3573 [i686-linux-2.6.32-358.el6.i686] (local build)
Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net
=== START OF INFORMATION SECTION ===
Model Family: Seagate Barracuda 7200.9
Device Model: ST3120811AS
Serial Number: 6PT1N4VZ
Firmware Version: 3.AAE
User Capacity: 120,034,123,776 bytes [120 GB]
Sector Size: 512 bytes logical/physical
Device is: In smartctl database [for details use: -P show]
ATA Version is: 7
ATA Standard is: Exact ATA specification draft version not indicated
Local Time is: Mon Nov 18 12:03:00 2013 UTC
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: ( 430) seconds.
Offline data collection
capabilities: (0x5b) SMART execute Offline immediate.
Auto Offline data collection on/off support.
Suspend Offline collection upon new
command.
Offline surface scan supported.
Self-test supported.
No 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: ( 1) minutes.
Extended self-test routine
recommended polling time: ( 51) minutes.
SMART Attributes Data Structure revision number: 10
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 084 077 006 Pre-fail Always - 185600113
3 Spin_Up_Time 0x0003 095 095 000 Pre-fail Always - 0
4 Start_Stop_Count 0x0032 098 098 020 Old_age Always - 2185
5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 0
7 Seek_Error_Rate 0x000f 073 055 030 Pre-fail Always - 25890559714
9 Power_On_Hours 0x0032 093 093 000 Old_age Always - 6632
10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0
12 Power_Cycle_Count 0x0032 098 098 020 Old_age Always - 2229
187 Reported_Uncorrect 0x0032 099 099 000 Old_age Always - 1
189 High_Fly_Writes 0x003a 100 100 000 Old_age Always - 0
190 Airflow_Temperature_Cel 0x0022 071 056 045 Old_age Always - 29 (Min/Max 25/29)
194 Temperature_Celsius 0x0022 029 044 000 Old_age Always - 29 (0 13 0 0 0)
195 Hardware_ECC_Recovered 0x001a 052 046 000 Old_age Always - 194244099
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 1
198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 1
199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
200 Multi_Zone_Error_Rate 0x0000 100 253 000 Old_age Offline - 0
202 Data_Address_Mark_Errs 0x0032 066 219 000 Old_age Always - 34
SMART Error Log Version: 1
ATA Error Count: 2
CR = Command Register [HEX]
FR = Features Register [HEX]
SC = Sector Count Register [HEX]
SN = Sector Number Register [HEX]
CL = Cylinder Low Register [HEX]
CH = Cylinder High Register [HEX]
DH = Device/Head Register [HEX]
DC = Device Command Register [HEX]
ER = Error register [HEX]
ST = Status register [HEX]
Powered_Up_Time is measured from power on, and printed as
DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes,
SS=sec, and sss=millisec. It "wraps" after 49.710 days.
Error 2 occurred at disk power-on lifetime: 5344 hours (222 days + 16 hours)
When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were:
ER ST SC SN CL CH DH
-- -- -- -- -- -- --
84 51 7c 1b 1a 02 ae Error: ABRT at LBA = 0x0e021a1b = 235018779
Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
-- -- -- -- -- -- -- -- ---------------- --------------------
20 20 7f 18 1a 02 ae 00 00:09:05.228 READ SECTOR(S)
20 20 01 17 1a 02 ae 00 00:09:05.228 READ SECTOR(S)
20 20 01 01 00 00 a0 00 00:08:59.830 READ SECTOR(S)
91 20 3f 01 00 00 af 00 00:08:59.826 INITIALIZE DEVICE PARAMETERS [OBS-6]
10 20 01 01 00 00 a8 00 00:08:59.678 RECALIBRATE [OBS-4]
Error 1 occurred at disk power-on lifetime: 5009 hours (208 days + 17 hours)
When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were:
ER ST SC SN CL CH DH
-- -- -- -- -- -- --
40 51 00 b7 8c 02 e0 Error: UNC at LBA = 0x00028cb7 = 167095
Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
-- -- -- -- -- -- -- -- ---------------- --------------------
25 20 1e 9e 8c 02 e0 00 00:02:20.691 READ DMA EXT
25 20 1e 80 8c 02 e0 00 00:02:20.691 READ DMA EXT
25 20 1e 62 8c 02 e0 00 00:02:20.690 READ DMA EXT
25 20 1e 44 8c 02 e0 00 00:02:20.690 READ DMA EXT
25 20 1e 26 8c 02 e0 00 00:02:20.690 READ DMA EXT
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Extended offline Completed without error 00% 6631 -
# 2 Conveyance offline Completed without error 00% 6630 -
# 3 Extended offline Completed without error 00% 6622 -
# 4 Short offline Completed without error 00% 6600 -
# 5 Extended offline Completed without error 00% 6632 -
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.
ОБНОВИТЬ:
Как и предполагалось в ответе от rob, я попытался перезаписать весь жесткий диск нулями. Проверил значения SMART, а затем начал читать весь жесткий диск. Снова проверил SMART значения. В результате значения SMART, относящиеся к числу ожидающих / перераспределенных секторов, не изменяются в обоих случаях сразу после записи, а затем после чтения. Перераспределено 0. В ожидании 1.
источник
Ответы:
Сектор помечается как ожидающий при сбое чтения. Ожидающий сектор будет помечен перераспределенным, если последующая запись не удалась. Если запись успешна, она удаляется из текущих ожидающих секторов и считается исправной. (Точное поведение может немного отличаться, и я расскажу об этом позже, но пока это достаточно близкое приближение.)
При запуске
badblocks -w
каждый шаблон сначала пишется, а затем читается. Возможно, что запись в нестабильный сектор завершится успешно, но последующее чтение завершится неудачно, что снова добавит его в список ожидающих секторов. Я бы попытался записать нули на весь диск с помощьюdd if=/dev/zero of=/dev/sda
, проверить состояние SMART, затем прочитать весь диск с помощьюdd if=/dev/sda of=/dev/null
и снова проверить состояние SMART.Обновить:
Исходя из ваших предыдущих результатов
badblocks -w
, я ожидал, что ожидающий сектор будет очищен после записи всего диска. Но поскольку этого не произошло, можно с уверенностью сказать, что этот диск работает не так, как ожидалось.Давайте рассмотрим описание текущего ожидающего подсчета секторов :
Теперь давайте рассмотрим важные моменты:
Другими словами, ожидающий сектор должен быть либо переназначен немедленно, либо накопитель должен был попытаться записать в сектор, и должна была произойти одна из двух вещей:
Я уже намекал на это ранее, но описание в Википедии текущего ожидающего сектора предполагает, что текущее число ожидающих секторов всегда должно быть нулевым после полной записи на диск . Поскольку здесь это не так, мы можем сделать вывод, что либо (а) Википедия неправильна (или, по крайней мере, неверна для вашего накопителя), либо (б) микропрограмма накопителя не может правильно обработать это состояние ошибки (что я бы посчитал ошибкой встроенного ПО) ).
Поскольку текущее число ожидающих секторов после чтения всего диска остается неизменным, мы можем утверждать, что либо (а) сектор не может быть успешно прочитан, либо (б) сектор был успешно прочитан и помечен как хороший, но произошла ошибка чтения другой сектор. Но так как количество перераспределенных секторов все еще равно 0 после чтения, мы можем исключить (b) как возможность и сделать вывод, что ожидающий сектор все еще не читается.
На этом этапе было бы полезно узнать, зарегистрировал ли диск какие-либо новые ошибки SMART. Следующим моим предложением было проверить, есть ли у Seagate обновление прошивки для вашего накопителя, но похоже, что они этого не делают.
Хотя я бы не рекомендовал продолжать использовать этот диск, похоже, что вы, возможно, захотите принять связанные с этим риски (а именно то, что он может продолжать действовать беспорядочно и / или может привести к дальнейшему ухудшению или неудаче). В этом случае вы можете попытаться установить Linux, загрузиться с аварийного компакт-диска, а затем (с отключенными файловыми системами) использовать имя файла e2fsck -l, чтобы вручную пометить соответствующий блок как плохой. (Просто убедитесь, что вы поддерживаете хорошие резервные копии!)
e2fsck -l имя файла
(Обратите внимание, что
e2fsck -c
это предпочтительнееe2fsck -l filename
, и вы, возможно, даже захотите попробовать это, но, основываясь на ваших результатах до сих пор, я очень сомневаюсь, что e2fsck -c найдет какие-либо плохие блоки.)Конечно, вам придется выполнить некоторую арифметику, чтобы преобразовать LBA неисправного сектора (как предусмотрено SMART) в номер блока файловой системы. The Bad Blocks HowTo предоставляет удобную формулу:
HowTo также содержит полный пример с использованием этой формулы. После установки ОС вы можете проверить, занимает ли файл нестабильный сектор, используя debugfs (подробные инструкции см. В HowTo).
Другой вариант: разделить на части вокруг предполагаемого плохого блока. При установке ОС вы также можете попытаться разделить ошибки. Если я правильно выполнил арифметику, ошибка составит около 81,589 МБ, поэтому можно либо сделать / загрузить немного меньше и запустить следующий раздел после сектора 167095, либо пропустить первые 82 МБ или около того полностью.
ABRT 235018779 К сожалению, что касается ошибки ABRT в секторе 235018779, мы можем только предполагать, но спецификация ATA8-ACS дает нам некоторые подсказки.
Из рабочего проекта приложения AT 8 - Набор команд ATA / ATAPI (ATA8-ACS) :
Рассматривая команды, ведущие к ABRT (несколько READ SECTOR (S) с последующей калибровкой и повторной инициализацией) ...
Abort должен быть установлен в единицу, если команда не поддерживается. - Это кажется маловероятным.
Abort может быть установлен в единицу, если устройство не может выполнить действие, запрошенное командой. - Возможно, P-список перераспределенных секторов смещает доступные для пользователя адреса на достаточно большое расстояние, чтобы пользовательский адрес был переведен в сектор 235018779, и операция чтения не смогла завершиться (по какой причине мы не знаем ... но ошибки CRC не было, поэтому я не думаю, что мы можем заключить, что сектор 235018779 является плохим).
Прерывание также должно быть установлено в единицу, если запрашивается адрес вне диапазона доступных пользователю адресов, если IDNF не установлен в единицу. - Мне это кажется наиболее вероятным, и я бы, вероятно, истолковал это как результат программной ошибки (либо вашей ОС, либо какой-либо программы, которую вы запускали). В этом случае, это не признак надвигающейся гибели жесткого диска.
На тот случай, если вы еще не устали проводить диагностику ...
Вы можете попробовать еще
smartctl -t long /dev/sda
раз, чтобы увидеть, не вызывает ли он больше ошибок в журнале SMART, или вы можете оставить его как нерешенный X-файл ;) и периодически проверять журнал SMART, чтобы увидеть, не произойдет ли это снова. В любом случае, если вы продолжаете использовать диск, не заставляя его перераспределять или очищать ожидающий сектор, вы уже рискуете.Используйте контрольную файловую систему
Для большей безопасности вы можете рассмотреть возможность использования файловой системы с контрольной суммой, такой как ZFS или btrfs, для защиты от повреждения данных на низком уровне. И не забывайте делать частые резервные копии, если у вас есть что-то, что не может быть легко воспроизведено.
источник
В статье Bad Sector Remapping приведен используемый алгоритм.
На жестком диске есть два списка дефектов:
Следовательно, тот факт, что ваш плохой сектор на 577121 секторов превышает нормальный последний сектор, не означает, что у вас 577121 поврежденных секторов, если только это не дефект P-списка. Дефект G-списка может быть размещен где угодно, поэтому вполне возможно, что встроенное ПО выделит его в конце свободного пространства сектора.
Из википедии Известные атрибуты ATA SMART :
Таким образом, на самом деле ожидающие ошибки намного хуже, чем переназначенные, поскольку ошибка достаточно сложна, чтобы предотвратить чтение исходного содержимого для повторного отображения. В сущности, содержание этого сектора, вероятно, потеряно навсегда.
Документ MHDD Инструмент диагностики очень низкого уровня жесткого диска объясняет коды ошибок как:
Таким образом, сектор 167095 неисправим, и чтение / запись в 235018779 была прервана.
Поскольку запись в оба сектора не изменила статус с ожидающего на переназначенный, мне кажется, что сектор замены также плох. Моя теория состоит в том, что сектор 167095 был переназначен в сектор 235018779, но, к сожалению, последний тоже плохой, и что прошивка не знает, как переназначить плохие запасные сектора. В результате получается неисправимый плохой сектор.
источник