Как определить, какой раздел имеет плохие блоки?

2

У меня есть следующее устройство:

Модельное семейство: Western Digital Caviar Green (AF)
Модель устройства: WDC WD15EARS-00MVWB0
Серийный номер: WD-WCAZA3607921
LU WWN Device Id: 5 0014ee 2b01eac3e
Версия прошивки: 51.0AB51
Емкость пользователя: 1 500 301 910 016 байт [1,50 ТБ]
Размер сектора: 512 байт логический / физический
Устройство: в базе данных smartctl [для подробностей используйте: -P show]
Версия ATA: ATA8-ACS (дополнительная версия не указана)
Версия SATA: SATA 2.6, 3.0 Гбит / с
Местное время: Четверг, 21 ноября 00:08:20 CET
Поддержка SMART: Доступно - устройство поддерживает SMART.
Поддержка SMART: включена

и недавно я получил ошибку при чтении поверхности этого диска. Это ошибка:

Полный журнал ошибок:
Версия журнала ошибок SMART: 1
Число ошибок ATA: 25 (журнал устройства содержит только самые последние пять ошибок)
    CR = регистр команд [HEX]
    FR = Регистрация функций [HEX]
    SC = регистр подсчета секторов [HEX]
    SN = регистр номера сектора [HEX]
    CL = регистр нижнего цилиндра [HEX]
    CH = регистр верхнего цилиндра [HEX]
    DH = устройство / регистр головки [HEX]
    DC = регистр команд устройства [HEX]
    ER = регистр ошибок [HEX]
    ST = регистр состояния [HEX]
Powered_Up_Time измеряется от включения питания и печатается как
DDd + чч: мм: SS.sss, где DD = дни, чч = часы, мм = минуты,
SS = сек, а sss = миллисек. Он «оборачивается» через 49,710 дней.

Ошибка 25 произошла при включении диска: 18798 часов (783 дня + 6 часов)
  Когда произошла команда, вызвавшая ошибку, устройство было активным или неактивным.

  После выполнения команды регистры были:
  ER ST SC SN CL CH DH
  - - - - - - -
  40 51 08 00 40 37 e6 Ошибка: UNC 8 секторов на LBA = 0x06374000 = 104284160

  Команды, приводящие к команде, которая вызвала ошибку, были:
  CR FR SC SN CL CH DH DC Команда Powered_Up_Time / Feature_Name
  - - - - - - - - ---------------- ------------------ -
  c8 00 08 00 40 37 e6 08 08: 54: 35.771 ЧИТАТЬ DMA
  ec 00 00 00 00 00 a0 08 08: 54: 35.763 ИДЕНТИФИКАЦИОННОЕ УСТРОЙСТВО
  ef 03 46 00 00 00 a0 08 08: 54: 35.763 НАСТРОЙКА ФУНКЦИЙ [Установить режим передачи]

Это 25-я ошибка, но предыдущие ошибки точно такие же.

Вот умный отчет:

Номер версии структуры данных атрибутов SMART: 16
Специфичные SMART-атрибуты поставщика с пороговыми значениями:
ID # ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE ОБНОВЛЕНО WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate 0x002f 200 200 051 Pre-fail Always - 1
  3 Spin_Up_Time 0x0027 253 189 021 Pre-fail Всегда - 2066
  4 Start_Stop_Count 0x0032 099 099 000 Old_age Always - 1118
  5 Reallocated_Sector_Ct 0x0033 200 200 140 Пред-сбой Всегда - 0
  7 Seek_Error_Rate 0x002e 200 200 000 Old_age Always - 0
  9 Power_On_Hours 0x0032 075 075 000 Old_age Always - 18833
 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 - 1101
192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 277
193 Load_Cycle_Count 0x0032 085 085 000 Old_age Always - 346753
194 Temperature_Celsius 0x0022 122 109 000 Old_age Always - 28
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_Неисправимый 0x0030 200 200 000 Old_age Offline - 2
199 UDMA_CRC_Error_Count 0x0032 200 196 000 Old_age Always - 11
200 Multi_Zone_Error_Rate 0x0008 200 200 000 Old_age Офлайн - 1

Так что это неплохой сектор, но я думаю, что так и будет.

У меня есть 7 разделов на этом диске, и проблема в том, что я не знаю, где находится сектор (ы), какой раздел и / или какие MiB, KiB и т. Д., Начиная с начала диска. Есть ли способ выяснить это?

Михаил Морфиков
источник
2
Плохой сектор - это физический дефект, вызванный незакрепленными частицами и коррозией, который обычно распространяется. Я рекомендую вам сделать резервную копию ваших данных и заменить жесткий диск раньше, чем вы его обнаружите, потому что рано или поздно это станет критической проблемой, и вы потеряете свои данные.
Хавенард

Ответы:

1

Я нашел, как это сделать. Следующая строка в интеллектуальном отчете определяет LBA:

40 51 08 00 40 37 e6 Ошибка: UNC 8 секторов на LBA = 0x06374000 = 104284160

Итак, это 104284160. Если мы знаем это, мы также знаем, какой раздел задействован:

root: ~ # fdisk -lu / dev / sda
Система Идентификатора Начальной Загрузки Конца Блокировки
...
/ dev / sda3 99610624 1466798079 683593728 83 Linux

Чтобы определить, где именно на 3-м разделе это:

104284160 - 99610624 = 4673536

Мы также должны знать размер блока:

# tune2fs -l / dev / mapper / crypt_data | блок grep
Количество блоков: 170897920
Размер блока: 4096
Блоки на группу: 32768

И теперь мы можем определить, какой блок файловой системы содержит этот LBA, используя следующую формулу:

   b = (int) ((LS) * 512 / B)
где:
b = номер блока файловой системы
B = размер блока файловой системы в байтах
L = LBA плохого сектора
S = начальный сектор раздела, как показано fdisk -lu
и (int) обозначает целую часть.

В моем случае это будет:

b = (int) ((104284160-99610624) * 512/4096
б = 584192

Теперь мы должны проверить, есть ли там файл:

# debugfs
debugfs 1.42.8 (20 июня 2013 г.)
debugfs: open / dev / mapper / crypt_data 
debugfs: testb 584192
Блок 584192 помечен как используемый
debugfs: icheck 584192
Номер блока Inode
584192 37486656
debugfs: ncheck 37486656
Инод Путь
37486656 / some / file

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

Михаил Морфиков
источник
Ссылка мертва
Анвар
Я исправил это, и теперь оно должно работать.
Михаил Морфиков