dd 충돌 - 어떻게 해야 할까요?

dd 충돌 - 어떻게 해야 할까요?

dd몇 시간을 달리고 나면 충돌이 발생합니다 . 일반적으로 다음과 같은 메시지가 표시됩니다.

Input/output error
68424+1 records in
68424+1 records out
342124883968 bytes (342 GB) copied, 5114.68 s, 66.9 MB/s

제가 할 수 있는 일이 있나요? 출력을 사용할 수 있는 방법이 있나요? 아니면 중단된 부분부터 다시 시작하시겠습니까?

백업 중인 파티션이 사용되고 있기 때문이라고 생각할 이유가 있습니까?

항상 70-80% 정도에서 충돌이 발생하는데, 종종 파티션을 덜 사용해야 할 때 발생합니다.

이 과정이 너무 오래 걸리기 때문에 다양한 시도를 하기가 어렵습니다.

이미지로 출력하겠습니다. 파티션을 사용할 수도 있지만 LVM이 관련되어 있습니다.

sudo lvmdiskscan
/dev/centos/swap [       3.89 GiB] 
/dev/sda1        [     500.00 MiB] 
/dev/centos/root [      50.00 GiB] 
/dev/sda2        [     465.27 GiB] LVM physical volume
/dev/centos/home [     411.38 GiB] 
/dev/sdb1        [     931.51 GiB] 
3 disks
2 partitions
0 LVM physical volume whole disks
1 LVM physical volume


dd conv=sync,noerror if=/dev/centos/home bs=2000000   of=/run/media/ob/X_1T_Media1GHD-PCTU3/c/sd9e22_cel.image
dd: error reading '/dev/centos/home': Input/output error
171062+1 records in
171063+0 records out
342126000000 bytes (342 GB) copied, 4625.3 s, 74.0 MB/s
220856+2 records in
220858+0 records out
441716000000 bytes (442 GB) copied, 6138.1 s, 72.0 MB/s

금요일 아침 ddrescue --sector-size=2048 --cluster-size=$((256*512)) --sparse --verbose /dev/centos/home /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd7c_dd.image /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd7c_dd.map

GNU ddrescue 1.18.1 About to copy 441714 MBytes from /dev/centos/home to /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd7c_dd.image Starting positions: infile = 0 B, outfile = 0 B Copy block size: 131072 sectors Initial skip size: 32 sectors Sector size: 2048 Bytes

Press Ctrl-C to interrupt rescued: 441714 MB, errsize: 8192 B, current rate: 0 B/s ipos: 342124 MB, errors: 1, average rate: 60675 kB/s opos: 342124 MB, run time: 2.02 h, successful read: 9 s ago Finished

하지만 extundelete sd7c_dd.image --restore-directory /home/ob/p -o /tmp/tt extundelete: Bad magic number in super-block when trying to open filesystem sd7c_dd.image

/dev/mapper/centos-home on /home type xfs (rw,relatime,attr2,inode64,noquota) 

답변1

마운트된 파일 시스템에서는 실행하면 안 됩니다 dd. 특히 이미지가 손상될 수 있기 때문입니다. 백업을 하고 싶다면. 대신 사용하고 싶을 수도 있습니다 tar.

해당 장치가 확실하다면~ 아니다seek실패하면 (출력 파일에서 N 블록을 찾는 경우) 및 skip=N(입력의 N 블록을 건너뛰는 경우) 플래그를 사용할 수 있습니다 . Linux 시스템에서는 이 dmesg명령을 사용하여 현재 커널 로그를 가져올 수 있습니다.

복사하려는 장치에 오류가 있는지 확실하지 않은 경우 을 사용하여 ddrescue장치 이미지를 가져오는 것이 좋습니다. 해당 도구는 읽기 오류 시 중단되지 않으며 제대로 읽지 못한 블록의 위치를 ​​기록합니다.

답변2

사용 중인 파티션의 이미지 복사를 시도하는 경우 심각한 추락에 대비하게 됩니다. 이와 같이 파티션을 복사하려면 아무 것도 쓰지 않아야 합니다. 조금도.

ddrescue파티션을 정지할 수 있는 경우 결함이 있는 섹터가 있는 디스크와 파티션을 읽도록 설계된 를 사용할 수 있습니다 . /dev/sda1이미지 파일로 추출하기 위한 일반적인 호출은 /media/sda1.img다음과 같습니다.

ddrescue --sector-size=2048 --cluster-size=$((64*512)) --sparse --verbose /dev/sda1 /media/sda1.img /media/sda1.map

ddrescue64MB 단위를 읽기 위해 설정된 섹터 및 클러스터 크기입니다 . 이를 128MB 또는 256MB로 늘리려고 할 수도 있지만 이것이 반드시 처리량을 증가시키는 것은 아닙니다.

특별한 경우 소스 파티션은 실제로 LVM 볼륨이므로 이는 큰 도움이 됩니다. 백업할 파티션의 스냅샷을 만들 수 있습니다. 이 예에서는 그것을 이라고 불렀습니다 home-snap.

lvcreate --snapshot --name home-snap --size 1G /dev/centos/home
ddrescue --sector-size=2048 --cluster-size=$((64*512)) --sparse --verbose /dev/centos/home-snap /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd9e22_cel.image /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd9e22_cel.map
lvremove -y /dev/centos/home-snap

답변3

장치가 복사한 342GB보다 큰 경우 이 디스크에 불량 섹터가 있을 가능성이 높습니다.

재개하려면 seek및 동일한 값을 사용하면 됩니다 .skip

dd <your previous options here ...> seek=68424 skip=68424 conv=notrunc

68424동일한 I/O 오류가 다시 발생할 가능성이 높으므로 이를 늘려야 합니다. 어떤 블록 크기를 사용했는지 말하지 않았으며(그리고 수학을 하기에는 너무 게으르다), 더 작은 오류 영역을 건너뛰려면 더 작은 블록 크기를 선호할 수 있습니다(그러면 그에 따라 적응해야 합니다 seek) skip.

사용하지 마세요 conv=noerror.그것은 사물을 부패시킨다. 더 많은 오류가 발생하면 ddrescue읽기 오류를 더 잘 처리하는 도구인 를 사용하세요 dd.

관련 정보