ext4パーティションの関連部分を識別する方法

ext4パーティションの関連部分を識別する方法

背景:uboot(および必要に応じてカスタムベアメタルコード)を使用してeMMCからext4パーティションを複製する必要があります。を使用してパーティション全体をコピーしたmmc readところ、ほとんどのパーティションは空ですが、一部のデータブロック(inodeテーブルなど)がパーティションに分散していることがわかりました。これは、パーティション全体をコピーする必要があります(遅くて頻繁に実行する必要があります)、またはパーティションのどの部分が関連しているかを確認する必要があることを意味します。

この質問に最も似ているQ&Aは、ddcreate a sparse image or piping to thatを使用することを提案しますgzipが、私はOSを実行していないので、ファイルシステムのレイアウトを理解する必要があります。これらのビットマップタイルを使用して、使用されているコンテンツと無料のコンテンツを識別できますか? ext4のドキュメントは、詳細が出るたびにLinuxカーネルコードを参照しているようです。

ubootコードを使用してこれを行うのが最善ですが、ubootで実行できるいくつかのベアメタルコードを書くこともできます。

境界条件もあります。パーティション複製のターゲットが空ではないため、ソースにゼロのみのブロックがあり、そのブロックが0である必要がある場合は、ターゲットでそのブロックを0で上書きする必要があります。

ベストアンサー1

ご使用の環境でソースファイルシステムをマウントできない場合は、それを使用してファイルdebugfsシステムのレイアウトとターゲットcopyファイルを確認できます。わずかな操作でdebugfsソースファイルシステムを一覧表示し、繰り返して一時的な場所にコピーし、それを使用して新しいmke2fs -dファイルシステムに書き込むか、ターゲットの場所に直接コピーするスクリプトを作成できます。

独自のコードを作成したい場合は、libext2fsを使用してlibext2fsファイルシステムを開き、ディレクトリツリーを読み込み、それをターゲットファイルシステムに繰り返しコピーできます(libext2fsを使用して開くこともできます)。これは〜になりますたくさんディスク上のext4形式を処理するために独自のコードを書くよりも簡単です。

ご使用の環境でeMMCデバイスをブロックデバイスにアクセスできない場合(申し訳ありませんが、ext4の側面のみを知っていません)、libext2fs用のカスタムIOドライバ(またはlib/ext2fs/unix_io.c.../nt_io.cを作成できます。ドライバはeMMCデバイスに直接読み書きすることができ、debugfs + scriptsまたはカスタムlibext2fsコピーツールを使用できます。

おすすめ記事