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.

관련 정보