10

У меня есть диск, который сообщает, что текущие ожидающие секторы "45". Я использовал badblocks для идентификации секторов и пытался записать в них нули с помощью dd.

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

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

# dd if=/dev/zero of=/dev/sdb bs=512 count=1 seek=217152
dd: error writing ‘/dev/sdb’: Input/output error

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

Если это уместно, вот вывод smartctl -i :

Model Family:     Western Digital Caviar Green (AF)
Device Model:     WDC WD15EARS-00Z5B1
Serial Number:    WD-WMAVU3027748
LU WWN Device Id: 5 0014ee 25998d213
Firmware Version: 80.00A80
User Capacity:    1,500,301,910,016 bytes [1.50 TB]
Sector Size:      512 bytes logical/physical
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:    Fri Oct 18 17:47:29 2013 CDT
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

ОБНОВИТЬ:
Я запустил shred на диске, что привело к обнулению Current_Pending_Sector. Однако Reallocated_Sector_Ct и Reallocated_Event_Count по-прежнему равны нулю, и теперь dd может записывать данные в сектора, которые ранее были недоступны. Это приводит меня к нескольким другим вопросам:

  • Почему перераспределения не записываются диском? Я предполагаю, что перераспределение произошло, поскольку теперь я могу записывать данные непосредственно в сектор, а раньше не мог.

  • Почему шред вызвал перераспределение, а не дд? Имеет ли значение тот факт, что shred записывает случайные данные, а не просто нули?

2 ответа2

9

Накопитель WD15EARS (и большинство других недавно выпущенных накопителей) использует расширенный формат, что означает, что реальный физический размер сектора этого накопителя составляет 4 КиБ, а традиционный размер сектора 512 байт только эмулируется. Из-за этого, если один физический сектор размером 4 Кбайт выходит из строя, все 8 соответствующих эмулированных 512-байтовых секторов сразу становятся нечитаемыми.

(Sector Size: 512 bytes logical/physical вывода из smartctl не верен, поскольку некоторые диски WD15EARS сообщают о неправильном размере физического сектора - очевидно, на вашем диске установлена версия микропрограммы, которая в этом отношении не работает.)

Более того, когда записывается один эмулированный 512-байтовый сектор, накопителю расширенного формата действительно необходимо прочитать весь физический сектор размером 4 КБ, изменить соответствующую его 512-байтовую часть, а затем записать весь физический сектор на носитель. Если носитель исправен, эта операция чтения-изменения-записи просто вызывает значительное замедление по сравнению с диском с реальными 512-байтовыми физическими секторами. Однако, если физический сектор 4 КиБ неисправен и не может быть прочитан, любая операция записи, которая не переписывает сектор полностью, завершится неудачей. Из-за этого вы не можете принудительно перераспределить сектор на таких дисках, используя dd с bs=512 count=1 - вы должны использовать как минимум bs=512 count=8 и убедиться, что номер сектора в опции seek= кратен 8 , (Это предполагает, что перемычка «Windows XP Compatible» не установлена, в противном случае также следует учитывать смещение выравнивания, добавленное этой перемычкой.)

Другая причина, по которой принудительное перераспределение с помощью dd может потерпеть неудачу, заключается в том, что по умолчанию Linux использует кеш на уровне блоков для доступа к блочным устройствам, и это может вызвать операции чтения-изменения-записи в программном обеспечении, которые также могут завершаться ошибкой, когда встречается нечитаемый сектор , Вы можете добавить oflag=direct чтобы обойти этот кеш для устройства, указанного в of=... (есть также iflag=direct , которая применяется к устройству ввода).

0

Мне пришлось сделать это недавно, и я обнаружил, что работа с клочками на всем диске работает очень хорошо. Хотя крошка бесполезна по своему прямому назначению, кроме как на дискетах, она делает только то, что требуется для самовосстановления плохих блоков.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .