오류를 무시하고 모든 파일을 복사하는 가장 좋은 방법은 무엇입니까?


36

디스크 유틸리티로 복구 할 수 없지만 읽기 전용으로 마운트하여 데이터에 액세스 할 수있는 부분적으로 손상된 HD가 있습니다.

복구 가능한 모든 내용을 예비 HD에 복사하려고하지만 오류가 발생하면 시도하는 모든 방법이 실패하여 나머지 파일은 복사하지 않습니다.

파인더-실패 SuperDuper-실패 Ditto (터미널 명령)-실패

Ditto가 트릭을 수행하기를 바라고 Ditto 매뉴얼 페이지는 다음과 같이 말합니다.

모든 것이 복사되면 ditto는 0을 반환하고, 그렇지 않으면 0이 아닙니다. ditto는 거의 포기하지 않고 오류를보고하는 것을 선호합니다. 진단 메시지는 표준 오류로 인쇄됩니다.

광고 된대로 작동하지 않는 버그를 Apple reditto에 제출했습니다.

다른 아이디어가 있습니까?


아래 답변이 아닌 stackoverflow.com/a/27637277을 참조하십시오 --ignore-errors.
spyle

답변:


27

나는 cp -Rfv sourcefile destinationfile꽤 정기적으로 성공과 함께 사용 합니다.

cp = 복사

R = 파일 계층을 유지

f = 기존 대상 파일을 열 수 없으면 제거하고 다시 시도하십시오.

v = 상세 모드, 진행되는 동안 전송 된 파일을 표시합니다

sourcefile = 복사하려는 데이터

destinationfile = 복사하려는 디렉토리 / 드라이브


3
소스 드라이브의 오류를 어떻게 무시합니까 (질문 참조)?
nohillside

1
@patrix 오류를 "무시하지는 않지만"f "플래그는 오류를 강제로 처리하며 손상되지 않은 데이터 만 복사합니다. 진행 상황을 볼 때 (verbose 플래그 덕분에) 잘못된 데이터가 발생하면 "I / O 오류로 인해 복사되지 않은 데이터"행에 출력이 표시됩니다. 오류가 표시되면 사용자 입력없이 다음 파일로 이동합니다. 포스터 시나리오는이 명령을 사용하여 flakey 디스크 / 볼륨에서 데이터를 검색 한 수십 번과 매우 유사하게 들립니다.
Mr Rabbit

실패한 파일을 일부 접미사로 복사하여 누락 된 파일을 모두 찾을 수있는 방법이 있습니까?

1
BSD cp매뉴얼 (macOS) : "-R 모드에서 cp는 오류가 감지 되더라도 복사를 계속합니다."
Matt

정말 감사합니다. 나는 현재 고장난 HDD에서 가능한 한 많은 것을 구하려고 노력하고 있습니다. 손상된 데이터는 신경 쓰지 않지만, 수정하려고 할 때 시간을 낭비하지 않고 단지 삭제하는 것입니다. 이것은 이것을 빨리 달성하기위한 효과적인 방법입니다. 오류를 로그 파일에 파이핑하고 있습니다.이 로그 파일은 나중에 다음을 추가하여 읽기 오류가있는 잘린 파일을 삭제하기 위해 구문 분석 할 수 있습니다.2> error.log
0x01

23

Gnu ddrescue를 사용해보십시오 -복사 작업 중에 손상된 데이터 복구로 블록 기반 복사를 수행하는 데이터 복구 프로그램입니다. 터미널 창에 입력 하여 Homebrew 를 사용하는 경우 OS X 용으로 얻을 수 있습니다 .

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
중재자 통지에 추가하려면, 이것은 문제에 대한 아주 좋은 답변 일 수 있지만 더 많은 작업이 필요합니다. OS X 장치 용 샘플 ddrescue 명령을 답변에 추가 할 수 있습니까? 나는 우리가 대답에서보고 싶은 배경과 정보의 종류로 조금 고쳤습니다. 그렇게한다면 큰 반응이 될 것입니다.
Ian C.

1 년 또는 2 년 전에 ddrescue를 사용하여 불량 디스크에서 데이터를 복사했습니다. 아마도 200 개의 오류가 발생하여 결국 그 중 절반을 읽을 수있었습니다. 결과로 복사 된 디스크는 diskwarrior에 공급되었으며 결과는 약 1 백만 개 중 10 개의 파일에 손상을 줄 수 있습니다.
피츠버그 마이크

6

rsync손상된 소스에서 기능 대상으로 파일을 복사하기 위해 사용 하는 것이 좋습니다.

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

어디에:

-a = "아카이브 모드"= 디렉토리로 재귀, 심볼릭 링크를 심볼릭 링크로 복사, 권한, 시간, 그룹 및 특수 파일을 보존하고 소유자 (소유자 = 루트 인 경우) 및 장치 (소유자 = 루트 인 경우)도 보존

-u= 대상 의 해당 사본 이 최신 인 경우 소스 의 파일을 건너 뜁니다.

-v = 자세한 출력

--delete= 소스에 존재하지 않는 대상의 파일은 삭제됩니다

--ignore-errors = 복사 과정에서 I / O 오류가 발생한 경우 파일 / 디렉토리를 삭제합니다


4

Macworld 힌트 는 dd를 사용하여 비트 단위로 복사 (오류 무시) 한 다음 결과 이미지를 Finder에 마운트하여 파일을 복구 할 것을 제안합니다. 나는 그것을 시도하지 않았지만 그것이 효과가있는 것처럼 들린다.


디스크가 더프 인 경우 데이터를 빨리 끄고 싶기 때문에 좋습니다 . 이러한 방식으로 오류를 포함한 블록 복사 용 블록을 얻을 수 있습니다. 그러면 모든 것이 꺼지기 전에 디스크가 제대로 작동하지 않을까 걱정하지 않고 여가 시간에 검사 할 수 있습니다. 파일 조각에서 파일 조각으로 건너 뛰지 않고 깔끔하게 시작하여 하나의 작업을 수행하여 DD 사본을 만든 드라이브에서 더 어려울 것입니다.
stuffe

3
ddrescue는 dd보다 낫습니다. 실행하는 동안 나쁜 섹션을 반복해서 다시 시도하기 때문입니다 .2 주간의 연삭 후에 OP 신이 데이터를 끄는 이전 답변을 참조하십시오 (!). 이것은 HD 하드웨어가 고장 나더라도 볼륨 구조 손상을 수정하기 위해 아무 것도하지 않는 좋은 방법입니다. 파일과 함께 복사됩니다.
Gordon Davisson

3

dd명령을 사용하여 손상된 HDD에서 새 HDD로 블록 별 복사를 수행 할 수 있습니다 .

새 HDD ( /dev/disk2)가 손상된 HDD ( /dev/disk1)와 크기가 같거나 크다고 가정하면 다음을 발행 할 수 있습니다.

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

4k에서 차단, 모든 데이터 블록을 자르지 말고 모든 오류를 무시하십시오.

장치 이름을 찾으려면 mount먼저 터미널 에서 실행하십시오 .


0

ditto명령은 내가 사용하는 것, 작업을해야 ditto와 함께 -v당신은 무엇을 복사 당신에게 오류를 제공 정확하게 볼 수 있도록 자세한 정보에 대한 옵션을 선택합니다.


3
asker에 따르면 ditto작동하지 않습니다. 왜 그렇게 생각하십니까?
nohillside

영업 이익은 대안에 대한 질문입니다ditto
juniorRubyist

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 전용 프로그램이며 OP는 Mac 관련 포럼에서 Mac 솔루션을 요청합니다.
Haydentech
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.