4

Я пытаюсь восстановить как можно больше данных с неисправного жесткого диска емкостью 750 ГБ, подключенного через корпус USB 3.

На самом диске содержится более 1500 сбойных блоков, обнаруженных badblocks в Linux.

Он отлично монтируется на моем компьютере (работает MacOS 10.12), но когда данные из поврежденного блока читаются, диск на несколько секунд простаивает, исчезает из /dev , а затем снова появляется, как если бы кто-то отключил USB-кабель, а затем быстро снова подключил его.

Первый сбойный блок происходит примерно в 136 ГБ с начала диска, однако это не единственный. Об этом свидетельствуют выходные данные из badblocks , а также когда происходит сбой как dd и ddrescue .

Обе команды dd и ddrescue терпят неудачу, как только они читают данные из поврежденного блока, поскольку диск исчезает из /dev:

dd if=/dev/rdisk3 of=image.img bs=16m:

ddrescue -v /dev/disk4 image.img logfile:

ddrescue после первоначального завершения с тем же файлом журнала приводит к немедленному завершению и дальнейшему продвижению.

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

Существует ли какой-либо инструмент, похожий на dd или ddrescue который может восстановить данные с этого диска, который просто ждет, пока диск перемонтируется, вместо того, чтобы автоматически завершать работу при чтении поврежденного блока?

Я могу использовать как macOS, так и Linux (Ubuntu), поэтому решения для любой платформы подойдут мне.

2 ответа2

2

при считывании данных из поврежденного блока накопитель на несколько секунд бездействует, отключается, а затем перемонтируется

У меня была такая же проблема с диском, который "исчезал", а потом появлялся позже. На самом деле он тоже не монтировался, но ddrescue останавливался, когда устройство исчезало. Я использовал его под Linux, но ситуация очень похожа.

Я предлагаю вам использовать простое программирование оболочки и тот факт, что диск на самом деле снова появляется через некоторое время. Другими словами, сделайте:

while [ 1 ]; do
    ddrescue -v /dev/disk4 image.img logfile
    sleep 3
done

Это работает следующим образом:

  • ddrescue запущен
  • если он перестает работать, оболочка ждет 3 секунды, затем она запускает его снова
  • ddrescue может продолжить, потому что вы эффективно используете его возможности ведения журнала

После ряда попыток (я думаю, что по умолчанию 3, но я могу ошибаться), ddrescue сектора как совершенно плохие и продолжит чтение других частей диска. Через несколько часов вы увидите, что ddrescue будет завершен, и вы можете завершить цикл с помощью Ctrl+C.

1

Из GNU ddrescue Manual:

Пример 6. При восстановлении раздела в /dev/sda1 в файл hdimage , /dev/sda1 исчезает из /dev .

ddrescue -f -n /dev/sda1 hdimage mapfile     <-- /dev/sda1 fails here
  (restart /dev/sda or reboot computer and then repeat the above
   command as many times as needed until it succeeds)
ddrescue -d -f -r3 /dev/sda1 hdimage mapfile

Ответ Андреа Лаззаротто охватывает часть "Повторите приведенную выше команду". В примере есть дополнительный шаг, использующий ключ -d . Руководство объясняет это немного:

-d
--idirect

Используйте прямой доступ к диску для чтения из infile , минуя кеш ядра. (Открывает файл с флагом O_DIRECT ). Размер сектора должен быть правильно установлен, чтобы это работало. Не все системы поддерживают это.

Рекомендуется дополнительно прочитать соответствующий раздел руководства. Оттуда:

Сначала попробуйте параметр --idirect . Если в вашей системе нет прямого доступа к диску, попробуйте сырые устройства. Прочтите системную документацию, чтобы узнать, как связать необработанное устройство с обычным блочным устройством. Некоторые ОС предоставляют необработанный доступ через специальные имена устройств, например /dev/rdisk .

MacOS предоставляет имена /dev/rdisk . Однако в вашем вопросе вы используете rdisk с dd а disk с ddrescue , так что, как мне кажется, вы все равно можете воспользоваться дополнительным шагом.

Пользователи Linux найдут raw команду полезной. Они должны ссылаться на man raw и на Пример 2: использование устройства raw в уже упомянутом разделе Руководства GNU ddrescue.

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