LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
123
返回列表 发新帖
楼主: dreamawake

解决load cycle count的一个方法,告别硬盘卡卡响

[复制链接]
发表于 2009-2-3 12:14:03 | 显示全部楼层
贴出来大家参考一下,其实就是原理楼主已经说了。

  1. #! /bin/sh
  2. #
  3. # This script adjusts hard drive APM settings using hdparm. The hardware
  4. # defaults (usually hdparm -B 128) cause excessive head load/unload cycles
  5. # on many modern hard drives. We therefore set hdparm -B 254 while on AC
  6. # power. On battery we set hdparm -B 128, because the head parking is
  7. # very useful for shock protection.
  8. #

  9. . /usr/share/acpi-support/power-funcs

  10. DO_HDPARM=y
  11. if [ -e /usr/sbin/laptop_mode ] ; then
  12.   LMT_CONTROL_HD_POWERMGMT=$(. /etc/laptop-mode/laptop-mode.conf && echo "$CONTROL_HD_POWERMGMT")
  13.   if [ "$LMT_CONTROL_HD_POWERMGMT" != 0 ] \
  14.      && [ -e /var/run/laptop-mode-tools/enabled ]
  15.   then
  16.     # Laptop mode controls hdparm -B settings, we don't.
  17.     DO_HDPARM=n
  18.   fi
  19. fi

  20. if [ "$DO_HDPARM" = y ] ; then
  21.   # Get the power state into STATE
  22.   getState;
  23.   
  24.   for dev in /dev/sd? /dev/hd? ; do
  25.     if [ -b $dev ] ; then
  26.       # Check for APM support; discard errors since not all drives
  27.       # support HDIO_GET_IDENTITY (-i).   
  28.       if hdparm -i $dev 2> /dev/null | grep -q 'AdvancedPM=yes' ; then
  29.         if [ "$STATE" = "BATTERY" ] ; then
  30.           hdparm -B 128 $dev
  31.         else
  32.           hdparm -B 254 $dev
  33.         fi
  34.       fi
  35.     fi
  36.   done
  37. fi
复制代码
回复 支持 反对

使用道具 举报

发表于 2009-2-3 15:11:38 | 显示全部楼层
我是用笔记本的,安装 laptop-mode-tools 之后,可以在/etc/laptop-mode/laptop-mode.conf 里找到:
  1. #
  2. # Should laptop mode tools control the hard drive power management settings?
  3. #
  4. CONTROL_HD_POWERMGMT=[b]1[/b]

  5. #
  6. # Power management for HD (hdparm -B values)
  7. #
  8. BATT_HD_POWERMGMT=[b]128[/b]
  9. LM_AC_HD_POWERMGMT=254
  10. NOLM_AC_HD_POWERMGMT=254
复制代码


把这个选项打开就可以了。参数可以作一些修改(粗体的两项)。
这是我新买的硬盘,平均 23次/小时。
  1. Device Model:     Hitachi HTS543232L9A300
  2. Firmware Version: FB4OC40C
  3. User Capacity:    320,072,933,376 bytes

  4. SMART Attributes Data Structure revision number: 16
  5. Vendor Specific SMART Attributes with Thresholds:
  6. ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  7.   1 Raw_Read_Error_Rate     0x000b   100   100   062    Pre-fail  Always       -       0
  8.   2 Throughput_Performance  0x0005   100   100   040    Pre-fail  Offline      -       0
  9.   3 Spin_Up_Time            0x0007   253   253   033    Pre-fail  Always       -       0
  10.   4 Start_Stop_Count        0x0012   100   100   000    Old_age   Always       -       195
  11.   5 Reallocated_Sector_Ct   0x0033   100   100   005    Pre-fail  Always       -       0
  12.   7 Seek_Error_Rate         0x000b   100   100   067    Pre-fail  Always       -       0
  13.   8 Seek_Time_Performance   0x0005   100   100   040    Pre-fail  Offline      -       0
  14.   9 Power_On_Hours          0x0012   100   100   000    Old_age   Always       -       315
  15. 10 Spin_Retry_Count        0x0013   100   100   060    Pre-fail  Always       -       0
  16. 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       81
  17. 191 G-Sense_Error_Rate      0x000a   098   098   000    Old_age   Always       -       5
  18. 192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       26
  19. 193 Load_Cycle_Count        0x0012   100   100   000    Old_age   Always       -       7269
  20. 194 Temperature_Celsius     0x0002   122   122   000    Old_age   Always       -       45 (Lifetime Min/Max 17/50)
  21. 196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
  22. 197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always       -       0
  23. 198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline      -       0
  24. 199 UDMA_CRC_Error_Count    0x000a   200   200   000    Old_age   Always       -       0
  25. 223 Load_Retry_Count        0x000a   100   100   000    Old_age   Always       -       0
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-3 15:51:24 | 显示全部楼层
Post by sfbi;1943384
经过试验,我这边如果不加hdparm -B 254 /dev/sda,有时候还是会响。所以光调节vm的那些好像不太保险。

load/unload操作并不是bug,也不可怕的,至少开关重启会操作一两次,用我的方法如果还有的话可以缩短一下sleep的时间,我的硬盘是5秒,6秒以上就不行了。

根据技术资料,unload并不是主轴停转,而是把磁头摆到一个安全的“斜坡”位置,以免转速过低碰到盘片(盘片转速过低不能形成有效的空气膜),windos也一样会这样的,所以不必太担心,我只是烦这个声音还有这个操作导致的延迟。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-3 15:58:02 | 显示全部楼层
ubuntu的方法也是把电源管理设为254(最小管理),那些脚本只是保证254在休眠等操作之后保持不变,硬盘升温也是很明显的,我不觉得我的方法dirty,反而更好利用电源管理,起码温度不怎么升高了。
回复 支持 反对

使用道具 举报

发表于 2009-2-3 21:14:23 | 显示全部楼层
我现在用的是楼主的方法,至少硬盘咔咔的声音听不见了。由于没有设置成功sensor, 所以现在没办法测量温度。至少感觉不到升温了。ps: 现在用的是vector6.0rc4.
回复 支持 反对

使用道具 举报

发表于 2009-2-3 21:46:35 | 显示全部楼层
这个问题让我烦恼很久了,总是卡卡响,试过用hdparm的方法,的确是温度升高很快。
但是LZ的方法我试了,效果也不明显啊,也许我该把sleep时间设短点?

不过我有个疑问:OS不是会对写入操作有缓存的么?这样每过几秒写入一次会不会其实没有写入磁盘而是被缓存操作了呢?不太了解这方面的机制,故有此疑惑。
回复 支持 反对

使用道具 举报

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

本版积分规则

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