얼마 전에 다음 명령을 사용하여 전체 디스크를 백업했습니다.
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
두 가지 모두 실패하면 교체 디스크가 원래 디스크보다 작다고 말할 수 있습니다.