전체 디스크를 더 큰 디스크에 복제한 다음 마운트 해제하는 방법은 무엇입니까?

전체 디스크를 더 큰 디스크에 복제한 다음 마운트 해제하는 방법은 무엇입니까?

내가 한 일은 세 개의 파티션이 있는 작은 32GB 플래시 모듈을 복제하는 것이었습니다. 우연히 32GB USB가 있어서 생각했어요.가능한그것은 효과가 없었습니다. Toshiba의 32GB는 Sandisk의 32GB와 약간 다른 것 같습니다.

어쨌든 2TB 외장 드라이브를 사용하고 똑같은 일을 했습니다. 구체적으로 다음을 수행했습니다.

dd if=/dev/sdX of=/dev/sdY bs=100M

옆에마지막 블록은 부분 복사본으로 나타나나요, 아니면 EOF에 먼저 도달하면 삭제되나요?

따라서 본질적으로 전체 플래시 모듈(파티션 테이블 등)을 복제합니다. 32GB -> 2TB는 dd마지막(세 번째) 파티션의 끝을 읽은 후 유틸리티가 올바르게 중지되므로 쉽습니다 .

이제 제가 해야 할 일은 전체 Flash 이미지를 포함하는 간단한 바이너리 blob을 만드는 것뿐입니다. 이제 내 2TB 드라이브에 원래 드라이브와 동일한 파티션이 있습니다 sdx1, sdx2, sdx3. 그래서 다시 dd다음을 수행합니다 .

dd if=/dev/sdx of=firmware.bin bs=100M

이렇게 하면 내가 관심 있는 첫 번째 32GB를 복사할 뿐만 아니라 계속해서 전체 2TB 드라이브를 복제하게 됩니다. 제가 시도했을 때도 그랬습니다. 다음을 사용하여 관심 있는 파티션의 정확한 바이트 길이를 찾을 수 있습니다.

$ lsblk -b
NAME                         MAJ:MIN RM          SIZE RO TYPE  MOUNTPOINT
sdc                            8:32   0 2000398933504  0 disk  
├─sdc1                         8:33   0     134217728  0 part  
├─sdc2                         8:34   0    2147483648  0 part  
└─sdc3                         8:35   0   29734297600  0 part  

이 문제를 해결하는 명확한 방법은 블록 크기를 dd1바이트로 설정한 다음 읽을 블록 수를 위의 세 가지 크기의 합으로 설정하는 것입니다.

dd if=/dev/sdc of=firmware.bin bs=1 count=32015998976

그러나 이것이 실제로 얼마나 오래 걸릴지는 상상할 수 없습니다.

편집하다: 위의 흥미로운 빠른 테스트에서는 약 150KB/s의 견고한 전송 속도를 보여주었습니다.


너무 길어요.파티션 크기의 합보다 훨씬 큰 디스크의 처음 3개 파티션을 단독으로 복사하는 방법은 무엇입니까?

답변1

필요한 파티션과 MBR을 복사하기만 하면 됩니다(필요한 경우).

MBR은 디스크의 처음 512바이트에 저장됩니다.

dd if=/dev/sdX of=/path/to/mbr_file.img bs=512 count=1

각 파티션을 복사

dd if=/dev/sdX1 of=/path/to/partition1.img bs=512

dd if=/dev/sdX2 of=/path/to/partition2.img bs=512

dd if=/dev/sdX3 of=/path/to/partition3.img bs=512

관련 정보