web-dev-qa-db-ja.com

同じブロックの差分結果のLinux dd問題

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    

なぜ結果はこのブロックの違いですか?
テストのどの部分が間違っていますか?

7
mah454

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)は、最初のケースと同じ結果を返します。

12
A.B