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

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를 가져와 기존 드라이브를 복제해야합니다.

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



답변

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

  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을 한 번 더 충돌시켜야합니다.

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

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


답변

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

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

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


답변

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

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


답변

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라고 생각되면 외부 매체에 있어야합니다)

답변

당신이 말했듯이, 파일이 손상되었다는 것은 확실하지 않습니다. 적어도 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)을 사용하기로 한 결정에 의문을 제기하지 않고 대안 솔루션을 제공합니다.


답변

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

 man dd

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


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

 fsck -fy

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


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


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


답변

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

예:

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

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

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