Чтение данных с поврежденного носителя - PullRequest
7 голосов
/ 13 октября 2008

Можно ли читать поврежденные носители (CD, HDD, DVD, ...), даже если Windows Explorer взрывает?

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

Ответы [ 9 ]

3 голосов
/ 13 октября 2008

Основная проблема в проводнике Windows заключается в том, что он не поддерживает возобновление копирования после ошибки чтения. Например, большинство поверхностно поцарапанных компакт-дисков будут выходить из строя на разных участках диска каждый раз, когда вы извлекаете и вставляете их заново.

Следовательно, с помощью утилиты, поддерживающей возобновление операций копирования, можно прочитать все содержимое поврежденного компакт-диска, выполнив несколько раз команду «извлечь / перезагрузить / возобновить».

На самом деле, это то, что делает утилита , которую я написал , и мне никогда не требовалось что-либо более умное для чтения поцарапанных дисков. (Он просто использует ReadFile и WriteFile.)

Еще одним шагом будет открытие необработанного раздела (т. Е. Образа диска) путем передачи строки, такой как "\. \ F:" (примечание: косые черты здесь буквальны) в CreateFile. Это позволит вам читать сырые сектора с диска, но восстановить файлы по этим данным будет сложно.

Фактически, синтаксис "\. \" Позволяет открывать устройства в "\ GLOBAL ??" ветвь пространства имен диспетчера объектов Windows, как если бы они были файлами. Это мало чем отличается от вызова dd с параметром / dev / x. Существует также ветка «\ Device», но она доступна только через DeviceIoControl () (т.е. ioctl ()), то есть нет простого интерфейса ReadFile () / WriteFile ().

Думаю, что-нибудь более низкое, чем это, будет зависеть от устройства; как чтение необработанных данных с CD-ROM (включая биты ECC), как это делают некоторые программы для записи CD. Вам нужно будет провести некоторые исследования на конкретных носителях (CD, flash, DVD) и на том, что ваше оборудование позволяет вам делать на них.

Примечание: обратная косая черта, похоже, теряется на пути к веб-странице; вам нужно передать "DeviceName устройства с обратной косой чертой с обратной косой чертой" в CreateFile. Тебе тоже, конечно, нужно бежать от них.

1 голос
/ 09 апреля 2016

А есть GNU ddrescue

GNU ddrescue - инструмент для восстановления данных. Он копирует данные из одного файла или блочного устройства (жесткий диск, компакт-диск и т. Д.) В другой, пытаясь спасти сначала хорошие детали в случае ошибок чтения.

Обязательно используйте 3-арочную версию ( руководство ):

ddrescue [options] infile outfile [mapfile]

То есть используйте mapfile, даже если это необязательно, потому что:

Если вы используете функцию mapfile в ddrescue, данные спасаются очень эффективно (считываются только необходимые блоки). Также вы можете прервать спасение в любое время и возобновить его позже в той же точке. Файл карты является неотъемлемой частью эффективности ddrescue. Используйте его, если не знаете, что делаете.

И это также входит в Cygwin и Homebrew.

1 голос
/ 13 октября 2008

первый шаг - dd_rescue . После этого вы можете попробовать что-либо восстановить данные.

1 голос
/ 13 октября 2008

Если вы хотите сделать это, сделайте это со стороны Linux - см .: http://sourceforge.net/projects/monkeycity/ opensource

или готовое приложение и бесплатное ПО: http://www.theabsolute.net/sware/dskinv.html

0 голосов
/ 13 октября 2008

Если у вас есть Linux-машина, я могу порекомендовать dvdisaster . Первоначально он предназначен для создания файлов для исправления ошибок, но он также считывает DVD-диски в образ и игнорирует ошибки чтения; и вы можете использовать разные диски один за другим, чтобы заполнить недостающие сектора в образе.

0 голосов
/ 13 октября 2008

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

0 голосов
/ 13 октября 2008

У меня два диска начали распадаться на меня. Из структуры нечитаемых секторов я думаю, что у них было внутреннее отслаивание их эмульсии. WinXP Explorer просто поднял руки и сказал, что диск даже не существует.

В обоих случаях я использовал «GetDataBack for NTFS» из Runtime Software (http://www.runtime.org/).). Вы можете загрузить бесплатную пробную версию, которая покажет вам, что вы могли бы вернуть, если заплатили за это. Когда я купил его, это было 49 долларов, но я вижу, что теперь это 79 долларов.

Эта программа великолепна. Это не обязательно быстро, так как он будет перечитывать некоторые секторы снова и снова, пытаясь получить согласованное значение из нескольких попыток, но когда это будет сделано, вы сможете вернуть то, что, как вы думали, исчезло навсегда. У меня был один диск, на анализ которого ушло более 10 часов, но когда это было сделано, я вернул более 97% диска емкостью 500 ГБ. Определенно стоит цена.

Еще один замечательный инструмент - Beyond Compare. У меня есть версия 2.5.3, но она в настоящее время на 3. ?? и стоит 30 долларов. У них полнофункциональный 30-дневный маршрут. Он отлично справляется с копированием большого количества файлов (и только тех, которые необходимо скопировать) и, в отличие от Explorer, не взрывается при сбое. Это похоже на визуальную rsync для Windows, если вы знакомы с этой программой из Samba.

У меня нет связи ни с одной из упомянутых компаний, кроме как с очень довольным клиентом.

0 голосов
/ 13 октября 2008

Мне повезло со стороны Linux или с помощью BartPE (http://www.nu2.nu/pebuilder/),, но просто просмотр файла не всегда означает, что файл можно будет восстановить, независимо от того, пытаетесь ли вы из Windows или Linux. Лучше всего использовать пробную версию программы восстановления.

0 голосов
/ 13 октября 2008

Я не знаю, какой слой существует между Windows Explorer и Win32 API. Вы можете попробовать написать программу с использованием файловой системы ввода-вывода Win32. Если это не сработает, тогда вам нужно написать собственный драйвер устройства, чтобы снизить его.

...