Linuxオペレーティングシステムでddコマンドを使用して簡単なテストケースを実行してみます。
次のコマンドでシンプルなディスクイメージを作成します。
dd if=/dev/urandom of=disk.img bs=1M count=100
これは最初のテストです:
今、私はこのコマンドを実行します:
dd if=disk.img of=output_1 bs=1k count=4
dd if=disk.img of=output_2 bs=4k count=1
md5sum output_1 output_2
bc0245c10ff529042fd2a5335ed1573f output_1
bc0245c10ff529042fd2a5335ed1573f output_2
あなたは見ることができますoutput_1
およびoutput_2
はまったく同じmd5ハッシュを持っています。
これは2番目のテストです:
今、ddコマンドにスキップパラメータを追加します:
dd if=disk.img of=output_1 skip=1500 bs=1k count=4
dd if=disk.img of=output_2 skip=1500 bs=4k count=1
c5b0e8dde317c25011b31a5c48580477 output_1
4585d39fcf93cec4abc6c55094aac724 output_2
なぜ結果はこのブロックの違いですか?
テストのどの部分が間違っていますか?
man page に記述されているように、スキップパラメータはバイト単位ではなく、(入力)ブロック内にあります。
skip=N skip N ibs-sized blocks at start of input
最初のケースでは、スキップされた部分は次のとおりです。
1500 * 1KiB = 1536000バイト
2番目のケース:
1500 * 4KiB = 6144000バイト
関連する値が正確に除算される限り、調整できます。 1500 * 1k/4k = 375(skip=375
)は、最初のケースと同じ結果を返します。