여유 공간이 없는 디스크 이미지

여유 공간이 없는 디스크 이미지

16GB SD 카드용 부팅 가능한 이미지가 있습니다. 다음을 사용하여 이미지를 만들었습니다.

cat /dev/sdd | gzip >sdcard.img.gz

나는 행복하다 왜냐하면

$ du -h sdcard.img.gz
482M    sdcard.img.gz

16GB 대신 482MB, 예!

(압축되지 않은) 이미지의 세부정보는 다음과 같습니다.

$ du -h sdcard.img
15G     sdcard.img
$ partx -s sdcard.img
NR START     END SECTORS SIZE NAME UUID
 1 16384   81919   65536  32M      6e1be81b-01
 2 81920 3588095 3506176 1.7G      6e1be81b-02

하지만 이제 이 이미지를 SD 카드에 다시 써야 하는데 14GB의 후행 0/가비지를 쓰고 싶지 않습니다! 시간이 오래 걸립니다.

  1. 마지막 파티션 이후의 콘텐츠를 복사하지 않고 이미지를 만드는 방법은 무엇입니까?
  2. 전체 SD 카드의 이미지를 생성한 경우 쓸모없는 정크 파일이 포함되지 않도록 이미지를 자르려면 어떻게 해야 합니까?

요점은 백업된 이미지의 크기는 상관없지만 SD카드로 다시 전송되는 크기가 신경쓰이는 이유는 SD카드에 복사하는 속도도 느리고 쓸데없는 14GB를 복사해도 소용이 없기 때문입니다. 데이터.따라서 디스크 이미지를 압축하거나의식이 희박하다인터넷의 다른 답변에서 알 수 있듯이 파일 시스템은 내가 찾고 있는 것이 아닙니다.

답변1

첫 번째 질문에 대답하려면: 거기에 MBR이 있다고 가정하고 "원시 드라이브의 첫 번째 메가바이트(부트 레코드 및 부트로더 포함)"와 같은 작업을 수행한 다음 dd해당 포함된 파티션을 반복하는 것이 좋습니다. 첫 번째 메가바이트를 대상 드라이브를 사용하거나 dev=/dev/sda fdisk -l "$dev" | sed -ne '/^\//s,\(^[^ ]*\) .*,\1,p' | while read part do dd "if=$part" "of=$(basename "$part")" done 커널에 파티션 테이블을 읽도록 요청하세요. 그런 다음 해당 이미지 콘텐츠를 새 파티션에 추가할 수 있어야 합니다.partprobekpartxdd

답변2

마지막 파티션의 끝에 씁니다(이 예에서는 총 2G(기가바이트)와 같이 조금 더 많음).

dd이런 목적 으로 사용할 수 있습니다 .확인하고 또 확인하세요Enter 키를 누르기 전에 올바른 SD 카드(다른 드라이브가 아님)에 쓰게 됩니다. 왜냐하면 Enter 키를 누르면 dd질문 없이 지시한 대로 수행되기 때문입니다.

이 명령줄은 압축되지 않은 이미지 파일에 작동합니다.

$ sudo dd if=sdcard.img of=/dev/sdx bs=1M count=2K

여기서 x는 드라이브 문자입니다.

하지만 이 경우에는 압축된 이미지 파일이 있습니다. 다음과 같이 실행하려면 root(예: via sudo -s) 해당 명령줄을 다음과 같이 zcat압축 파일에서 추출 할 수 있습니다 gzip.

# < sdcard.img.gz zcat | dd of=/dev/sdx bs=4096 count=524288
524288+0 records in
524288+0 records out
2147483648 bytes (2,1 GB, 2,0 GiB) copied, 56,6886 s, 37,9 MB/s

관련 정보