여기 파티션에 일부 I/O 오류가 있습니다. 방금 복사할 수 있는 것을 다른 드라이브에 복사했지만 이제 I/O 오류로 인해 읽을 수 없는 파일을 알고 다른 소스에서 정확한 파일을 복원할 수 있습니다.
Bash에서 이 오류가 있는 파일을 디스크에서 어떻게 검색할 수 있나요?
편집하다
파일 시스템은 NTFS이고 현재 cp를 사용하여 파일을 zfs 디스크에 복사하고 있지만 중요하지 않습니다. 300GB가 넘고 가끔 I/O 오류가 발생하고 개별 파일을 건너뛰는 바람에 하루가 넘게 걸렸습니다.
이러한 파일은 DAW 구성 요소의 일부이며 개별 MIDI 파일이나 WAV 샘플로 읽을 수 없습니다. 성공적으로 통과한 프로젝트 파일에 대해서는 다른 백업에서 특정 샘플 패키지를 다시 설치하고 싶지만, 정말 양이 많기 때문에 전부 다시 설치하거나 누락되거나 손상되었을 수 있는 모든 프로젝트 파일 및 하위 폴더를 테스트하고 싶지는 않습니다. 파일을 저장하고 하루 이상을 낭비했습니다. 따라서 I/O 오류가 있는 파일의 경로를 알면 손상된 패키지 몇 개를 다시 설치하는 것만으로도 시간을 절약할 수 있습니다.
답변1
이는 파티션의 파일 시스템 유형에 따라 다릅니다. ext2/ext3 및 ReiserFS의 경우 다음에서 도움말을 찾을 수 있습니다.smartmontools의 불량 블록 HOWTO.
기본적으로 당신이 하는 일은 다음과 같습니다:
- 하드 드라이브 자체 테스트를 시작하면
smartctl
소요 시간이 표시됩니다. - 셀프 테스트가 완료된 후 셀프 테스트 결과를 확인하고 첫 번째 불량 블록을 식별합니다. 불량 블록이 없으면 작업이 완료된 것입니다.
- 불량 블록의 파티션과 파티션 내 오프셋을 결정합니다.
debugfs
오프셋이 파일 내부에 있는지 여부와 그렇다면 어떤 파일인지 확인하는 데 사용됩니다 .- 불량 블록에 무엇이든 쓰기를 사용하십시오
dd
. 하드 드라이브는 불량 블록을 예비 블록으로 교체합니다. - 1. 재부팅하여 다음 불량 블록을 가져옵니다.
위의 HOWTO에서 자세한 내용을 확인할 수 있습니다.
답변2
질문 제목부터 시작해 보겠습니다.
하드 드라이브의 I/O 오류 찾기
이 말은 의미가 없습니다. 입출력 오류는 드라이브의 마모로 인해 자연스럽게 발생하거나 최악의 경우 일종의 손상으로 인해 발생합니다. 오해하지 마세요. 다음과 같이 할 수 있습니다.
불량 섹터를 찾아 0으로 채웁니다.
이제 원래 질문은 다음과 같습니다.
이 오류가 있는 파일을 디스크에서 검색하는 방법세게 때리다?
깨지기가 더 어렵습니다. 쉘 스크립트( bash
) 솔루션이 필요합니까? 그렇다면 이유를 설명해 주실 수 있나요?
질문의 핵심을 살펴보겠습니다(아마도):
하드 드라이브가 특정 섹터를 읽을 수 없습니다.
옳은? 왜냐하면 만약 그렇다면 당신은실제로는 할 수 없습니다cp
이 작업 에 사용됩니다 .
당신은 무엇을 할 수 있나요?
GNU 시작하기
ddrescue
사명(그것은Ubuntu 패키지 이름은 다음과 같습니다.gddrescue
, 하나 있어요g
! ).
어떻게 했는지, 순수한 예로서, 내 말을 왜곡하지 마세요. 그 후 다음과 같습니다.
ddrescue -d -f -r3 /dev/disk/by-partuuid/xxxxxxxxxxxx /path/where/to/store/image/of/the/partition /path/to/log/file/of/this/rescue
물론 을 사용해도 되지만 /dev/sdx1
여러 개의 디스크를 연결하면 재부팅 시 문제가 발생하므로 그냥 blkid /dev/sdx1
아무거나 사용하세요.
어떤 파일이 완전한지 확인할 수 없습니다. 유감스럽게도 실제로 파일을 열고 파일에 포함된 내용을 보거나 듣는 것 외에는 다른 방법이 없습니다.
오프셋 없이 이미지를 직접 마운트할 수 있습니다. 제가 일반적으로 하는 방식이지만 단순화를 위해...
인용하다: