次の構造の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
。正確にゼロ個のチャンクがコピーされたときを検出し、それをコピーするのではなく、今後「ジャンプ」します。
しかし、あなたの質問に答えるために、はい、そのパーティションをマウントし、データをコピーし、より小さなパーティションを含むようにパーティションテーブルを変更し、そこに同じファイルシステムを作成し、ファイルを再コピーして、全体のイメージファイルを切り取ることができます。これは、未使用のスペースを適切に処理するよりも良い考えではない可能性が高いです。
実際に6.1GB全体をコピーする場合、平均書き込み速度は10MB / sです。安いSDカードでは悪くない!たぶんあなたはいいえ画像全体をコピーしますが、ゼロ以外の部分のみをコピーします。この場合のみ圧縮役に立つかもしれません(しかし、「ファイルシステムを圧縮する方法」は非常に多くの結果にすぐにつながる可能性があります。画像の内容について何も知りません)。
(あなたならどうですか?建築学画像を自分で作成し、まずスパースファイルを使用してから、スパースバージョンの送信とbmap
書き込みなどのツールを使用してください。 )