LinuxSir.cn,穿越时空的Linuxsir!

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

如何设置硬盘的32位模式和DMA呀?

[复制链接]
发表于 2006-10-26 22:28:19 | 显示全部楼层 |阅读模式
我的电脑硬盘是ata100的,按下面的说法进行设置出错:


linuxcmpt:/home/linoox # hdparm -c1 -d1 -X67 /dev/sda

/dev/sda:
setting 32-bit IO_support flag to 1
HDIO_SET_32BIT failed: Invalid argument
setting using_dma to 1 (on)
HDIO_SET_DMA failed: Inappropriate ioctl for device
setting xfermode to 67 (UltraDMA mode3)
HDIO_DRIVE_CMD(setxfermode) failed: Input/output error
IO_support   =  0 (default 16-bit)
HDIO_GET_DMA failed: Inappropriate ioctl for device


linuxcmpt:/home/linoox # hdparm -v /dev/sda

/dev/sda:
IO_support   =  0 (default 16-bit)
HDIO_GET_UNMASKINTR failed: Inappropriate ioctl for device
HDIO_GET_DMA failed: Inappropriate ioctl for device
HDIO_GET_KEEPSETTINGS failed: Inappropriate ioctl for device
readonly     =  0 (off)
readahead    = 1024 (on)
geometry     = 14593/255/63, sectors = 234441648, start = 0








>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

一、提升硬盘和光驱的数据传输性能

  我们可以使用命令“hdparm 参数 设备”(如果是普通用户,需要在“hdparm”前面加上路径“/sbin/”)来查看存储器当前工作在什么样的传输模式下。例如要查看硬盘的传输模式,其命令如下(符号#表示以root身份执行,不必输入,下同):

  

  #hdparm -v /dev/hda

  

  如果输出结果有“IO_support=0(default 16-bit)”和“using_dma=0(off)”这两段,说明Linux操作系统没有打开硬盘的32位输入输出支持和DMA传输模式。例如红帽子 9.0(以下简称RH9)和红旗Linux桌面版4.0(以下简称RF4)都是默认关闭硬盘的32位输入输出支持。我们可以使用下面这个命令启用硬盘的 32位输入输出支持和DMA传输模式:

  

  #hdparm -c1 -d1 /dev/hda

  

  (说明:“-c1”表示启动32位输入输出支持;“-d1”表示启动DMA传输模式。如果你的硬盘支持ATA66还可以加上“-X67”这个参数,ATA100则是“-X68”。例如硬盘支持ATA66,那么完整的命令就是“hdparm -c3 -d1 -X67 /dev/hda”)

  同理,只要把上面这个命令的“/dev/hda”换成“/dev/cdrom”,就可以打开光驱的32位输入输出支持和DMA传输模式。

  但是每次都要这么输入命令太麻烦了,有没有办法让系统一启动就自动执行这些命令呢?有,方法是编辑/etc/rc.d/rc.local文件,在最后一行加上要自动执行的命令就可以了(每个命令一行)。
发表于 2006-10-27 08:05:06 | 显示全部楼层
hdparm 只对 IDE 硬盘起作用,你用的是 ATA100 但却认成 sda,是装成外置的吗?

若如此,你只能用 hdparm -a1024 /dev/sda 来加大 read ahead buffer,会有少许改善。另一方法是用为 SCSI/SATA 而设的 sdparm 命令
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-27 23:14:02 | 显示全部楼层
Post by d00m3d
hdparm 只对 IDE 硬盘起作用,你用的是 ATA100 但却认成 sda,是装成外置的吗?

若如此,你只能用 hdparm -a1024 /dev/sda 来加大 read ahead buffer,会有少许改善。另一方法是用为 SCSI/SATA 而设的 sdparm 命令



是我搞错了,硬盘应该是SATA的,就是数据线只有小指那么宽的那种硬盘。但sdparm不会用:

我在硬盘上的复制大文件,平均速度为4至6MB/s,这个速度是否正常? 下面的参数都看不懂,不知道怎么使用sdparm。


linuxcmpt:/home/lizhelin # sdparm  -a /dev/sda
    /dev/sda: ATA       WDC WD1200JS-22M  02.0
Read write error recovery mode page:
  AWRE        1
  ARRE        1
  TB          0
  RC          0
  EER         0
  PER         0
  DTE         0
  DCR         0
  RRC         0
  COR_S       0
  HOC         0
  DSOC        0
  WRC         0
  RTL         0
Caching (SBC) mode page:
  IC          0
  ABPF        0
  CAP         0
  DISC        0
  SIZE        0
  WCE         1
  MF          0
  RCD         0
  DRRP        0
  WRP         0
  DPTL        0
  MIPF        0
  MAPF        0
  MAPFC       0
  FSW         0
  LBCSS       0
  DRA         0
  NV_DIS      0
  NCS         0
  CSS         0
Control mode page:
  TST         0
  TMF_ONLY    0
  D_SENSE     0
  GLTSD       1
  RLEC        0
  QAM         0
  QERR        0
  RAC         0
  UA_INTLCK   0
  SWP         0
  ATO         0
  TAS         0
  AUTOLOAD    0
  BTP        -1
  ESTCT      30








linuxcmpt:/home/lizhelin # sdparm  -help
Usage: sdparm    [--all] [--clear=<str>] [--command=<cmd>] [--dbd]
                 [--defaults] [--dummy] [--flexible] [--get=<str>] [--help]
                 [--hex] [--inquiry] [--long] [--page=<pg[,spg]>] [--quiet]
                 [--save] [--set=<str>] [--six] [--transport=<tn>]
                 [--verbose] [--version] <scsi_device>

       sdparm    --enumerate [--all] [--inquiry] [--long] [--page=<pg[,spg]>]
                 [--transport=<tn>]
  where:
      --all | -a            list all known attributes for given device
      --clear=<str> | -c <str>  clear (zero) attribute value(s)
      --command=<cmd> | -C <cmd>  perform <cmd> (e.g. 'eject')
      --dbd | -B            set DBD bit in mode sense cdb
      --defaults | -D       set a mode page to its default values
      --dummy | -d          don't write back modified mode page
      --enumerate | -e      list known pages and attributes (ignore device)
      --flexible | -f       compensate for common errors, relax some checks
      --get=<str> | -g <str>  get (fetch) attribute value(s)
      --help | -h           print out usage message
      --hex | -H            output in hex rather than name/value pairs
      --inquiry | -i        output INQUIRY VPD page(s) (def: mode page(s))
      --long | -l           add description to attribute output
      --page=<pg[,spg]> | -p <pg[,spg]>  page (and optionally subpage) number
                            [or abbrev] to output, change or enumerate
      --quiet | -q          suppress device vendor/product/revision string line
      --save | -S           place mode changes in saved page as well
      --set=<str> | -s <str>  set attribute value(s)
      --six | -6            use 6 byte SCSI mode cdbs (def: 10 byte)
      --transport=<tn> | -t <tn>     transport protocol number [or abbrev]
      --verbose | -v        increase verbosity
      --version | -V        print version string and exit

View or change attributes of a SCSI device (e.g. disk or CD/DVD drive)
回复 支持 反对

使用道具 举报

发表于 2006-10-28 12:20:45 | 显示全部楼层
不用 sdparm 了, 我的 SATA 硬盤只用 hdparm -a4096 dev/sda 就好了
In KDE, average 有 10 - 12MB/s 的抄寫速度 (Notebook Harddisk)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-28 14:25:14 | 显示全部楼层
Post by matthewlam64
不用 sdparm 了, 我的 SATA 硬盤只用 hdparm -a4096 dev/sda 就好了
In KDE, average 有 10 - 12MB/s 的抄寫速度 (Notebook Harddisk)



不错不错, hdparm -a4096 dev/sda 以后,复制一个ISO文件300多MB的,达到了17至21MB/s,快多了,这是什么原因?



如果用sdparm设置能不能搞得更快一些呢?


回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-28 14:56:29 | 显示全部楼层
我的电脑找不到etc/rc.d/rc.local文件,怎么办?我的是suse 10.1。



但是每次都要这么输入命令太麻烦了,有没有办法让系统一启动就自动执行这些命令呢?有,方法是编辑/etc/rc.d/rc.local文件,在最后一行加上要自动执行的命令就可以了(每个命令一行)。
回复 支持 反对

使用道具 举报

发表于 2006-10-28 17:42:36 | 显示全部楼层
能用就好了

Post by linoox
我的电脑找不到etc/rc.d/rc.local文件,怎么办?我的是suse 10.1。



但是每次都要这么输入命令太麻烦了,有没有办法让系统一启动就自动执行这些命令呢?有,方法是编辑/etc/rc.d/rc.local文件,在最后一行加上要自动执行的命令就可以了(每个命令一行)。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-28 18:01:45 | 显示全部楼层
Post by matthewlam64
能用就好了



就是不行呀,如何让电脑一起机就执行hdparm命令,我加上一个etc/rc.d/rc.local的shell脚本也没有,好像系统没有执行它。
回复 支持 反对

使用道具 举报

发表于 2006-10-28 18:46:09 | 显示全部楼层
/etc/init.d/boot.local
回复 支持 反对

使用道具 举报

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

本版积分规则

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