dd: 동일한 디스크에 백업을 복원할 때 "남은 공간이 없습니다"

dd: 동일한 디스크에 백업을 복원할 때 "남은 공간이 없습니다"

얼마 전에 다음 명령을 사용하여 전체 디스크를 백업했습니다.

dd if=/dev/nvme0n1 conv=sync,noerror bs=64K | gzip -c > backup.img.gz

오늘은 다음 명령을 사용하여 이 백업을 동일한 디스크에 복원했습니다.

gunzip -c backup.img.gz | dd of=/dev/nvme0n1

dd다음 오류 메시지와 함께 종료됩니다.

dd: writing to '/dev/nvme0n1': No space left on device
1000215217+0 records in
1000215216+0 records out
512110190592 bytes (512 GB, 477 GiB) copied, 5769.06 s, 88.8 MB/s

복구 프로세스가 실패했다고 가정해야 합니까? 그렇다면 디스크를 어떻게 복구합니까?

백업도 있고 fdisk -l /dev/nvme0n1이제 복원 작업 후 출력이 fdisk -l이전과 동일하지만 이것이 성공을 보장하는지 모르겠습니다.

답변1

가능합니다 dd conv=sync,noerror(또는 dd conv=noerror,sync)경우에 따라 데이터가 손상될 수 있음.

그러나 귀하의 경우에는 파일 끝에 추가 0이 있을 수 있습니다. 장치가 64K의 정확한 배수가 아닌 경우 명령은 dd이미지 파일의 마지막 64K 블록을 0으로 채웁니다. 그리고 그 여분의 0은 복구할 수 없습니다. 이것은 무해합니다.

이 이론을 테스트하려면 다음 명령을 실행할 수 있습니다.

# blockdev --getsize64 /dev/nvme0n1
expected result: 512110190592
# gunzip < backup.img.gz | wc --bytes
expected result: 512110231552 (next multiple of 64K)

이것이 맞다면 아마도 괜찮을 것입니다.

답변2

dd압축된 스트림에 쓰면 데이터가 손실될 수 있는 경우를 본 적이 있습니다 . 이 시도

zcat backup.img.gz >/dev/nvme0n1

또는 사용해야 하는 경우 dd대신 이 파이프를 사용하세요.

gunzip -c backup.img.gz | dd iflag=fullblock bs=64K of=/dev/nvme0n1

두 가지 모두 실패하면 교체 디스크가 원래 디스크보다 작다고 말할 수 있습니다.

관련 정보