dd를 사용하여 Linux 이미지 복제

dd를 사용하여 Linux 이미지 복제

dd 유틸리티를 사용하여 Linux 이미지를 복제하려는 경우 dd if=/dev/SDX of=/dev/SDYSDX는 Linux 이미지가 저장되는 내부 저장 장치이고 SDY는 복사할 외부 저장 장치입니다.

그러나 다른 저장 장치에 복제하지 않고 동일한 내부 저장 장치를 사용하지 않고 이 작업을 수행하면(예: dd if=/dev/SDX of=/home/my_dir/my_image.img) 실제 이미지가 있는 동일한 내부 저장 장치에 이미지 파일이 생성됩니다. 이것은 나에게 잘 작동하는 것 같습니다. 그러나 얼마나 잘 작동합니까? /home/my_dir/내부에/dev/SDX어느 것을 복제하고 있나요?

답변1

실제로 이~인 것 같다일이 잘 진행됩니다 - "보이는 것"에 중점을 둡니다.

설명을 단순화하기 위해 로깅이 없는 오래된 파일 시스템(예: ext2)을 가정합니다. 이 파일은
dd가 시작될 때 my_image.img생성됩니다 . 파일의 존재에 대한 정보와어디그것물리적디스크에 상주하며 파일 시스템의 인덱스에 저장됩니다("디렉토리"라고 생각함). 파일의 최종 크기는 알 수 없으므로 가장 작은 기본 크기를 차지합니다(이는 일반적으로 사용자 응용 프로그램에 공개되지 않습니다).
데이터가 파일에 기록되면 데이터가 늘어나고 인덱스가 주기적으로 업데이트됩니다. 그러나 인덱스는 디스크에도 상주합니다. dd가 인덱스를 복사하면 복사본의 인덱스는 더 이상 업데이트되지 않습니다. 실제로 그 사본을 사용하려고 하면 불완전하다는 것을 알게 될 것입니다.

물론, 이 모든 것은 학술적인 것입니다. 왜냐하면 dd는 (일종의 압축을 사용하지 않는 한) 그 안에 완전한 이미지 파일을 넣을 수 없기 때문입니다.

다음과 같은 명령을 사용하여 직접 시도해 볼 수 있습니다.

dd if=/dev/zero of=demo.raw bs=1M count=256 # create a dummy "partition" for demonstration
mkfs.ext4 demo.raw # create ext4 filesystem
target=$(mktemp -d) # create a temporary mountpoint
sudo mount demo.raw $target # mount the filesystem
sudo chown $USER $target # make filesystem root writable for current user
dd if=demo.raw of=$target/inner.raw bs=1M # copy fileystem into itself – error as expected (no space left on device)
rm $target/inner.raw
dd if=demo.raw bs=1M | gzip -c > $target/inner.raw.gz # copy fileystem into itself, using compression
gzip -c $target/inner.raw.gz > inner.raw # decompress image
sudo mount inner.raw /mnt # mount inner copy – error as expected (copy is an incomplete file)
sudo umount $target
rm demo.raw inner.raw

답변2

이것은 작동하지 않습니다. 8G RAW 이미지를 6G의 여유 공간이 있는 동일한 파일 시스템에 넣을 수 없습니다. 가능한 설명: /dev/SDX에 읽기 오류(불량 섹터 등)가 있고 디스크 끝에 도달하기 전에 dd가 중지되어 출력 이미지가 디스크보다 작아집니다(그래서 맞습니다). dd를 다시 시도하세요.

# dd if=/dev/SDX oflag=direct conv=noerror,notrunc of=/path/image.img

그리고 디스크 크기를 확인하세요.

# df -h

결과 이미지의 크기는 다음과 같습니다.

# ls -lh /path/image.img

관련 정보