손상되거나 액세스 할 수없는 디스크 블록이있는 파일을 식별하고 수정하는 방법


9

Mavericks 10.9.2를 실행하는 2011 년 말 Macbook Pro가 있습니다. 유일한 HDD는 Bootcamp로 포맷 된 750GB 드라이브입니다. 여전히 합리적으로 잘 실행되고 있지만 조각 모음 패스를 실행할 때 조각 모음 (iDefrag)에 의해 이동을 거부하는 파일이 많이 있음을 확인했습니다.

iDefrag는 파일에 액세스 할 때 POSIX 오류 코드 5를보고합니다. 무작위로 하나를 선택하고 파일을 쉘의 다른 위치로 복사하려고하면 오류 가보고되어 문제가 실제로 디스크 / FS에 있다고 생각합니다. cp의 출력은 다음과 같습니다.

cp: unity_nophysx.nexe: Input/output error

내가 아는 한 오류 코드 5는 '액세스 거부'되었지만 조각 모음 프로세스는 관리자로 실행 중이며 의심 파일에서 sudo를 사용하여 cp를 실행해도 아무런 차이가 없습니다.

디스크 유틸리티, fsck 및 Apple Hardware Test는 모두 디스크에 문제가 없다고 주장합니다. SMART 오류가보고되지 않았으며 일부 권한 오류가 있었지만 iDefrag가 불평하는 파일이 없었으며 디스크 유틸리티는 불만없이이를 수정했다고 주장합니다.

백 개 이상의 손상된 파일이있을 수 있지만 여전히 드라이브의 아주 작은 부분입니다. 내가 알 수있는 한, 시스템 파일이나 중요한 데이터는 영향을받지 않습니다. 데이터를 검색하는 것이 좋지만 백업을 다시 설치하거나 이동해도 괜찮습니다. 이 시점에서 드라이브가 실제로 죽어 가고 있는지, 글을 쓰는 동안 드라이브가 이동하여 일부 불량 섹터 또는 해결 될 수있는 약간의 부패가 있는지 알 수 없습니다. 최악의 경우를 가정하고 있으며 시스템을 다시 작성하지 않으려면 약간 더 큰 HDD를 가져와 기존 드라이브를 복제해야합니다.

내 질문은 실제로 깨진 파일을 올바르게 깨진 것으로 표시하고 수정 또는 제거 하여 디스크 복제본이 성공하고 액세스 할 수없는 파일 / 블록에 매달리지 않도록하는 방법입니다. 디스크 유틸리티에 문제가 표시되지 않으며 작업을 수행 할 명령 줄 또는 타사 도구를 모릅니다. 드라이브가 건강하지 않은 것처럼 보이기 때문에 전체 디스크를 지우고 처음부터 시작하고 싶지 않으므로 수리 / 진단 도구를 찾고 있습니다.


SuperUser : superuser.com/q/148227 에 대한 이와 유사한 매우 자세한 토론을 읽으십시오 .
dan

불행히도 건강한 디스크에서 테스트했습니다 :), volitans-software.com/smart_utility.php . 꽤 간단하고 진지한 도구처럼 보입니다. 당신은 그것을 시도하고 가장 눈에 띄게 "재 할당 된 섹터"카운터를 확인할 수 있습니다.
dan

답변:


9

구조 수준에서 정상적인 파일 시스템에 직면하고 디스크 결함 블록이있는 파일을 찾으려면 다음과 같이 진행하십시오.

  1. 와 디스크의 전체 백업을 확인 Time Machine또는 카본 복사 Cloner를

    이 백업을 확인하십시오.

  2. 다음과 같이 무겁고 위험한 명령을 실행하십시오 (파일 시스템 구조 외부에 잘못된 블록이있는 경우).

    find / -type f -print -exec dd if="{}" of=/dev/null bs=1m \;
    

이 무거운 find명령은 모든 일반 파일에 대해 이름을 인쇄하므로 (파일을 읽지 않고 디렉토리 항목 만) 모든 데이터 블록을 완전하고 빠르게 읽습니다.

불량 블록을 포함하는 첫 번째 파일을 hiting되면, 이것은 find커널 로그 원인이됩니다 read error/var/log/system.log, 그것은 하나 느려지거나 전체 시스템이 중단을 가져올 것이다. 이것은 주로 일반적인 수정 작업 전용 내부 풀에서 발견 된 불량 블록을 재배치하는 하드 드라이브 용량에 따라 다릅니다. 불량 블록이 포함 된이 파일은에 의해 인쇄되는 성 find입니다.

이 파일 이름을 종이에 적어 두십시오! 이 파일 이름이 다음과 같다고 가정 해 봅시다.

/.DocumentRevisions-V100/.cs/ChunkStorage/0/0/0/9

이 시점에서 +를 누르면 find빠르게 죽일 수 있습니다 . 잘 죽이는 데 실패하면 Mac을 중단하십시오.ctrlC

Mac을 재부트 할 때 불량 블록이 포함 된 파일을 직접 확인하십시오.

dd if='/.DocumentRevisions-V100/.cs/ChunkStorage/0/0/0/9' of=/dev/null bs=1m

명령이 올바르게 종료되면 디스크가이 파일을 읽고 불량 블록을 재 할당 할 수있을 정도로 오류가 적습니다.

  • 명령이 종료되지 않으면 명령을 정상적으로 종료 할 수 없으며 데이터가 완전히 손실되므로 Mac을 한 번 더 충돌시켜야합니다.

이 경우 디스크 교체를 고려하고 마지막 백업에서 작업해야합니다. 일부 다른 파일에는 잘못된 블록이 포함되어있을 수 있으며 읽지 않는 한 오랫동안 탐지되지 않은 상태로 남아있을 수 있습니다.

커널은 읽지 않은 블록에서 읽기 오류를 발생시키지 않습니다.


아하, 이것은 내가 기대했던 트릭입니다. 먼저 find / dd 스크립트를 사용하여 디스크의 모든 파일 / 블록을 건 드리면 "입력 / 출력 오류"를 나타내는 많은 파일을 찾을 수 있으며 명령의 로그를 파일로 간단히 출력 할 수 있습니다. 그런 다음 더럽혀진 파일을 찾으십시오. dd 명령 자체가 모든 종류의 자동 수정을 트리거하기에 충분하지 않은 것 같습니다 (OS X가 그랬다는 것을 몰랐습니다). 그러나 적어도 파일을 식별하는 신뢰할 수있는 방법을 제공합니다.
MrCranky

플러스 측면에서 OS가 이러한 불량 블록이있는 파일에서 읽으려고 할 때 충돌이 발생하거나 끔찍하게 전화를 끊지 않습니다. May 10 20:42:15 ICE kernel[0]: disk0s2: I/O error.로그에 팝업이 표시 되지만 어떤 파일이 트리거했는지에 대한 단서가 없습니다. 그러나 명령은 매우 행복하게 실행됩니다.
MrCranky

디스크에 풀 내에 사용 가능한 블록이 남아있어 잘못된 블록을 수정하기 때문에 커널이 BBFH와 함께 정지되지 않습니다. dd이 명령의 목적은 데이터를 수정하고 가능한 빨리 변환하는 것입니다. 디스크는 여전히 조명 오류를 복구 할 수 있습니다. 디스크 가격은 작업에 필적 할 것이 없습니다.
dan

음, 예, 나는 가정했습니다 : dd는 하나의 파일에서 모든 데이터를 리밍하고 다른 곳 (이 경우에는 얇은 공기)에 넣는 바보 같은 도구 일뿐입니다. 실제로 중요한 것은 파일과 관련된 모든 블록을 읽습니다. 내가 얻지 못하는 것은 그 경우에 OS X이 기대하는 것입니다. 분명히 커널은 이러한 불량 블록을 읽을 수 없지만 디스크 자체가이를 수정할 수 있다고 생각합니까? 원래 불량 블록에서 데이터를 가져올 수없는 경우 어떻게 다른 곳으로 이동합니까?
MrCranky

훌륭한 질문입니다. 디스크는 판독 블록을 자동으로 재 시도합니다. 헤드 위치는 기계적으로 다른 위치에 있습니다. 이 시도 중 하나에 성공하면 불량 블록을 복구하는 데 사용 가능한 블록 중 하나에 데이터가 복사됩니다. 불량 블록은 불량으로 표시되며 다시 사용되지 않습니다. 반면에 모든 재 시도에 실패하면 데이터가 저장되지 않으며 매우 오랜 시간이 지나면 디스크가 블록을 불량으로 플래그 지정하고 비어있는 새 디스크를 표시 디스크에 할당합니다. 커널은 복구 할 수없는 디스크 오류를보고합니다.
dan

5

부팅 중에 Command+ 를 길게 눌러 단일 사용자 모드로 재부팅합니다 S. 프롬프트가 표시되면 (유사 root #또는 이와 유사 해야 함 ) 입력 fsck -f하고을 누릅니다 Return. Mac의 내장 파일 시스템 일관성 검사 도구이며 시작 파일 시스템의 오류를 찾아서 복구 할 수 있습니다. 보이지 **The volume [volume name] was modified.**않거나 도구가 연속해서 세 번 실패 할 때까지이 명령을 실행하십시오 .

도구가 실패하면 더 큰 문제를 나타낼 수 있습니다 (그러나 도구의 출력을 보지 않으면 무엇을 말할 수 없었습니다). 어쨌든 디스크 도구를 실행하기 전에 가능한 모든 것을 백업했는지 확인하십시오. 완료되면 reboot프롬프트를 입력하고 Enter 키를 눌러 컴퓨터를 재부팅하십시오.

자세한 내용은 fsck 매뉴얼 페이지를 참조하십시오 .


흥미롭지 만 -f 및 단일 사용자 모드에서도 디스크 유틸리티가 수행 한 작업을 수행하는 것처럼 fsck와 매우 유사합니다. 디스크 유틸리티와 마찬가지로 아무것도 찾지 않으며 디스크가 정상이라고 생각합니다. 파일 시스템 레코드를 스캔한다고 가정하지만 내 문제는 블록 수준에 있다고 생각합니다. 즉 파일 시스템이 잘 구성되어 있지만 읽을 때 파일 내의 실제 데이터에 액세스 할 수 없습니다 / 복사 / 조각 모음
MrCranky

1
→ MrCranky : 그렇습니다! fsckDisk Utility파일 시스템 구조의 무결성을 확인하고 있습니다. 파일 시스템 구조에 할당 된 디스크 블록을 읽습니다. 데이터 블록 무결성을 확인하도록 만들어지지 않았습니다. 따라서 읽기 오류가 발생하지 않고 블록이 실패한 디스크에서 실행될 수 있습니다. 디스크를 점검하고 싶을 수도 있지만 실제로는 사용되지 않는 블록조차도 dd if=/dev/disk0 of=/dev/null ibs=1k다른 쉘 창에서 기본 도구를 사용하십시오 tail -f /var/log/system.log. 이것은 무료이며 극단적이며 오류를 숨기지 않습니다.
dan

2

디스크 카탈로그를 다시 작성 하고 잠재적으로 손상된 파일검색하려면 DiskWarrior를 사용하는 것이 좋습니다 .

카탈로그를 재 구축하는 동안 디스크 오작동으로 인해 지연이 발생하는지 알려줄 수도 있습니다.


나는 도움이되는 도구를 구입하는 것을 좋아하지 않지만 시험판이 없으며 내가 겪고있는 종류의 오류를 찾기 위해 설계된 것조차 보장하지 않습니다. 나는 백업하기 전에 더 많은 권장 사항이 필요합니다. 공구에 $ 100를 떨어 뜨릴 준비를했습니다.
MrCranky

-1 답변뿐만 아니라 의견과 답변이 혼합되어 있습니다.
bot47

2

Buscar의 답변을 처리하면서 꽤 무거운 명령 줄 foo를 사용하여 자동 으로이 작업을 수행 할 수 있습니다.

sudo find / -type f -print0  | xargs -0 -I{} dd if='{}' of=/dev/null bs=1m 2>&1 | grep 'error' >>badfiles.txt  & 
  • sudo : 관리자 모드
  • -print0 찾기 : 절대 경로
  • xargs -0 -I {} : 다음 명령에서 대체 {}
  • dd 2> & 1 : std 오류를 stdout으로 리디렉션
  • 문자열 오류를 찾고 grep에 파이프 stdout
  • 결과를 목록 파일에 추가하십시오 ( 참고 : 내부 드라이브가 iffy라고 생각되면 외부 매체에 있어야합니다)

1

당신이 말했듯이, 파일이 손상되었다는 것은 확실하지 않습니다. 적어도 Mac은 그렇게 생각하지 않습니다.

모든 OS는 해당 작업에 필요한 움직일 수없는 파일을 만듭니다 (포인트 복원, 현재 활성 파일 등). 일부 조각 모음은 표시되지만 일부 조각은 표시되지 않습니다.

액세스하거나 이동할 수 없다고해서 손상되었다는 의미는 아닙니다.

일반적으로 Mac은 스스로 관리하는 데 매우 능숙합니다.

Apple 유지 보수 사용은 다음을 수행하여 수행됩니다. 터미널을 열고 다음을 입력하십시오.

sudo periodic daily weekly monthly 

Return 키를 누른 후 관리자 암호를 입력하면 OS X이 자동으로 처리합니다.

관심이 있으시면 콘솔에서 보고서를 확인하십시오.

콘솔에서 디스크가 문제를 일으키기 시작했음을 나타내는 I / O 오류를 검색 (검색)하고 디스크 유틸리티와 fsck 결과를 보완하십시오.

때로는 추가 유지 관리 작업을 위해 OnyX 라는 무료 도구를 사용합니다 . 프랑스어로 만들어졌으며 음식으로 먹을 때 훌륭합니다 :)

OnyX는 시동 디스크 및 시스템 파일 구조를 확인하고 기타 시스템 유지 관리 작업을 실행하고 Finder, Dock, QuickTime, Safari, Mail, iTunes의 숨겨진 매개 변수를 구성 할 수있는 OS X 용 다기능 유틸리티입니다. , 로그인 창, Spotlight 및 많은 Apple 응용 프로그램, 캐시 삭제, 번거로울 수있는 특정 수의 파일 및 폴더 제거 등.

이 모든 것을 말하면서, 나는 조각 모음 (iDefrag)을 사용하기로 한 결정에 의문을 제기하지 않고 대안 솔루션을 제공합니다.


조각 모음 사용은 문제가되지 않습니다. OS X가 무엇을하고 있고 그런 점에서하지 않는지 완벽하게 알고 있습니다. 파일은 확실히 사용되지 않았으며, 활성화되지 않은 응용 프로그램의 데이터 파일이므로 실제로 응용 프로그램을 이동할 수 없습니다.
MrCranky

Onyx에서 – 디스크 유틸리티보다 더 많은 작업을 수행합니다. 디스크의 SMART 상태를 확인한 다음 fsck 스타일 진단을 실행합니다 (우리는 아무 문제가 없다고 생각합니다)
MrCranky

분명히이 대답을 읽는 다른 사람에게는 파일이 가장 손상 되었으며 Mac 파일 을 읽을 수 없기 때문에 파일을 복사하지 못했음을 알았습니다. 시스템 파일이거나 당시에 사용 중이 아니기 때문에 사용자 데이터 파일에서도 마찬가지였습니다. 정기적 인 유지 fsck관리는 파일 시스템 문제 만 다루고 접근성 문제는 차단 하지 않으므로 문제를 해결하는 데 도움이되지 않았습니다 . 이 손상된 파일 중 하나에서 데이터를 수동으로 복사 / 읽어 보려고 시도했을 때만 콘솔에 오류가 표시되었으므로 해당 파일을 찾는 데 도움이되지 않았습니다.
MrCranky

0

들리는 것처럼 비합리적인 일을하기 전에 모든 데이터를 알려진 양호한 드라이브에 복제해야합니다. 설치 프로그램에서 부팅하고 데이터를 복사하는 데 실패하면 'dd'라는 명령 줄 유틸리티가 있습니다.이 유틸리티는 낮은 수준의 복제와 훨씬 더 타협하지 않는 방식으로 수행 할 수 있습니다.

 man dd

사용 및 적절한 구문을 포함하여 dd에 대한 자세한 정보


Matt의 게시물에 대한 또 다른 투표, 단일 사용자 모드 부팅 및 실행

 fsck -fy 

fsck가 오류보고를 중지 할 때까지 계속 반복하십시오.


Adam의 게시물에 대한 투표 인 DiskWarrior는 사용하기 간단하지만 매우 강력한 응용 프로그램으로 HDD 오류를보고하고 개별 파일에 오류가 있는지 검사하고 가능한 경우 복구하며 디렉토리 구조를 재구성 및 최적화합니다.


불합리하게 들릴 수도 있지만 성공에 대한 많은 증거가있는 데이터를 복구하려는 마지막 도랑 시도 일 수도있는 또 다른 해결책은 드라이브를 당기고 냉동실 백의 몇 층을 사용하여 습기로부터 보호하고 냉동실에 보관하는 것입니다. 30-45 분 그런 다음 드라이브가 차가워지면 외부 USB 도크에 드라이브를 마운트하고 다른 임시 시스템을 사용하여 손상된 데이터를 다른 드라이브로 다시 복사하십시오. 일반적으로 하드웨어 문제가 있고 드라이브에 장애가있는 경우에 사용됩니다. 데이터를 그대로 유지하면서 전체 드라이브를 복제 할 수있는 경우, 재 파티셔닝 및 재 포맷으로 인해 드라이브에 새로운 수명이 생길 수 있으므로 이상적입니다.


내가 말했듯이 fsck는 오류를보고하지 않습니다. 디스크는 아직 일시적이거나 무작위 오류를보고하지 않으며 손상된 파일 목록이 늘어나지 않는 것 같습니다. 따라서 '마지막 비상 풀을위한 정지'단계가 아직 끝나지 않았다고 생각합니다. 또한 파일 / 폴더 수준에서 이미 잘 백업되어 있으며 질문에서 말했듯이 데이터 손실에 대해 걱정하지 않습니다. DiskWarrior에 대한 또 다른 투표를 듣는 것이 좋습니다.
MrCranky

@ MrCranky : 질문을 업데이트하기 전에 게시 된 것을 참조한다고 생각합니다. 이 페이지에서 비슷한 증상에 대한 해결책을 찾는 사람들을 위해 fsck 아이디어를 강화하고있었습니다. HDD 고장에 대해 게시 한 내용과 관련하여 다른 사람들을 위해 포괄적 인 것이 아니며 결코 개인적으로는 아닙니다. 하드 드라이브 오류에 대한 공정한 점유율을 보았습니다. SMART 기술을 사용해도 더 이상 데이터에 더 이상 액세스 할 수 없을 때까지 실패 표시가없는 경우가 종종 있습니다. 데이터에 관심이 있다면 새 드라이브를 구입하고 데이터를 백업하는 것이 좋습니다.
chillin

필자는 백업 권장 사항에 동의하지 않지만 Q & A 형식의 정신은 일반적인 "손상된 디스크를 어떻게 수정합니까?"라는 질문이 아니라 제기 된 질문에 대답하는 것입니다. fsck"디스크가 양호하다고 생각하는 것"목록에 추가 하기 위해 편집하기 전에 fsck유용성을 할인 한 답변을 언급 했습니다. fsck디스크 유틸리티는 거의 동일한 기능을 수행하며, 이는 블록 레벨이 아닌 파일 시스템 구조에서 작동합니다. 나는 이것이 파일 시스템 문제가 아니라 블록 문제라는 것을 구체적으로하려고 노력했다.
MrCranky

0

디스크 읽기 오류로 인해 전체를 읽을 수없는 단일 파일의 경우 dd유틸리티를 사용 하여 파일을 외부 볼륨에 복제하여 읽을 수없는 블록을 NUL 바이트로 대체 할 수 있습니다. 다른 볼륨 (예 : 아래 예의 "USB 디스크")에 복제하는 것이 좋습니다.

예:

dd if=/path/to/damaged/file of=/Volumes/USB\ Disk/file bs=512 conv=noerror,sync

512 바이트 블록을 사용하면 읽을 수있는 최대 블록 수가 복구됩니다.

커널이 실패한 각 읽기에서 일정 시간 동안 차단하므로 복구 시간이 오래 걸릴 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.