同じデータを使用して(Rasperry PI)IMGファイルを減らす方法

同じデータを使用して(Rasperry PI)IMGファイルを減らす方法

次の構造の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書き込みなどのツールを使用してください。 )

おすすめ記事