誰でも私に簡単な例を与えることができますか?パーティションサイズは4MBですが、内部データは3.1MBです。dd
3.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バイトですか?次の例では、後者を想定します。
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バイトが追加されます。これは、取得する実際のバイト数に興味がある場合に考慮すべきいくつかの点を示しています。dd if=/dev/block/partition of=/tmp/3.1mb.img bs=1 count=3250586
正確なバイト数が必要ですが、その数が特定の数の倍数かどうかわからない場合は、ブロックサイズを希望の正確なバイト数に設定でき
1
ますcount
。dd if=/dev/block/partition of=/tmp/3.1mb.img skip=1K count=6349
パーティションにコピーするデータが0.5MB(512KiBまたは512 * 1024バイト)であるとします。その後、上記のようにスキップを使用できます。
K
ddのサフィックスは1024バイトを意味するため、1Kが使用されます。ブロックサイズはデフォルトの512なので、これは512KiBまたは512 * 1024バイトをパーティションにスキップしたことを意味します。スキップとは、dd読み取りが開始される入力ファイルポイントに到達するために、入力ファイル(この場合はパーティション)の先頭から特定の数のブロックをスキップすることを意味します。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程度です。
問題のパーティションが非常に小さいことは確実ですか?