无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 5983|回复: 3
打印 上一主题 下一主题

[讨论] dd命令的速度

[复制链接]
跳转到指定楼层
1#
发表于 2011-1-26 21:26:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
事情的起因是这样的: 想搞一个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。但感觉不应该那么慢的。
2#
发表于 2011-1-27 07:38:01 | 只看该作者
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
复制代码
回复

使用道具 举报

3#
 楼主| 发表于 2011-1-27 11:46:55 | 只看该作者
非常感谢,抽空试一下。
回复

使用道具 举报

4#
 楼主| 发表于 2011-1-27 22:02:24 | 只看该作者
刚刚在虚拟机做的测试,把U盘的数据写到虚拟硬盘,使用自定义缓冲区之后,比不使用快了18秒。毕竟是虚拟机测试,在系统下的速度应该比真实机测试差别要小。如果实机测试的话,可能还要明显。说明缓冲区的设置还是很有必要的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-30 05:53

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表