실패한 드라이브를 새 드라이브에 맹목적으로 추가

실패한 드라이브를 새 드라이브에 맹목적으로 추가

samish GB 위치에서 읽기 오류가 있는 결함이 있는 320GB 드라이브가 있지만 정확한 위치는 다양합니다. 나는 여기서는 불가능한 오류 가능성에 만족합니다.

conv=sync첫째, 내가 실제로 유용 해야 한다는 사실에 놀랐습니다 conv=noerror. 하지만 글쎄요, 새로운 발을 키울 자유 시간이 있습니다. 마지막 파티션(즉, 소스 드라이브와 동일)에 대해 합리적인 출력을 제공하지 않았기 때문에 찾았습니다 . file -s /dev/sdc*그 반대였습니다 data. 그러나 sync명령줄에 추가한 후에는 실질적인 개선이 이루어지지 않습니다. file -sFS 설명 섹션에 오류가 없는 첫 번째 파티션을 제외하고는 출력이 여전히 의미가 없으므로 file -s명령이 FS를 올바르게 감지합니다. mount -o ro두 드라이브의 복사본이 불안정한 것을 확인 하고 md5sum모든 파일을 비교했습니다(단, 디렉터리 구조 자체가 불안정했습니다).

이런 식으로 더 큰 새 드라이브에 추가하려고합니다.

dd if=/dev/sda3 conv=noerror,sync bs=1M of=/dev/sdc3 2> /part3_log
grep -oPaz '[[:digit:]]*(?=\+[[:digit:]]+ records out\n)' </part3_log >/part3_log_bads # parsing is ok for this specific case
rm /part3_log_01
for i in $(cat /part3_log_bads); do dd if=/dev/sda3 conv=noerror,sync bs=1M of=/dev/sdc3 skip=$((i-1)) seek=$((i-1)) count=1 2>>/part3_log_01; done # retrying erratic blocks. i-1 because of number of records is written after erratic block was padded and written. noerror does not make any practical difference here. 

/part3_log(예상대로) 각 불안정한 블록에 대한 출력을 얻습니다 .

dd: error reading ‘/dev/sda3’: Input/output error
71051+3 records in  <<<<<<<<< second number increments from 0 after each erratic block indicating partial read, this is expected
71054+0 records out
74505519104 bytes (75 GB) copied, 2546,96 s, 29,3 MB/s

다음 위치의 모든 청크에 대해 이상한 출력이 표시됩니다(속도 차이가 예상됨) /part3_log_01.

1048576 bytes (1,0 MB) copied, 6,5663 s, 160 kB/s
0+1 records in
0+0 records out
0 bytes (0 B) copied, 6,41877 s, 0,0 kB/s
0+1 records in
1+0 records out
1048576 bytes (1,0 MB) copied, 7,42028 s, 141 kB/s
1+0 records in
1+0 records out

내 관심을 끈 것은 거의 모든 입력 레코드가 실제로 발생했음에도 불구하고 오류가 보고되지 않고 부분적으로 읽혀졌다는 것입니다(참고자료에서 확인했습니다 dmesg). 오류가 보고되지 않았습니다 sdc(예상대로 새 드라이브입니다).

그렇다면 실패한 드라이브를 맹목적으로 복사한 다음 실패한 녹음을 다시 시도하려면 어떻게 해야 합니까? 내 접근 방식은 두 가지 점에서 실패한 것 같습니다.

  • 불안정한 블록 이후에는 이동하지 않고 데이터를 복사할 수 없습니다 conv=sync.
  • 불량 블록을 재시도할 때 오류를 보고할 수 없습니다.

추신 : 저는 그냥 그걸로 하고 싶어요 dd. ddrescue해당 ATM을 이용하세요 .

PPS 이것은 Debian 8.7.1 및 dd 8.23입니다.

답변1

ddrescue를 사용해 보세요(대부분의 배포판에서 gddrescue):

GNU ddrescue - 데이터 복구 도구. 읽기 오류가 발생하면 먼저 좋은 부분을 저장하려고 한 파일이나 블록 장치에서 다른 파일이나 블록 장치로 데이터를 복사합니다.

관련 정보