无忧启动论坛

标题: dd命令的速度 [打印本页]

作者: sgw888    时间: 2011-1-26 21:26
标题: dd命令的速度
事情的起因是这样的: 想搞一个ROS软路由。从网上下载的IMG映像。需要在WIN下用工具写到硬盘上面去。 目标机器的内存太小,128M内存,使用了好几个PE都无法启动。 在虚拟机下把IMG写到了虚拟硬盘,然后用GHOST做的备份,结果还原到目标硬盘无法启动。无奈之下,只能用写IMG的工具,写到目标硬盘。本来可以把硬盘拆下来挂到另一机器,可是那台机一直在用,不方便,忽然想到GRUB4DOS有DD命令可以实现跟写IMG一样的功能。

IMG文件有200M左右。从U盘启动。使用DD命令
dd if=(hd0,0)/ros.img of=(hd1) bs=512 count=479112
上面的COUNT参数值是摸拟的。结果发现,操作起来,速度是相当的慢啊。
后来把BS参数值修改了一下,改成1048576,后机的COUNT参数也相应变小。
可是操作起来,速度完全没有变化,跟原来一样。

最终虽然成功完成,但是速度也太慢了。这里可能牵涉到U盘的速度,U盘应该不是1.1的速度,可能是USB FULL。但感觉不应该那么慢的。
作者: 不点    时间: 2011-1-27 07:38
grub4dos 中 dd 的语法是这样的:

  1. dd if=IF of=OF [bs=BS] [count=C] [skip=IN] [seek=OUT] [buf=ADDR] [buflen=SIZE]
复制代码


调整 bs 不会影响执行的速度。每次都是按一个磁道读取和写入的。所以,最终的速度是由 BIOS 执行的速度决定的。

但是,你可以尝试 buf 和 buflen 参数。这规定了 dd 命令执行时所占用的缓冲区。如果不明白什么叫缓冲区,你可以认为所谓的缓冲区就是一块临时内存。

注意,如果你使用了一块内存作为缓冲区,那么这块内存将被改变,原先放置在这块内存中的数据就被毁掉了。

根据你的情况,你可以使用位于物理地址 32M 处的 64M 内存。

使用大块内存作为缓冲区的好处是,可以节约打开文件的次数,这样可能就会加快执行速度。但究竟能够加快多少,也是不太确定的,只有试试才知道。0x2000000 是 32M,0x4000000 是 64M。所以,你可以试试:

  1. dd if=(hd0,0)/ros.img of=(hd1) buf=0x2000000 buflen=0x4000000
复制代码

作者: sgw888    时间: 2011-1-27 11:46
非常感谢,抽空试一下。
作者: sgw888    时间: 2011-1-27 22:02
刚刚在虚拟机做的测试,把U盘的数据写到虚拟硬盘,使用自定义缓冲区之后,比不使用快了18秒。毕竟是虚拟机测试,在系统下的速度应该比真实机测试差别要小。如果实机测试的话,可能还要明显。说明缓冲区的设置还是很有必要的。




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3