大規模なext4パーティションの小さな画像を作成する方法は?

大規模なext4パーティションの小さな画像を作成する方法は?

私は組み込み目的でLinuxファイルシステムに低レベルのメモリ書き込みを行っています。次のプロセスを使用してパーティションイメージを作成しました。

  1. 4GiB 空の画像ファイルを生成します。例: dd if=/dev/null of=example.img bs=1M seek=4096
  2. ファイルシステムの追加(ext4) mkfs.ext4 -F example.img
  3. ローカルコンピュータにインストール mkdir /mnt/example.img mount -t ext4 -o loop exmaple.img /mnt/exampleimg
  4. マウントされたパーティションイメージへのファイルシステムのコピー cp -r rootfs/* /mnt/exampleimg/
  5. 画像の削除 umount /mnt/exampleimg

生成されたイメージを置き換える必要があるパーティションの最初のセクターに書き込んだ後、すべてがうまく機能し、データにアクセスできます。問題は、16GBのパーティション全体をコピーする必要がありますが、その中に2GBのデータしかないということです。時間がかかります。

同じデータで小さいイメージを作成しましたが、機能しますが、パーティションイメージの固定サイズを超えることはできません。システムでは、パーティションのサイズがまだ大きいことが確認されています(fdisk -l /dev/mmcblok0、セクタの数は/sys/class/block/mmcblkop2/sizeにあります)。それはおそらく、パーティションテーブルがまだ変更されていないからです。ファイルのコピーがイメージの利用可能なスペースよりも大きい(パーティションの実際のサイズではありません)。 cp: write error: No space left on device が表示されます。

ターゲットLinuxで使用した後は、パーティションサイズを変更できません。これは、Linuxが実行されているルートファイルシステムのパーティションであるためです。不要な制限なしに偽のサイズ/画像を作成する方法はありますか?データを含む16GBパーティションのイメージをインポートしたいのですが、イメージサイズは16GB未満です。

ベストアンサー1

すべての操作を従来どおりに実行します(たとえば、小さな画像の作成、そのままコピー)。しかし、最後のステップは次のとおりです。

resize2fs -p /dev/mmcblok0

おすすめ記事