Копирование множества файлов без остановки на ошибках в OSX

Вопрос или проблема

Мне нужно скопировать несколько Гб с внешнего жесткого диска на основной жесткий диск, и некоторые файлы вызовут ошибки. Если я сделаю это с помощью Finder, он остановится при первой ошибке.

Есть ли способ скопировать все, независимо от ошибок? Что-то вроде копирования с помощью Teracopy для Windows?

В терминале введите

cp -Rp /Volumes/<source-volume>/<source-user>/<source-folder>/ /Volumes/<destination-volume>/<destination-folder>/

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

Если вы получите информацию о новой папке после выполнения этой команды, вы увидите, как увеличивается размер папки.

Пример

cp -Rp /Volumes/Macintosh HD/User/Bob/Desktop/stufftocopy/ /Volumes/external/newfolder

Он будет копировать и отображать ошибки для всего, что не может быть скопировано, но не останавливается.

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

Пример

cp -Rp "/Volumes/Macintosh HD/User/Bob/Desktop/stufftocopy/" /Volumes/external/newfolder

Объяснение:

выполните “man cp”, чтобы увидеть описание команды и все опции

Как в Mac OSX 14.6.1 (23G93) аргументы “-Rp” означают:

-R:

     -R    Если source_file обозначает каталог, cp копирует каталог и все поддерево, подключенное в этой
       точке. Если source_file заканчивается на /, копируются содержимое каталога, а не сам каталог.
       Эта опция также заставляет копировать символические ссылки, а не путём переадресации,
       и cp создавать специальные файлы, а не копировать их как обычные файлы. Созданные каталоги имеют
       тот же режим, что и соответствующий исходный каталог, неизменённый umask процесса.

       В режиме -R cp будет продолжать копирование, даже если обнаружены ошибки.

       Обратите внимание, что cp копирует файлы с жесткими связями как отдельные файлы. Если вам нужно сохранить жесткие связи, подумайте
       об использовании tar(1), cpio(1) или pax(1) вместо этого.

-p:

     -p    Заставляет cp сохранять следующие атрибуты каждого исходного файла в копии: время модификации,
       время доступа, флаги файла, режим файла, идентификатор пользователя и идентификатор группы, как это разрешается правами доступа.
       Списки управления доступом (ACL) и расширенные атрибуты (EAs), включая ресурсные вилки, также будут сохранены.
       
       Если идентификатор пользователя и идентификатор группы не могут быть сохранены, сообщение об ошибке не отображается, и код выхода
       не изменяется.
       
       Если у исходного файла установлен бит set-user-ID и идентификатор пользователя не может быть сохранён, бит set-user-ID
       не сохраняется в разрешениях копии. Если у исходного файла установлен бит set-group-ID и идентификатор группы не может быть сохранён,
       бит set-group-ID не сохраняется в разрешениях копии. Если у исходного файла установлены оба бита set-user-ID и set-group-ID,
       и либо идентификатор пользователя, либо идентификатор группы не могут быть сохранены, ни бит set-user-ID, ни бит set-group-ID
       не сохраняются в разрешениях копии.

Вы можете использовать cp так, как предложено, или rsync, но в случае ошибки ввода/вывода иногда это не сработает.

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

dd означает “дублирование диска”. Это утилита командной строки, включенная в Mac OS X. Бесплатная версия также доступна для Windows.

Будьте крайне осторожны, даже если вы знакомы с командной строкой, потому что dd может причинить непоправимый ущерб вашим данным, если вы неправильно укажете входные и выходные параметры. Вас предупредили.

Аргументы dd просты:

  • if=путь_к_файлу_с_ошибками_ввода/вывода указывает путь к исходному файлу
  • of=путь_к_чистой_копии_для_создания указывает путь к выходному файлу
  • conv=noerror,sync делает dd устойчивым к ошибкам

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

Из-за ошибок ввода/вывода dd может занять больше времени на создание чистой копии, чем при обычном копировании.

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

Ошибки ввода/вывода — это серьезный вопрос, и избавление от карты после восстановления видео, вероятно, ПРАВИЛЬНАЯ ВЕЩЬ, КОТОРУЮ СТОИТ СДЕЛАТЬ. Вы также должны учитывать, что часть отснятого материала не будет восстановлена или будет иметь качество ниже среднего.

Источник: http://aeroquartet.com/wordpress/2012/06/06/how-to-copy-a-file-with-io-errors/

Пример:

dd if=/Volumes/CD/broken_movie.avi of=~/Movies/broken_movie.avi conv=noerror,sync

Также смотрите:

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

Teracopy выпустила версию для Mac, которую вы можете скачать в Apple Store.

Ответ или решение

Для копирования множества файлов на macOS без прерывания на ошибках существует ряд методов и инструментов. Основная проблема, описанная в вопросе, заключается в том, что стандартное приложение Finder прерывает процесс копирования при возникновении первой ошибки. Это может быть крайне неудобно при больших объемах данных и наличия поврежденных файлов.

Теория

Для эффективного копирования файлов без прерывания можно использовать команду cp в Терминале. Данная команда позволяет указать параметры, при которых будет игнорироваться большинство ошибок, а процесс копирования продолжится. Использование cp с параметрами -Rp позволяет рекурсивно копировать директории, при этом сохраняя атрибуты файлов, такие как время модификации, доступ, и права доступа.

Другой подход – использование rsync, который также способен продолжать процесс копирования, даже если возникают определенные ошибки. Этот инструмент позволяет более точно настраивать параметры копирования.

Если же на носителе имеются физически поврежденные сектора, и вы сталкиваетесь с ошибками ввода-вывода (I/O Errors), может понадобиться использование dd. Эта команда создаст копии поврежденных файлов, стараясь игнорировать ошибки чтения, что делает ее полезной в ситуациях, когда стандартные инструменты не справляются.

В случае, если предпочтителен графический интерфейс, можно обратиться к коммерческому ПО, например, Beyond Compare или найти версии, такие как TeraCopy для macOS. Эти программы предлагают более интуитивно понятный интерфейс и позволяют завершить копирование с подробной отчетностью о возникших ошибках.

Пример

  1. Копирование с использованием cp:

Параметры -Rp задают рекурсивное копирование и сохранение атрибутов файлов, а также допускают продолжение копирования при возникновении ошибок. Пример команды:

cp -Rp "/Volumes/Macintosh HD/User/Bob/Desktop/stufftocopy/" /Volumes/external/newfolder
  1. Использование rsync:

Это мощная команда, предлагающая множество опций для точной настройки копирования. Например:

rsync -av --ignore-errors "/Volumes/Macintosh HD/User/Bob/Desktop/stufftocopy/" /Volumes/external/newfolder
  1. Применение dd для восстановления файлов с I/O ошибками:
dd if=/Volumes/CD/broken_movie.avi of=~/Movies/broken_movie.avi conv=noerror,sync

Этот подход полезен для восстановления данных с поврежденных носителей.

Применение

В зависимости от ваших потребностей и опыта с командной строкой, вы можете выбрать один из предложенных методов. Команда cp с параметрами -Rp подходит для простых случаев, когда на кону не стоят физические повреждения носителя. Для более сложных сценариев rsync предлагает богатый набор опций и может быть настроен так, чтобы игнорировать определенные ошибки, не прекращая процесс.

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

Графический интерфейс может облегчить процесс обработки большого количества файлов, и здесь Beyond Compare или новая версия TeraCopy для macOS может стать отличным решением, особенно для пользователей, предпочитающих работать без командной строки.

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

Оцените материал
Добавить комментарий

Капча загружается...