Моя система Linux начала выдавать ошибки SMART в системный журнал. Я отследил это и считаю, что проблема в одном блоке на диске. Как мне легко заставить диск перераспределить этот блок? Я хотел бы знать, какой файл был уничтожен в процессе. (Я знаю, что если один блок на диске выйдет из строя, другие, вероятно, последуют за ним; у меня есть хорошая текущая резервная копия, и я просто хочу попытаться сохранить этот диск в рабочем состоянии.)
Поиск в Интернете приводит к Плохой блок 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 на пастебине.
Раньше я писал прошивку дисков для WD, и однажды я написал прошивку, которая переназначила плохие блоки.
Во-первых, большинство сбойных блоков обнаруживается при чтении, а не записи. Запись выполняется вслепую, то есть данные записываются без проверки. Таким образом, при записи, если носитель неисправен, вы не узнаете об этом, пока хост не прочитает этот сектор. Есть небольшая часть сектора (заголовок сектора), которая считывается при записи, чтобы найти правильный сектор, так что, если есть ошибка при чтении заголовка сектора, привод переназначит сектор и запишет его с полученными данными из команды записи. Но подавляющее большинство сбойных блоков обнаруживается при чтении, и то, что запись в сектор завершилась успешно, не означает, что носитель исправен или что сектор был переназначен.
Теперь о переназначении плохих блоков (также называемом перераспределением). Да, обычно диск будет пытаться переназначить сектор, если ошибка достаточно серьезная (т. Е. Сбой ECC достаточно серьезен), но диск все равно может восстановить данные после исправления ECC. Обычно это делается автоматически. Единственным исключением является то, что хост мог ранее запретить приводу выполнять автоматическое перераспределение, но это делается редко.
Итак, что произойдет, если диск выполняет чтение и не может восстановить данные? Ничего. Об ошибке сообщается хосту, но переназначение не выполняется. Проблема в том, что накопитель может переназначить сектор, но он не имеет ни малейшего представления, какие данные записывать во вновь переназначенный сектор. Если, скажем, он просто записал кучу нулей, а затем снова прочитал сектор, он вернул бы все нули без каких-либо указаний на то, что данные недействительны. По сути, это то же самое, что и повреждение данных. Накопитель не может рассчитывать на то, что хост отслеживает ошибки по ряду причин (например, что, если диск был перемещен на новый хост?), Поэтому лучший способ действий - ничего не делать, когда данные могут ' т быть восстановленным.
Однако современные диски сохранят местоположение поврежденного сектора, когда его нельзя перераспределить. Количество сбойных секторов, ожидающих перераспределения, можно найти в данных SMART. Что происходит, если запись выполняется в один из поврежденных секторов, ожидающих перераспределения, перераспределение выполняется, потому что теперь у диска есть действительные данные для записи на него после перераспределения. Таким образом, когда люди говорят, что запись в плохой сектор приведет к его перераспределению, на самом деле это только половина дела. Сначала необходимо прочитать диск, чтобы диск мог обнаружить все сбойные сектора, которые нельзя перераспределить автоматически. Таким образом, вы можете записать весь диск, и данные SMART сообщат, что нет плохих секторов, ожидающих перераспределения, но вы не обязательно очистили диск от всех плохих секторов. Поэтому, если вы действительно хотите очистить диск от всех поврежденных секторов, лучше всего сначала прочитать весь диск, а затем записать весь диск (конечно, это уничтожит все предыдущие данные на диске).
Есть и другие способы работы с плохими блоками, которые нельзя перераспределить. Если диск является частью резервной конфигурации RAID (то есть любой, кроме RAID 0), программное обеспечение RAID должно автоматически восстанавливать данные сбойного сектора с других дисков и записывать их в перераспределенный сектор. Диски SCSI имеют явную команду переназначения блоков, которую хост может использовать для принудительного переназначения, даже если нет действительных данных для записи в блок, но ее использование довольно низкоуровневое.
Вы могли бы попробовать hdparm --write-sector <LBA> /dev/ice
.
Я не знаю другого способа сделать это - вам нужно вручную преобразовать LBA в блоки файловой системы (как вы уже обнаружили)
У Майкла все правильно, и в большинстве случаев я бы сказал, просто замените диск, они дешевы. Однако, если у вас нет резервных копий и вы не можете получить важные данные с диска или просто хотите попытаться восстановить диск, вы можете попробовать использовать спинрит, на высшем уровне.
У меня был накопитель для ноутбука, который несколько лет назад начал издавать какие-то шумы. Плохие блоки показали, что на диске было около 118 плохих блоков, видимых конечному пользователю. Поскольку у меня уже была копия SpinRite, я решил попробовать, прежде чем покупать новый диск. После запуска spinrite на диске сбойные блоки показали 0 сбойных блоков, и шумы прекратились. С тех пор привод проработал более двух лет.
Думаю, все, что вам нужно сделать, это:
e2fsck -c /dev/hda1
предполагая, что / dev / hda1 - это (отключенный) раздел. Или:
e2fsck -c -c /dev/hda1
для проведения (более медленного) неразрушающего теста чтения-записи. Его все равно придется размонтировать. Однако я не думаю, что это даст вам подробную информацию о потерянных данных.
Если у вас есть резервные копии, и вы знаете, что это логическая ошибка, а не физическая, то лучший способ сделать это - обнулить диск.
Я бы использовал MHDD, он довольно прост в использовании, и пока вы не забываете настроить свой жесткий диск в Bios на эмуляцию IDE, а затем обратно в AHCI, когда ваша работа будет сделана, вам не о чем беспокоиться.
После загрузки в MHDD выберите тип диска в команде ERASE и подтвердите свой выбор.
Купите себе кофе, это может занять некоторое время.
После обнуления диска запустите сканирование (f4) с включенным параметром Remap (по умолчанию выключено). Если все еще есть проблемы с диском (это будет означать, что на диске есть физические повреждения и диск находится на устойчивом нисходящем склоне), эта опция «Исправит» их, сопоставив поврежденную область с исправными частями диска.
Если ошибок UNC нет, поздравляем вас, и ваш диск все еще может быть друзьями на долгие годы.
Если диск выходит из строя, замените его. Не стоит рисковать, что он еще раз развалится.