할당되지 않은 파티션없이 USB 드라이브 이미지 생성


13

내 시스템에 다음과 같은 8GB USB 드라이브가 연결되어 있습니다.

[root@host]# fdisk -l /dev/sdb

Disk /dev/sdb: 8462 MB, 8462008320 bytes
255 heads, 63 sectors/track, 1028 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5c0894d9

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1           9       72261    e  W95 FAT16 (LBA)
/dev/sdb2              10         103      755055   83  Linux
[root@host]# 

따라서 기본적으로 FAT 파티션은 약 70MB, ext2 파티션은 약 740MB이며 나머지 공간 (~ 7GB)은 할당되지 않습니다. 이제 다음을 통해 USB 하드 드라이브를 추가했습니다.

dd if=/dev/sdb of=myimage.img bs=1M

출력 파일 (myimage.img)은 약 8GB이며 이는 dd의 정상적인 작동입니다.

질문 : 내가 찾고있는 것은 할당되지 않은 공간없이 USB 하드 드라이브를 직접 복제하여 결과 파일이 8GB 대신 압축되지 않은 약 1GB가되도록하는 방법 입니다. 내가 묻는 이유는 출력 파일 (myimage.img)이 시뮬레이터 프로그램에서 이미지를 부팅하는 데 사용되기 때문입니다. 시뮬레이터는 8GB 파일을 처리 할 수 ​​있지만 디스크 공간을 낭비하고 싶지 않습니다.


1
이것은 흥미로운 해결책과 다소 비슷한 문제입니다. serverfault.com/q/281628/141604

답변:


15

올바르게 이해하면 디스크 시작에서 마지막 파티션 끝까지 이미지를 만들고 싶습니다.

이를위한 매개 변수 ddcount=입니다. 마지막 파티션은 103에서 끝나고 카운트는 1 여분 (104)이 필요하고 단위 크기는 8225280 바이트입니다 ( fdisk -l출력 에 따라 ). 따라서 다음과 같이 명령을 간단히 수정할 수 있습니다.

dd if=/dev/sdb of=myimage.img bs=8225280 count=104

그러나 fdisk -u -l /dev/sdb대신 달리기 를 제안합니다 . 실린더는이 시대에 더 이상 관련이 없기 때문에 반올림 오류를 피하기 위해 섹터 수를 보면 더 좋습니다. 그런 다음 다음을 실행해야합니다.

dd if=/dev/sdb of=myimage.img count=...

여기서 count는 fdisk -u -l마지막 파티션의 끝에서 얻은 숫자에 104를 사용한 것이 아니라 1을 더한 값 으로 설정됩니다. 기본 블록 크기 dd는 512 바이트이며 이는 fdisk -u -l출력에 사용될 단위입니다 .

GPT 파티션의 백업 파티션 테이블은 디스크 끝에 저장되어 있지만 GPT를 사용하지 않으므로 괜찮습니다.


2

dd에게 관심있는 드라이브의 일부만 읽도록 지시하면됩니다. 찾고자하는 매개 변수는 count입니다.

따라서 실린더 크기는 8,225,280이며 103을 사용하는 실린더 수에 곱하면 847,203,840 바이트가됩니다. 1MB 블록 크기를 사용하고 있으므로 해당 바이트를 808 바이트로 변환하십시오.

그래서 당신의 명령은 dd if=... of=... bs=1M count=808

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.