
1TB(931.5G) 하드 드라이브가 있습니다. 나는 그랬다:
sudo sh -c 'cat /dev/sdf >disk_1t.img'
하지만 멈췄어읽기 오류908G.
내 생각에 다음 단계(첫 번째 단계여야 함)는 gnu 를 사용하는 것입니다 ddrescue
. 문제는 내가 없다는 거야지도 파일. 질문:
ㅏ)기존 이미지가 손상될 위험이 있나요 --generate-mode
?
ddrescue -n --generate-mode /dev/sdf disk_1t.img disk_1t.map
추측 -n
옵션은 첫 번째 실행에 가장 적합합니다. 휴가가 있으시면 말씀해주세요.
제가 올바르게 이해했다면 908G부터 읽기 시작하나요?
전체 디스크를 다시 읽기 시작하는 것을 원하지 않습니다.
둘)마지막 바이트가 손상된 경우 907.5G에서 읽도록 시도하는 것이 의미가 있습니까? cat
어쨌든 나쁜 데이터가 기록됩니까? 가능하다면 문제의 원인이 될 수 있는 2G를 건너뛰고 910G부터 읽기 시작하는 것이 좋을까요? 그런 다음 나중에 실행할 때 908-910을 수행하십시오.
씨)나머지 23.1G를 읽거나/시도하거나/소진한 후 첫 번째 908G를 확인할 수 있는 방법이 있나요?
기존 이미지의 꼬리는 다음과 같습니다(있는 경우).
$ tail -c 512 disk_1tb.img | xxd
00000000: b481 e803 8733 0000 5801 b454 6e3a 9e51 .....3..X..Tn:.Q
00000010: 4cc8 4851 0000 0000 e803 0100 2000 0000 L.HQ........ ...
00000020: 0000 0000 0000 0000 9314 260b 9414 260b ..........&...&.
00000030: 9514 260b 9614 260b 0000 0000 0000 0000 ..&...&.........
00000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000060: 0000 0000 817a 168b 0000 0000 0000 0000 .....z..........
00000070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000080: 1c00 0000 0000 0000 0000 0000 c8e9 3caa ..............<.
00000090: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000100: b481 e803 b650 0000 7300 b454 6e3a 9e51 .....P..s..Tn:.Q
00000110: 879d c950 0000 0000 e803 0100 3000 0000 ...P........0...
00000120: 0000 0000 0000 0000 9714 260b 9915 260b ..........&...&.
00000130: 9a15 260b 9b15 260b 9c15 260b 9d15 260b ..&...&...&...&.
00000140: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000150: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000160: 0000 0000 827a 168b 0000 0000 0000 0000 .....z..........
00000170: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000180: 1c00 0000 0000 0000 0000 0000 f0cc 5056 ..............PV
00000190: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
답변1
귀하의 경우 실제로 매핑 파일을 생성할 필요가 없습니다. 오프셋을 정확히 알고 있으므로 입력 위치로 전달할 수 있습니다. (의심스러운 경우 입력 위치를 조금 더 작게 설정하십시오. 더 크게 설정하면 간격이 남습니다. ddrescue
그렇지 않음으로 처리하므로 단위를 올바르게 지정해야합니다 . ).G
GB
GiB
ddrescue --min-read-rate=1MiB \
--input-position=900GiB \
/dev/sdx sdx.img sdx.map
지도 파일은 다음과 같은 결과를 생성합니다.
# pos size status
0x00000000 0xE100000000 ?
0-900GiB 영역을 표시하는 것은 무엇입니까? 나중에 생각해 보세요. --input-position
주변 매개변수를 계속 사용하는 한 ddrescue
해당 영역은 단순히 무시되고 나머지 부분만 처리됩니다.
이전 섹션이 완전히 복사되었다고 확신하는 경우 이 작업을 수행할 수 있습니다. 오류를 무시하거나 오프셋을 변경하여 데이터 손상을 일으킬 수 있는 멋진 작업을 수행하지 않는 한(예: dd conv=noerror,sync
.
마음이 바뀌어 첫 번째 900GiB를 다시 읽으려면 이 --input-position
매개변수를 제거하면 됩니다.
기존 이미지가 손상될 위험이 있나요
--generate-mode
?
일반적으로 말해서, ddrescue
잘못된 일을 하려면 노력이 필요합니다. ddrescue
이미지 파일은 잘못된 소스 장치를 사용하거나(잘못된 데이터를 복사하여 손상됨) 잘못된 오프셋을 사용하도록 만든 경우(올바른 위치에 올바른 데이터를 복사하여 손상됨)에만 손상됩니다. 이미지 파일에 데이터 패턴을 작성하는 --output-position
좀 더 색다른 방법이 있지만 --fill-mode
실제로 사용하려면 많은 노력을 기울여야 합니다.
제가 올바르게 이해했다면 908G부터 읽기 시작하나요?
생성 모드에서는 ddrescue
이미지 파일이 어떻게 생성되었는지(ddrescue를 통해, dd를 통해, 다른 수단을 통해) 알 수 없으므로 이전에 바이너리 0 영역을 건너뛰었을 수 있다고 가정합니다. 따라서 디스크에 데이터가 모두 0인 영역이 있는 경우 해당 영역을 다시 읽고 0이 아닌 데이터가 있는 영역만 건너뛰려고 할 수 있습니다.
이론적으로는 데이터가 포함된 모든 부분을 다시 읽지 않으면 시간이 절약되지만, 지도를 생성하려면 결국 이미지 파일의 모든 데이터를 읽어야 하므로 실제로는 소스 드라이브가 있는 경우 다시 시작하는 것보다 더 빠릅니다. 가 더 빠르다. 느립니다(손상으로 인해).
요점 --generate-mode
은 시간을 절약하는 것이 아니라(생성하는 데 시간이 걸립니다) 실패한 소스 드라이브의 과도한 작업을 방지하고 이전에 어떤 데이터 세그먼트가 복사되었는지 확실하지 않을 때 복구를 용이하게 하는 것입니다.
마지막 바이트가 손상된 경우 907.5G에서 읽도록 시도하는 것이 의미가 있습니까?
귀하의 경우에는 전혀 필요하지 않습니다. 기술적으로는 이전에 복사한 개별 섹터를 다시 읽는 대신 중단한 부분부터 계속할 수 있습니다. 하지만 (당신처럼) 오류를 무시하지 않는 한 dd conv=noerror,sync
기존 이미지에는 손상이 없어야 합니다 cat
.
나머지 23.1G를 읽거나/시도하거나/소진한 후 첫 번째 908G를 확인할 수 있는 방법이 있나요?
이를 사용하여 cmp
두 파일 또는 블록 장치를 비교할 수 있습니다.
cmp /dev/sdx sdx.img
이 작업은 오프셋에서도 수행할 수 있습니다.
cmp --bytes=64M /dev/sdx sdx.img 900G 900G
그러나 데이터는 드라이브가 읽기 전용으로 액세스되는 경우에만 일치합니다. 자동 마운트된 것이 있으면 파일 시스템 메타데이터가 수정됩니다.
따라서 이론상으로는 cmp
1세대 908G와 차이를 느낄 수 없어야 하지만 실제로는 비활성화하기 어려운 다양한 자동 기능이 많은 배포판에 제공되기 때문에 실제로는 이런 일이 항상 발생합니다.