Недавно я получил невыносимо маленькое, но довольно важное повреждение жесткого диска на хосте ESXi, затронувшее пару виртуальных машин. Есть файл, который я очень хотел бы восстановить, и, конечно, он каким-то образом оказался за пределами моего регулярного резервного копирования. Самые последние копии были 6 месяцев назад. Оказывается, мне это нужно... упс.
Подробности:
1) Я использовал ddrescue (УДИВИТЕЛЬНЫЙ инструмент) в загрузочном ISO Parted Magic для восстановления 99,98% диска виртуальной машины, о котором идет речь. К сожалению, ошибки, похоже, почти полностью связаны с НЕДАВНИМИ записями файлов... так что, конечно, это именно те сектора, которые мне нужно восстановить больше всего.
2) Диск выдает ошибки ввода-вывода при чтении плохих секторов, но иногда ему УДАЕТСЯ прочитать ранее плохой сектор! Так что восстановление все еще возможно. Чуть чаще, чем это, будет какая-то серьезная неисправность и диск замедлится и снова запустится. О, и около 1/4 этих остановок вращения не вернутся. (Требуется жесткий цикл питания, выключение не сработает) Наконец, почти каждое чтение плохих секторов сопровождается приятным слышимым щелчком.
3) Важный диск виртуальной машины отформатирован в NTFS.
4) Я могу (обычно) смонтировать поврежденный том NTFS в режиме только для чтения, и могу (немного реже) перейти в папку, содержащую нужный мне файл. Однако, файл, о котором идет речь, всегда выдает ошибку ввода-вывода, когда я делаю 'ls' папки. Другие файлы в папке не выдают ошибку ввода-вывода.
5) Я пробовал использовать ntfsinfo/etc..., что похоже на то, что мне нужно... но это вообще не открывает раздел. (Разочарование, поскольку «mount» обычно это делает)
6) Файл представляет собой XLS-файл Excel 2003 года, поэтому я не уверен, что смогу придумать какие-либо строки для поиска в необработанном образе диска. (Возможно, части версии 6-месячной давности?)
Я бы очень хотел использовать что-то вроде возможностей debugfs. Однако из man-страниц следует, что инструменты ntfs могли бы выполнять эту работу, если бы их можно было заставить открыть раздел. В частности, мне интересно, могут ли ошибки ввода-вывода быть чисто в метаданных файла, и можно ли восстановить запись каталога достаточно хорошо, чтобы скопировать содержимое файла. В крайнем случае, любое частичное содержимое файла, которое я смогу получить, было бы здорово.
Я уже писал (относительно простые) модули ядра, поэтому я мог бы скомпилировать специальный модуль NTFS с включенной (или добавленной) дополнительной отладочной информацией. (Файл стоит того, чтобы потратить по крайней мере несколько дней на его восстановление... плюс я узнаю много интересного в процессе)
Есть какие-нибудь указания?
РЕДАКТИРОВАТЬ:
Дополнительная информация об ошибках привода:
В /var/log/messages, конечно, отображается множество ошибок NTFS-fs... но я, наконец, удосужился расшифровать необработанное сообщение о чувственном коде, которое я обычно получаю: sense key 0x3, ASC=0x11, ASCQ=0x4. (которое, похоже, расшифровывается как UNRECOVERED READ ERROR - AUTO REALLOCATE FAILED).
Когда диск останавливается, я вижу «scsi0:».*Сообщение «BusLogic BT-958 Initialized». Я не уверен, драйвер Linux SCSI, драйвер ESXi или сам диск решает остановить вращение диска. Если бы это был драйвер Linux, то, возможно, я мог бы изменить драйвер, чтобы избежать остановки вращения. Вся эта история с ddrescue становится намного более болезненной из-за этих требующих выключения-включения питания остановок вращения.
ПРАВКА2:
используя сообщение журнала "end_request: I/O error, dev sda, sector 7238859" сразу после того, как я 'ls' каталог, содержащий файл в вопросе, я нацелил свою операцию ddrescue на этот сектор. В настоящее время я планирую рискнуть и ЗАПИСАТЬ этот сектор обратно на живой диск, если это удастся. Возможно, я смогу медленно восстановить свой путь к файлу в вопросе таким образом. Тем не менее, большинство восстанавливаемых плохих секторов восстанавливаются менее чем за 20 повторных попыток... этот уже более 150... *вздох*
РЕДАКТИРОВАНИЕ3:
Ошибка сектора от 'ls' в нужном мне файле полностью несовместима (более 1000 попыток за ночь и безрезультатно). Надеюсь, это просто метаданные, когда вы делаете 'ls'? :)
У меня есть большая часть копии ddrescue, но она не монтируется (или монтируется без файлов). Поврежденный диск монтируется правильно большую часть времени... может быть, ошибки ввода-вывода на поврежденном диске заставляют 'mount' откатываться к работающему зеркалу?
** ПРАВКА4:**
Я пока сдался, ожидая дальнейших предложений. Я удалил привод и переделал коробку. Я сохраню привод на случай, если что-то случится.
решение1
Несколько заметок из моего опыта:
- (причина)Если вы слышите необычный звук во время попыток доступа к жесткому диску, и проблемы не возникают (более или менее) в случайных местах на диске, то первопричина, скорее всего, находится на поверхности диска (а не в электронике) - к сожалению, это печальный сценарий. Если бы это была "только" электроника, у вас, возможно, был бы шанс восстановить большую часть или даже все ваши данные.
- (плохие сектора)Если вы еще этого не сделали, найдите в Интернете загрузочную утилиту диагностики/восстановления от производителя диска, скачайте ее, загрузите, запустите глубокую проверку и дайте ей возможность попытаться переназначить поврежденные сектора — это лучший из бесплатных методов. Обратите внимание, что поврежденные сектора имеют тенденцию к росту, поэтому даже если вам удастся поймать один фрагмент файла после 2314-й попытки чтения, есть вероятность, что эти попытки просто привели к росту соседних поврежденных секторов, что фактически снижает шансы на восстановление других частей файла.
- (восстановление NTFS)Ничто не может исправить файловую систему NTFS так, как собственные инструменты MS Windows. Если образ NTFS не монтируется (также убедитесь, что вы пытаетесь смонтировать раздел, а не весь диск!), вы можете попробовать что-то вроде
testdisk
Linux, но если это не сработает, Windowschkdisk
может помочь. Если у вас установлена Windows на виртуальной машине, вы можете преобразовать необработанный образ, полученный из,ddrescue
в формат, поддерживаемый этой виртуальной машиной (например,VDI
илиVMDK
), добавить его в виртуальную машину и загрузить Windows в режиме командной строки, чтобы исправить файловую систему.Если вы используете VirtualBox, команда для преобразования такого образаVBoxManage convertfromraw <filename> <outputfile>
необязательна для--format VDI|VMDK|VHD
получения указанного выходного формата.
решение2
Это может быть применимо или не применимо к вашему случаю, но последняя мера — это «трюк с заморозкой». СмотритеВосстановление данных с поврежденного жесткого диска: «трюк с заморозкой»для обсуждения метода.