![dd 충돌 - 어떻게 해야 할까요?](https://rvso.com/image/89177/dd%20%EC%B6%A9%EB%8F%8C%20-%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A0%EA%B9%8C%EC%9A%94%3F.png)
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
ddrescue
64MB 단위를 읽기 위해 설정된 섹터 및 클러스터 크기입니다 . 이를 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
.