Linux dd 相同块的差异结果问题

mah*_*454 7 linux ubuntu centos dd

我尝试使用 dd 命令在 linux 操作系统上运行简单的测试用例。

我用这个命令创建了一个简单的磁盘映像:

dd if=/dev/urandom of=disk.img bs=1M count=100 
Run Code Online (Sandbox Code Playgroud)

这是第一次测试:
现在我运行这个命令:

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   
Run Code Online (Sandbox Code Playgroud)

您可以看到output_1并且output_2完全相同的 md5 hash 。

这是第二个测试:
现在我将跳过参数添加到 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    
Run Code Online (Sandbox Code Playgroud)

为什么这个块的结果是不同的?
我的测试的哪一部分是错误的?

A.B*_*A.B 12

跳过参数在(输入)块中,而不是以字节为单位,如手册页中所述

skip=N    skip N ibs-sized blocks at start of input
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,跳过的部分是:

1500 * 1KiB = 1536000 字节

第二种情况:

1500 * 4KiB = 6144000 字节

只要所涉及的值完全分开,您就可以进行调整。对于第二种情况,使用 1500*1k/4k=375 ( skip=375) 将返回与第一种情况相同的结果。