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

22

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

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

Данный диск является основным системным разделом. Использование ext3fs и LVM. Вот журнал ошибок из системного журнала и соответствующий бит из 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 .

нельсон
источник
Я думал, что прошивка диска автоматически переназначит плохой блок при чтении, поэтому теоретически это уже было сделано. Как указано ниже, запустите fsck (или правильный эквивалент для вашей FS), чтобы убедиться, что оверлейная FS все еще стабильна.
BuildTheRobots
2
Насколько я понимаю, прошивка диска будет только переназначать блок при записи , а не при чтении. Так что на самом деле мне нужно форсировать запись в данный блок.
Нельсон
1
Я наконец удалил этот диск. Он работал нормально в течение нескольких месяцев, но после 5-й ошибки чтения я отказался от него.
Нельсон

Ответы:

12

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

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

Джеймс
источник
О, это новый флаг! Это определенно позаботится о перераспределении плохого блока. Теперь все, что мне нужно, - это простой способ найти то, что он затрет.
Нельсон
3
Используя этот метод для исправления диска, я могу сказать, что это правильный метод. Принудительная запись в рассматриваемый сектор заставит диск повернуться лицом к сектору и либо (а) получить успешную запись, либо (б) получить постоянную плохую секунду вместе с повторным отображением.
Эйвери Пейн
Большой! И это намного проще, чем smartmontools.sourceforge.net/badblockhowto.html
Janning
Странно, что этот итеративный процесс (поиска следующего плохого сектора через SMART и принуждения его к перераспределению) не автоматизируется с помощью простой утилиты! ..
imz - Иван Захарящев
32

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

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

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

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

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

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

десятка
источник
1
Стоит также упомянуть, что, по крайней мере, некоторые жесткие диски Seagate поддерживают функцию Write-Read-Verify, которую можно включить, используя hdparm -R(если предположить, что hdparm был сравнительно недавно). Это приводит к значительному снижению производительности записи (примерно вдвое уменьшая пропускную способность записи и число операций ввода-вывода в секунду, поскольку каждая запись теперь влечет за собой последующее чтение), но если ваше оборудование поддерживает это и ваша рабочая нагрузка слишком велика для чтения, то это может быть очень действенной профилактической мерой.
CVn
2

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

e2fsck -c /dev/hda1

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

e2fsck -c -c /dev/hda1

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

Мэтью Флэшен
источник
Но жаль, что, похоже, он не использует информацию SMART о плохих блоках. Интересно, почему не существует инструмента fsck, который использовал бы информацию о неверных блоках из SMART и пытался их избежать или исправить поврежденные файлы, как описано в smartmontools.sourceforge.net/badblockhowto.html или serverfault.com/a/106130/68972 . ..
imz - Иван Захарящев
2

У Михаэля это правильно, и в большинстве случаев я бы сказал, просто замените диск, они дешевы. Однако, если у вас нет резервных копий и вы не можете извлечь важные данные с диска, или просто хотите попытаться восстановить диск, вы можете попробовать использовать spinrite на самом высоком уровне.

У меня был ноутбук, который начал издавать звуки несколько лет назад. Badblocks показал, что диск имел около 118 плохих блоков, видимых для конечного пользователя. Поскольку у меня уже была копия SpinRite, я решил попробовать ее перед покупкой нового диска. После запуска спинрита на диске badblocks показало 0 плохих блоков и шумы прекратились. С тех пор диск работал более двух лет.

3dinfluence
источник
Нельсон, ты просто будешь голосовать против каждого ответа, который ты не хочешь услышать? Здоровый диск автоматически переназначит плохой блок. Если вам нужно что-то предпринять, чтобы сделать это, диск больше не работает и его необходимо заменить.
3dinfluence
Нет, я отклонил только один ответ, потому что он не ответил на мой вопрос. Вы предложили спрайт, спасибо! Насколько я понимаю, здоровый диск не переназначит плохой сектор, пока не будет записан. Я пытаюсь найти самый простой способ заставить запись. Перейдите к предложению Мэтью и посмотрите, достаточно ли у fsck этого делать.
Нельсон
Извините, что поспешил к выводам, увидев, что 2 ответа быстро отклонены, и вы ответили на другой ответ, который я предположил, что это вы.
3dinfluence
2
Вы правы в том, что переназначение плохого сектора происходит, когда запись не удается выполнить в блоке. Если у вас есть только поврежденный блок в отношении файловой системы, то fsck может решить вашу проблему, если рассматриваемый блок является блоком метаданных. fsck действительно просто сканирует и исправляет ошибки в метаданных. Так что это не дает никаких гарантий в отношении самих данных. Файловые системы следующего поколения, такие как BTRFS и ZFS, могут обнаруживать и, если у вас есть избыточность, исправлять ошибки данных. Spinrite также принудительно запускает это при чтении, затем записывает инвертированные данные, перечитывает, а затем инвертирует данные обратно в каждый блок как часть своего сканирования.
3dinfluence
1

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

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

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

Возьми себя в руки, это может занять некоторое время.

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

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

Jahith
источник
-1

Если диск работает плохо, замените его. Не стоит рисковать, что он больше развалится.

Майкл Графф
источник
Я открыто говорил о том, что диск плох, и о том, что есть резервные копии, чтобы избежать риска.
Нельсон
2
Это просто означает, что вы готовы играть. Я не думаю, что это означает, что его нельзя заменить, просто вы готовы игнорировать этот совет. Я сомневаюсь, что любое резервное копирование может спасти вашу систему от самого себя, поскольку диск развалится, и все станет очень ненадежным, когда все ухудшится.
Майкл Графф
3
Этот ответ должен быть комментарием ... Вопрос конкретный и исчерпывающий. И поэтому это не ответ.
Питто