Как легко восстановить один нечитаемый блок на диске Linux?

Как легко восстановить один нечитаемый блок на диске Linux?

Моя система Linux начала выдавать ошибки SMART в системном журнале. Я отследил это и считаю, что проблема заключается в одном блоке на диске. Как мне легко заставить диск перераспределить этот блок? Я хотел бы узнать, какой файл был уничтожен в процессе. (Я знаю, что если один блок на диске выйдет из строя, другие, скорее всего, последуют за ним; у меня есть хорошая постоянная резервная копия, и я просто хочу попытаться сохранить этот диск в рабочем состоянии.)

Поиск в Интернете приводит кПлохой блок HOWTO, который описывает ручной процесс на размонтированном диске. Он кажется сложным и подверженным ошибкам. Есть ли инструмент для автоматизации этого процесса в Linux? Мой единственный другой вариант —диагностический инструмент производителя, но я предполагаю, что это затрет плохой блок без какого-либо отчета о том, что было уничтожено. В худшем случае это могут быть метаданные файловой системы.

Диск в вопросе — это основной системный раздел. Использует ext3fs и LVM. Вот журнал ошибок из syslog и соответствующий бит из smartctl.

smartd[5226]: Device: /dev/hda, 1 Currently unreadable (pending) sectors

Error 1 occurred at disk power-on lifetime: 17449 hours (727 days + 1 hours)
... Error: UNC at LBA = 0x00d39eee = 13868782

Есть полный дамп smartctlна pastebin.

решение1

Вы можете попробовать hdparm --write-sector <LBA> /dev/ice.

Я не знаю другого способа сделать это — вам нужно вручную преобразовать LBA в блоки файловой системы (как вы уже обнаружили)

решение2

Раньше я писал прошивки для дисков WD, и однажды я написал прошивку, которая переназначала плохие блоки.

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

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

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

Однако современные диски сохраняют местоположение плохого сектора, когда его невозможно перераспределить. Количество плохих секторов, ожидающих перераспределения, можно найти в данных SMART. Что происходит, если запись выполняется в один из плохих секторов, ожидающих перераспределения, перераспределение выполняется, потому что на диске теперь есть допустимые данные для записи после перераспределения. Таким образом, когда люди говорят, что запись в плохой сектор перераспределит его, это на самом деле только половина истории. Сначала диск должен быть прочитан, чтобы диск мог обнаружить все плохие сектора, которые не могут быть перераспределены автоматически. Таким образом, вы можете записать весь диск, и данные SMART скажут, что плохих секторов, ожидающих перераспределения, нет, но вы не обязательно очистили диск от всех плохих секторов. Поэтому, если вы действительно хотите очистить диск от всех плохих секторов, лучше всего сначала прочитать весь диск, а затем записать весь диск (конечно, это уничтожит все предыдущие данные на диске).

Существуют и другие способы работы с плохими блоками, которые нельзя перераспределить. Если диск является частью избыточной конфигурации RAID (т. е., что угодно, кроме RAID 0), программное обеспечение RAID должно автоматически восстановить данные для плохого сектора с других дисков и записать их в перераспределенный сектор. Диски SCSI имеют явную команду переназначения блоков, которую хост может использовать для принудительного переназначения, даже если нет допустимых данных для записи в блок, но ее использование довольно низкоуровневое.

решение3

Я думаю, все, что вам нужно сделать, это:

e2fsck -c /dev/hda1

предполагая, что /dev/hda1 — это (непримонтированный) раздел. Или:

e2fsck -c -c /dev/hda1

для проведения (более медленного) неразрушающего теста чтения-записи. Его все равно придется размонтировать. Хотя я не думаю, что это даст вам подробности о каких-либо потерянных данных.

решение4

Если у вас есть резервные копии и вы знаете, что это логическая, а не физическая ошибка, то лучшим способом решения этой проблемы будет обнуление диска.

Я бы использовал MHDD, он довольно прост в использовании, и если вы не забудете установить в BIOS вашего жесткого диска эмуляцию IDE, а затем вернуть его в режим AHCI после завершения работы, вам не о чем беспокоиться.

После загрузки MHDD выберите свой диск, введите команду ERASE и подтвердите свой выбор.

Приготовьте себе кофе, это может занять некоторое время.

После обнуления диска запустите сканирование (f4) с параметром Remap, установленным на ON (по умолчанию отключено). Если с диском все еще есть проблемы (это будет означать, что на пластине есть физическое повреждение и диск находится на устойчивом нисходящем уклоне), эта опция «исправит» их, сопоставив поврежденные области со здоровыми частями диска.

Если ошибок UNC нет, поздравляем, вы и ваш накопитель сможете дружить еще долгие годы.

Связанный контент