다음 구조의 IMG 파일이 있습니다.
$ fdisk -l myimage.img
Disk myimage.img: 6,1 GiB, 6512705536 bytes, 12720128 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x244b8248
Device Boot Start End Sectors Size Id Type
myimage.img1 8192 137215 129024 63M c W95 FAT32 (LBA)
myimage.img2 137216 8525823 8388608 4G 83 Linux
myimage.img3 8525824 12720127 4194304 2G 83 Linux
여기에는 부팅 가능한 Rasperry Pi 이미지가 포함되어 있습니다.
다음 명령을 사용하여 이러한 파티션을 마운트하면
$ mount -o loop,offset=4194304,sizelimit=66060288 myimage.img myimage.img1
$ mount -o loop,offset=70254592,sizelimit=4294967296 myimage.img myimage.img2
$ mount -o loop,offset=4365221888,sizelimit=2147483648 myimage.img myimage.img3
알겠어요
$ du -sh myimage.img1
22M myimage.img1
$ du -sh myimage.img2
1,7G myimage.img2
$ du -sh myimage.img3
306M myimage.img3
즉, 파티션의 실제 데이터는 훨씬 작습니다. 이미지 파일을 더 작은 크기(여기에서는 약 2G)로 줄이고 더 짧은 시간에 동일한 파티션 구조를 얻을 수 있습니까? 현재 이 이미지를 저렴한 플래시 카드에 굽는 데 약 10분 정도 걸립니다.
답변1
비결은아니요이미지의 빈 부분을 복사합니다. (정말 간단합니다.) 일반적으로 당신은생각하다파티션은 전체 카드에 걸쳐 있어야 합니다. 그렇지 않으면 사용할 수 없는 공간이 생깁니다.
이 이미지를 이미 다운로드한 경우 가장 쉬운 해결책은 아마도 를 사용하는 것입니다 sudo dd if=myimage.img of=/dev/devicename conv=sparse
. 정확히 0개의 청크가 복사될 때를 감지하고 이를 복사하는 대신 앞으로 "점프"합니다.
하지만 귀하의 질문에 대답하자면 예, 해당 파티션을 마운트하고, 데이터를 복사하고, 더 작은 파티션을 포함하도록 파티션 테이블을 수정하고, 거기에 동일한 파일 시스템을 생성하고, 파일을 다시 복사한 다음, 전체 이미지 파일을 잘라낼 수 있습니다. 이는 사용하지 않는 공간을 적절하게 처리하는 것보다 좋은 생각이 아닐 가능성이 높습니다.
실제로 전체 6.1GB를 복사하는 경우 평균 쓰기 속도는 10MB/s입니다. 저렴한 SD 카드로는 나쁘지 않습니다! 어쩌면 당신은아니요전체 이미지를 복사하지만 0이 아닌 부분만 복사합니다. 이 경우에만압축도움이 될 수 있습니다(그러나 "파일 시스템을 압축하는 방법"은 매우 많은 결과로 빠르게 이어질 수 있습니다. 우리는 이미지의 내용에 대해 아무것도 모릅니다).
(당신이라면 어떨까요?건축학이미지를 직접 만들고 먼저 스파스 파일을 사용한 다음 bmap
스파스 버전 보내기 및 굽기와 같은 도구를 사용하세요! )