我尝试使用 dd 命令在 Linux 操作系统上运行简单的测试用例。
我使用以下命令创建一个简单的磁盘映像:
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 哈希值。
这是第二次测试:
现在我将skip参数添加到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
为什么这个块的结果不同?
我的测试的哪一部分是错误的?
答案1
跳过参数位于(输入)块中,而不是字节中,如手册页:
skip=N skip N ibs-sized blocks at start of input
在第一种情况下,跳过的部分是:
1500 * 1KiB = 1536000 字节
第二种情况:
1500 * 4KiB = 6144000 字节
只要所涉及的值能够精确划分,就可以进行调整。对于第二种情况,使用 1500*1k/4k=375 ( skip=375
) 将返回与第一种情况相同的结果。