LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1526|回复: 4

双硬盘每次启动时检测从硬盘都要显示:"dma timeout error",但进

[复制链接]
发表于 2004-2-15 13:59:20 | 显示全部楼层 |阅读模式
我用的双硬盘,主20G,从8G,主盘上装2000 AdvServer + Win98 + TL10(en),从盘只有些资料和TL10的Swap分区.8G盘较老,UDMA(33)的,20G为UDMA(66),但每次启动到检测从硬盘时都会等很长时间,显示如下: (/=hda4,swap=hdc3)

hda:hda1 hda2<hda5 hda6 hda7> hda3 hda4
...
hdc: max request size: 128KiB
HDC: 16841664 sectors (8622MB) W/512KiB Cache, CHS=16708/16/63,UDMA(33)
hdc: <4>hdc:dma_timer_exprity:dma status==0x21
hdc: DMA timeout error
hdc: dma timeout error:status=0x58 {DriveReady SeekComplete DataRequest}

然后依然可以检测出从盘的分区(hdc1 hdc2 hdc3)
请问是什么问题?如何解决?
(20G=希捷酷鱼,8G=Seagate U8)
发表于 2004-2-16 18:30:02 | 显示全部楼层
这个是因为内核默认启动时启用dma。

你的从盘太老了,不支持这种dma,我的硬盘也是这样。
可以在启动参数中加入ide=nodma,进入系统后,再用hdparm打开主盘的dma。
如果用grub启动,就是在"kernel=..."这一行最后添上ide=nodma,或者你可以试试ide0=nodma或ide1=nodma,不过我的系统只认ide=nodma。

或者你可以重新编译内核,把默认对ide设备启动dma这一项给去掉
发表于 2004-2-17 11:35:09 | 显示全部楼层
先置精。
有问题可以继续发问。:rolleyes:
 楼主| 发表于 2004-2-18 11:12:14 | 显示全部楼层
OK,这个己搞定.谢谢你的提示。
我想我是这样搞的,不过一定还有别的办法.
(以下只是给有同样困扰的朋友给出解决方案,使更多的人喜爱linux!)

1.修改 /boot/grub/grub.conf(对于grub,lilo不知)
在kernel行最后加入 ide=nodma

2.修改 /etc/rc.d/rc.local(如没有请建立)
(也可修改 /etc/rc.d/rc.sysinit,风险较大)
#随便找个空行写个函数

#disable all harddisks' dma
#please use at every time mount -a or umount -a
function set_hddma(){
  for i in a b c d e f g h ; do
    if [ -e "/proc/ide/hd$i/media" ]; then
      hdmedia='cat /proc/ide/hd$i/media'
      if ["$hdmedia"="disk"]; then
        action "Set DMA for hd$i:" /sbin/hdparm -d$1 /dev/hd$i
      fi
    fi
done
}

#(如果是rc.sysinit就要放在mount -a 之后)
set_hddma 1

#这样就启用了所有盘的dma

3.修改/etc/rc.d/init.d/halt
#而这时会在reboot or halt时有时出现umount -a 时很长时间的等待,所以要在umount -a 时再把dma禁用

#基于以上原因,要在系统shutdown时把dma禁用:
#找到umount -a 那行之加入以下行:

#disable all harddisks' dma
#please use at every time mount -a or umount -a
function set_hddma(){
  for i in a b c d e f g h ; do
    if [ -e "/proc/ide/hd$i/media" ]; then
      hdmedia='cat /proc/ide/hd$i/media'
      if ["$hdmedia"="disk"]; then
        runcmd "Set DMA for hd$i:" /sbin/hdparm -d$1 /dev/hd$i
      fi
    fi
done
}

set_hddma 0

这样无论硬盘怎么换都可无修改地使启动顺畅,而启动后打开DMA。
不过一旦涉及到mount -a or umount -a 这类遍历分区的操作而DMA又打开时就会出现很长的等待,还要请高手solve the problem.

 楼主| 发表于 2004-2-18 11:32:57 | 显示全部楼层
OK,让我再讲讲以上的“一些原因”是什么:)
我修改的是/etc/rc.d/rc.sysinit,由于我不知shell函数的调用格式(刚从winodws转向linux)所以重启时没有通过语法检查而halt,进入single模式后此文件是只读无法修改,请帮助我。(请给出解决方案,因暂时没有时间去学习knowledge base)

以上脚本是我查过手册后重写的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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