Android/Linux dd [閉じる]

Android/Linux dd [閉じる]

誰でも私に簡単な例を与えることができますか?パーティションサイズは4MBですが、内部データは3.1MBです。dd3.1MBのみが必要です。

dd if=/dev/block/partition of=/tmp/3.1mb.img bs= skip=

bsそしてについて混乱していますskip

答え1

私のAndroidバージョンのddタスクは、ほとんどのLinuxディストリビューションに似ているようです。したがって、それが何をしているのかを説明するドキュメントについては、ddのマニュアルページを見てみましょう(Googleで検索できます)。

bsマニュアルページには、countおよびに関する指示がありますskip

  bs=BYTES
         read and write up to BYTES bytes at a time (default: 512);
         overrides ibs and obs

  count=N
         copy only N input blocks

  skip=N skip N ibs-sized blocks at start of input

正しいバイト数を探している場合は、3.1MBまたは3.1MiBが必要かどうかを判断する必要があります。つまり、メガバイトは1000×1000バイトですか、それとも1024×1024バイトですか?次の例では、後者を想定します。

  1. dd if=/dev/block/partition of=/tmp/3.1mb.img count=6349

    上記のように、ddのデフォルトのブロックサイズは512バイトです。したがって、以下は、パーティションの先頭から3.1MiBを少し超える部分をコピーします。 3.1MiBは整数バイト()で計算できないため、少し多いです3.1*1024*1024 = 3250585.6。 6349を使用する理由は、3.1 * 1024*1024 / 512 (blocksize) = 6348.8少なくとも3.1MiBのデータが検索されるように丸められるためです。 ddはブロックサイズの倍数でのみデータを読み書きするため、この場合丸めにすると102バイトが追加されます。これは、取得する実際のバイト数に興味がある場合に考慮すべきいくつかの点を示しています。

  2. dd if=/dev/block/partition of=/tmp/3.1mb.img bs=1 count=3250586

    正確なバイト数が必要ですが、その数が特定の数の倍数かどうかわからない場合は、ブロックサイズを希望の正確なバイト数に設定でき1ますcount

  3. dd if=/dev/block/partition of=/tmp/3.1mb.img skip=1K count=6349

    パーティションにコピーするデータが0.5MB(512KiBまたは512 * 1024バイト)であるとします。その後、上記のようにスキップを使用できます。Kddのサフィックスは1024バイトを意味するため、1Kが使用されます。ブロックサイズはデフォルトの512なので、これは512KiBまたは512 * 1024バイトをパーティションにスキップしたことを意味します。スキップとは、dd読み取りが開始される入力ファイルポイントに到達するために、入力ファイル(この場合はパーティション)の先頭から特定の数のブロックをスキップすることを意味します。

  4. dd if=/dev/block/partition of=/tmp/3.1mb.img bs=1 skip=524288 count=3250586

    最初の512KiBをスキップしながら正確なバイト数を取得するには、前の例を上記の例に書き換えることができます。

特定のバイト数をコピーするので、countこのオプションを常に提供する必要があることに注意してください。それ以外の場合、dd は読み取れなくなるまで読み続けます。これにより、必要以上に多くのデータを読み取ることができます。

答え2

単純な算術:

dd if=/dev/block/partition of=/tmp/partition.img bs=1K count=3100

1KB乗算3100 = 3.1MB程度です。

問題のパーティションが非常に小さいことは確実ですか?

関連情報