Найкращий спосіб копіювання всіх файлів, ігноруючи помилки?


36

У мене частково пошкоджений HD, який неможливо відновити Disk Utility, але який можна встановити лише для читання, роблячи доступними дані на ньому.

Я намагаюся скопіювати весь вміст, який можна відновити, на запасний HD, але кожен метод, який я намагаюсь, не вдається, коли виникає помилка - залишення файлів не скопійовано.

Finder - не вдається. SuperDuper - не вдається. Дітто (команда терміналу) - не вдається.

Я сподівався, що Дітто зробить трюк, на сторінці чоловіка Дітто сказано:

ditto повертає 0, якщо все скопійовано, інакше не нульове. ditto майже ніколи не здається, вважаючи за краще повідомляти про помилки. Діагностичні повідомлення будуть надруковані до стандартної помилки.

Я подав помилку в Apple, не працюючи як рекламується.

Будь-які інші ідеї?


Див. Stackoverflow.com/a/27637277, а не --ignore-errorsвідповіді нижче.
шпиль

Відповіді:


28

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

cp = копія

R = підтримує ієрархії файлів

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

v = багатослівний режим, відображає передані файли по мірі прогресування

sourcefile = дані, які потрібно скопіювати

targetfile = каталог / диск, в який ви хочете скопіювати


3
Як це ігнорує помилки на вихідному диску (див. Питання)?
nohillside

1
@patrix Він не "ігнорує" помилки, але прапор "f" проникає через них, лише копіюючи недоторкані дані. Під час перегляду прогресу (завдяки багатослівному прапору) ви побачите вихідний рядок "дані, не скопійовані через помилку вводу / виводу", коли вони зустрічаються з поганими даними. Після відображення помилки вона переходить до наступного файлу без будь-якого введення користувачем. Сценарій афіші звучить надзвичайно схоже на десятки разів, коли я використовував цю команду для отримання даних з лускатих дисків / томів.
Містер Кролик

Чи є спосіб скопіювати несправний файл з деяким постфіксом, щоб краще знайти всі відсутні файли?

1
З cpпосібника з BSD (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.


1
Щоб додати до повідомлення модератора: це може бути дуже гарною відповіддю на проблему, але для цього потрібно більше роботи. Чи можете ви додати до відповіді кілька зразкових команд ddrescue для пристроїв OS X? Я трохи виправив це з фоном та інформацією, яку ми хотіли б бачити у відповідях тут. Якщо ви це зробите, я впевнений, що це буде чудовою відповіддю.
Ян Ч.

Я використовував ddrescue рік або два тому, щоб скопіювати дані з поганого диска. Він пройшов, можливо, 200 помилок, і в кінцевому підсумку вдалося прочитати приблизно половину з них. Отриманий скопійований диск потрапив у disk warrior, і результатом було, можливо, пошкодження 10 файлів із приблизно 1 мільйона.
Піттсбург Майк

7

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

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

Де:

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

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

-v = багатослівний вихід

--delete= файли в пункті призначення , які не існують у джерелі , будуть видалені

--ignore-errors = видаляє файл / каталог у випадку помилки вводу / виводу під час копіювання


4

Цей натяк Macworld пропонує використовувати dd для створення побітної копії (ігнорування помилок), а потім встановлення отриманого зображення в Finder для відновлення файлів. Я не пробував цього, але здається, що це може спрацювати.


Це добре, тому що ви хочете, щоб ваші дані були швидко вимкнені, якщо цей диск є глухим. Таким чином, ви отримуєте блок для блокової копії, включаючи помилки, який потім буде доступний для огляду у ваше дозвілля, не переживаючи, що диск буде перомерно загинути, перш ніж ви вийдете з нього все. Я виконаю одну операцію, з гарним акуратним початком закінчення, не пропускаючи повсюди від фрагмента файлу до фрагмента файлу, що буде важче працювати на диску, який створив копію DD.
stuff

3
ddrescue є кращим, ніж dd у цьому, оскільки він буде повторювати погані секції знову і знову, поки ви не залишите його - дивіться цю попередню відповідь, де бог ОП його дані вимкнено через пару тижнів шліфування (!). Зауважте, що це хороший підхід, якщо апаратне забезпечення HD виходить з ладу, але нічого не робить, щоб виправити пошкодження структури обсягу - це просто копіюється разом з файлами.
Гордон Девіссон

3

Ви можете розглянути можливість використання ddкоманди, щоб виконати поодиноку копію зі свого пошкодженого жорсткого диска на новий жорсткий диск.

Якщо припустити, що ваш новий жорсткий диск ( /dev/disk2) має рівний або більший розмір, ніж ваш пошкоджений HDD ( /dev/disk1), то ви можете видавати:

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

blockized @ 4k, не усікайте жодних блоків даних, ігноруйте всі помилки

Щоб знайти імена пристроїв, mountспочатку запустіть із Терміналу.


0

dittoКоманда повинна працювати, я хотів би використовувати dittoв поєднанні з -vопцією для докладного виведення , так що ви можете побачити саме те , що дає помилку того , що це копія.


3
За словами запитувача, dittoце не працює. Як ви думаєте, чому це робиться?
nohillside

op запитує про альтернативиditto
молодшийрубіст

0

Ви можете спробувати запустити SuperDuper та проігнорувати файли з помилками io, якщо їх лише кілька, і ви використовуєте функцію розумного оновлення, що є досить ефективним способом позбутися більшості даних. (Я думаю, що команда dd була б кращою, якщо ви можете це зробити).

Кроки:

  1. Виберіть "резервну копію всіх файлів" як стратегію резервного копіювання
  2. В опціях виберіть "розумне оновлення" (інакше цей процес займе смішно тривалий час, якщо у вас більше однієї чи двох помилок, для цього вам знадобиться платна версія)
  3. Запустіть копію
  4. Коли копія не вдається прочитати журнали, щоб знайти файл, який не вдалося скопіювати, натисніть кнопку ОК / Закрити, щоб повернутися до екрану "Пуск"
  5. Виберіть "редагувати вибраний сценарій копії" зі спадного меню
  6. Під командами сценарію додайте файл, який не вдалося скопіювати, він повинен сказати «ігнорувати», як тільки він буде доданий до списку файлів
  7. Збережіть свій скрипт з деяким іменем (наприклад, ігноруйте пошкоджені файли)
  8. Виберіть свій сценарій і повторіть кроки 3-7 стільки разів, скільки потрібно, щоб ігнорувати всі пошкоджені файли.

-2

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

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


Це програма лише для Windows, і ОП просить рішення для Mac (на специфічному для Mac форумі!)
Haydentech
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.