Лучший способ скопировать все файлы, игнорируя ошибки?

36

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

Я пытаюсь скопировать все восстанавливаемое содержимое на запасной жесткий диск, но каждый метод, который я пробую, дает сбой при обнаружении ошибки, оставляя оставшиеся файлы не скопированными.

Искатель - Сбой. SuperDuper - не работает. То же самое (терминальная команда) - Сбой.

Я надеялся, что Ditto справится с задачей, говорится на странице руководства Ditto:

То же самое возвращает 0, если все скопировано, иначе не ноль. То же самое почти никогда не сдается, предпочитая сообщать об ошибках по пути. Диагностические сообщения будут распечатаны со стандартной ошибкой.

Я отправил сообщение об ошибке в Apple re ditto, которое не работает, как рекламируется.

Есть другие идеи?

radven
источник
См. Stackoverflow.com/a/27637277, а не --ignore-errorsответы ниже.
spyle

Ответы:

28

Я пользуюсь cp -Rfv sourcefile destinationfileс успехом на довольно регулярной основе.

cp = копия

R = поддерживает файловые иерархии

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

v = подробный режим, отображает файлы, переданные по мере продвижения

исходный файл = данные, которые вы хотите скопировать

destinationfile = каталог / диск, в который вы хотите скопировать

Мистер кролик
источник
3
Как это игнорирует ошибки на исходном диске (см. Вопрос)?
nohillside
1
@patrix Он не «игнорирует» ошибки, но через них проходит флаг «f», копируя только неповрежденные данные. Наблюдая за прогрессом (благодаря многословному флагу), вы увидите вывод в виде строк «данные не скопированы из-за ошибки ввода-вывода», когда они обнаруживают неверные данные. Как только ошибка отображается, она переходит к следующему файлу без какого-либо ввода пользователя. Сценарий постера звучит очень похоже на десятки раз, когда я использовал эту команду для извлечения данных с ненадежных дисков / томов.
Мистер Кролик
Есть ли способ скопировать сбойный файл с некоторым постфиксом, чтобы все недостающие файлы были лучше найдены?
1
Из руководства BSD cp(macOS): «В режиме -R cp продолжит копирование, даже если будут обнаружены ошибки».
Мэтт
Большое спасибо за это. В настоящее время я пытаюсь спасти как можно больше от неисправного жесткого диска, хотя я не забочусь о поврежденных данных, я не буду тратить впустую время, пытаясь исправить это, а просто удалить его. Это рабочий метод для достижения этого быстро. Я записываю ошибки в лог-файл, который я могу позже проанализировать, чтобы удалить усеченные файлы с ошибками чтения, добавив следующее:2> error.log
0x01
23

Попробуйте Gnu ddrescue - это программа для восстановления данных, которая выполняет блочное копирование с восстановлением поврежденных данных во время операций копирования. Вы можете получить его для OS X, если вы используете Homebrew , набрав в окне терминала:

brew install ddrescue

Руководство по Arstechnica описывает , как спасти неисправный диск с помощью ddrescue. Обязательно прочитайте руководство, так как оно содержит полезную информацию. Вот суть того, как туда добраться.

  • Найдите диск с помощью diskutil list. Столбец идентификатора - это то, что вы ищете:

    /dev/disk1
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      GUID_partition_scheme                        *750.2 GB   disk1
       1:                        EFI EFI                     209.7 MB   disk1s1
       2:                  Apple_HFS Macintosh HD 2          80.0 GB    disk1s2
       3:                  Apple_HFS Home                    509.1 GB   disk1s3
    
  • Размонтируйте диск:

    diskutil unmount /dev/disk1s3    
    
  • Запустите операцию восстановления диска в образ. Убедитесь, что местоположение Rescue.dmgзаменено на желаемое.

    sudo /usr/local/bin/ddrescue -v -n -c 4096 /dev/disk1s3 Rescue.dmg Rescue.log
    
  • Восстановите образ на новый диск:

    sudo /usr/local/bin/ddrescue --force -v -c 4096 Rescue.dmg /dev/disk2s0 recovery.log
    

Рекомендуем также прочитать руководство по ddrescue, чтобы узнать о доступных опциях при запуске man ddrescue.

user76335
источник
1
Чтобы добавить к уведомлению модератора: это может быть очень хорошим ответом на проблему, но она требует дополнительной работы. Можете ли вы добавить несколько примеров команд ddrescue для устройств OS X в ответ? Я исправил это немного с тем фоном и информацией, которую мы хотели бы видеть в ответах здесь. Если вы сделаете это, я уверен, что это будет отличным ответом.
Ян С.
Год или два назад я успешно использовал ddrescue для копирования данных с плохого диска. Он преодолел, возможно, 200 ошибок, и в конечном итоге удалось прочитать около половины из них. Полученный в результате скопированный диск был загружен в diskwarrior, и в результате, возможно, был поврежден 10 файлов из примерно 1 миллиона.
Питтсбург Майк
7

Мне нравится использовать rsyncдля того, чтобы скопировать файлы из поврежденного источника в функциональное назначение:

rsync -auv --delete --ignore-errors /path/to/source/ /path/to/destination/

Где:

-a = "режим архива" = повторяется в каталогах, копирует символические ссылки как символические ссылки, сохраняет разрешения, время, группы и специальные файлы, а также сохраняет владельца (когда владелец = root) и устройства (когда владелец = root)

-u= пропускает файл в источнике, если его соответствующая копия в месте назначения новее

-v = подробный вывод

--delete= файлы в месте назначения, которые не существуют в источнике, будут удалены

--ignore-errors = удаляет файл / каталог в случае ошибки ввода / вывода в процессе копирования

Юрий Сукупира
источник
4

Эта подсказка Macworld предлагает использовать dd для создания побитовой копии (игнорируя ошибки), а затем монтировать результирующее изображение в Finder для восстановления ваших файлов. Я не пробовал, но, похоже, это может сработать.

binarybob
источник
Это хорошо, потому что вы хотите, чтобы ваши данные быстро отключались, если этот диск неактивен. Таким образом, вы получаете блок для блочного копирования, включая ошибки, которые затем будут доступны для проверки на досуге, не беспокоясь о том, что диск погибнет до того, как вы с него все удалите. Я выполню одну операцию, в хорошем аккуратном начале, чтобы закончить, не пропуская повсюду от фрагмента файла к фрагменту файла, что будет более трудной работой на диске, который создал копию DD.
Stuff
3
В этом случае ddrescue лучше, чем dd, поскольку он будет повторять плохие разделы снова и снова, пока вы оставляете его включенным - см. этот предыдущий ответ, где OP отправляет свои данные после пары недель обработки (!). Обратите внимание, что это хороший подход, если аппаратное обеспечение HD выходит из строя, но ничего не делает для исправления повреждения структуры тома - оно просто копируется вместе с файлами.
Гордон Дэвиссон
3

Вы можете рассмотреть возможность использования ddкоманды для поблочного копирования с поврежденного жесткого диска на новый жесткий диск.

Предполагая, что /dev/disk2размер вашего нового жесткого диска ( ) равен или больше размера вашего поврежденного жесткого диска ( /dev/disk1), вы можете выполнить:

dd if=/dev/disk1 of=/dev/disk2 bs=4096 conv=notrunc,noerror

blocksized @ 4k, не обрезать блоки данных, игнорировать все ошибки

Чтобы найти имена устройств, mountсначала запустите из терминала.

Biltu
источник
0

Команда dittoдолжна работать, я бы использовал ее dittoвместе с -vопцией для verbose, чтобы вы могли точно видеть, что дает вам ошибку при копировании.

Роджер
источник
3
По словам Аскера dittoне работает. Как вы думаете, почему это так?
nohillside
оп спрашивает об альтернативахditto
juniorRubyist
0

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

шаги:

  1. Выберите «резервное копирование всех файлов» в качестве стратегии резервного копирования
  2. В опциях выберите «Smart Update» (в противном случае этот процесс займет смехотворно много времени, если у вас более одной или двух ошибок, вам понадобится платная версия для этого)
  3. Запустить копию
  4. Когда копирование не удается, прочитайте журналы, чтобы найти, какой файл не удалось скопировать, затем нажмите ok / close, чтобы вернуться к экрану «Пуск».
  5. Выберите «Редактировать выбранный сценарий копирования» из выпадающего списка
  6. Под командами Script добавьте файл, который не удалось скопировать, он должен сказать «игнорировать», как только он будет добавлен в список файлов
  7. Сохраните ваш скрипт под некоторым именем (например, ignore-поврежденные файлы)
  8. Выберите свой сценарий и повторите шаги 3-7 столько раз, сколько необходимо, чтобы игнорировать все поврежденные файлы.
cwohlman
источник
-2

Если ваш диск все еще доступен, и вы можете увидеть иерархическую структуру файлов, но только процесс копирования останавливается из-за ошибок, вы можете использовать Unstoppable Copierпрограмму.

http://www.roadkil.net/program.php?ProgramID=29

ofir_aghai
источник
Это программа только для Windows, и ОП запрашивает решения для Mac (на форуме для Mac!)
Haydentech