大きなパーティションを持つ小さなディスクイメージを作成する方法

大きなパーティションを持つ小さなディスクイメージを作成する方法

組み込みシステム用のディスクイメージ(4GB SDカードに配置)を構築中です。システムに2つのパーティションがあることを望みます。 「ルート」パーティション1個(200Mb)と「データ」パーティション1個(800Mb)。

ddを使用して空の1GBファイルを作成しました。次に parted を使用してパーティションを設定します。ループデバイスに別途インストールしてからフォーマットしました。 ext2 は「root」を表し、ext4 は「data」を表します。私のルートファイルシステムを「ルート」パーティションに追加し、「データ」を空白のままにしました。

それが問題だ。現在、200MBのデータしかない1GBの画像が残っています。理論的には、画像を201MBに切り捨ててファイルシステムをマウントすることはできませんか?残念ながら、私はこれが本当であることを見つけることができませんでした。

過去に4GBのSDカード全体を活用するパーティションを持つ30Mbイメージを作成するために、Freescaleのビルド環境を使用していたことを思い出してください。残念ながら、現時点では彼らが何をしているのかわかりません。

私はextファイルシステムのディスクフォーマットを読みましたが、最初のスーパーブロックの後にデータがなければ(バックアップスーパーブロックと未使用のブロックテーブルを除く)そこから切り取ることができると思います。

残念ながら、これを実行したときにインストールシステムがクラッシュしました。その後、FSCKを実行し、スーパーブロックとブロックテーブルを復元し、問題なくマウントできます。私はそれが必要だとは思わない。

たぶん他のファイルシステムが動作しますか?どんなアイデアがありますか?

ありがとう、

編集する

ファイルシステムを読み取るには、パーティションを変更します。パーティションはそのままで変更されていませんが、イメージを切り取った後にファイルシステムが破損しました。

編集する

私が見つけたのは、ファイルを最初の「データ」パーティションのスーパーブロックとinode /ブロックテーブルセット(データブロックの範囲内のどこか)のサイズより大きく切り捨てると、ファイルシステムが何もする必要がないということです。残りのスーパーブロックおよびブロック/inodeテーブルを回復するために使用されるfsckをアンロードします。

ベストアンサー1

最も簡単な方法は、サポートファイルをスパースファイルとして生成することです。つまり、truncate -s 1G disk.img代わりに1GBに設定することdd if=/dev/zero bs=1048576 count=1024 of=disk.imgです。非常に良いとはるかtruncateに高速です。

ファイルを操作するとls -l1GB と表示されますが、これはサーフェスサイズにすぎません。du disk.img実際の寸法が提供されます。

(まれなファイルをサポートするファイルシステムに画像を保存する必要があります。一般的なUnixはすべてサポートされています。Ext2/3/4はすべてサポートされています。FAT32はサポートされていません。HFS +も同様です。)

注:論理的に、スパースファイルはまだフルサイズです。これは、作成されていない部分が物理的にディスクに保存されないことです。ほとんどの場合、実際に保存されていない部分はプログラムから隠されます。ただし、一部のユーティリティはこれをサポートしています。 (例:、、、dd conv=sparseなどcp --sparse=auto/always)。実際のUSBメモリースティックできない不足しています。これを書くと、はるかにdd conv=sparse高速になりますが、NUL(0x00)でいっぱいの予想ブロックではなく、以前に存在していたデータが残ります。空き容量によりうまく機能しますが、USBスティックに古いデータが残ります。セキュリティの問題かもしれません。

おすすめ記事