揍你,SSD 哪来的磁头!
科普来了
baike.baidu.com/view/4124777.htm
AAM:Automatic acoustics-management ,即自动声音管理。硬盘的噪音大多由于本身的震动和磁头的不断操作产生,换言之在相同的环境下,同类硬盘的转速越高,噪音越大。为了解决这一问题,不少厂商为硬盘提供了声音管理功能,硬盘通过 AAM 的调节,在安静模式 / 高性能模式中调节以满足用户的需求。也就是牺牲部分性能换来静音。
APM:Advanced Power Management,这里特指 硬盘高级电源管理 。为了省电,在硬盘没有读取操作的时候, 就将磁头复位。(这 APM 不和 WD 的 IntelliPark 一个性质嘛)
APM(0~255) 设置为 0,表示完全开启,硬盘连续 8 秒没有读写,磁头会复位;设置为 255 表示,关闭 APM,磁头除了在开关机时复位,其他时间不复位。
AAM(128~254) 设置为 128,表示适当降低转速,换取静音;设置为 254 表示不降低转速。
这样,我们就明白了。将 APM 设置为 255 就可以避免磁头复位(相反,耗电和发热可能增加),因此 C1 值就不会再增加。同时,那些可能由于磁头复位造成的“咔咔”声和游戏、视频时的卡顿现象也可能得到解决(实际效果待大家反馈了);将 AAM 设置为 128 可以略微降低因转速高而产生的噪音,也可以减少耗电和发热。
哎哟!疼!…QAQ
我也是 128,我也不懂。。。不过我估计问题应该不大吧。。。我现在坚信 openSUSE 的默认设置。。。话说 google 了后有个办法就是换 SSD。。。。
60 万次硬盘就会挂了,这个应该是 bug。因为以前 ubuntu 就出过,linuxtoy 也报道过。解决方法有点麻烦。我也是偶尔查下 smart 才发现的 LCC 读数太高了,现在已经去到 1 万多了,去年十月份才买的。台式机用了三年才三千次。
原来是这样,楼主说得是这篇文章么?
linuxtoy.org/archives/ubuntu-harddisk.html
我没看到其它方法了,可以先尝试一下。。。。我抽空也测试一下。。。。
文中是这样说的
我的本本,插上电源时是 254,拔了电源后是 128。这么说来,我的是正常的么?
sudo ./smartctl -A /dev/sda | grep Load_Cycle_Count
225 Load_Cycle_Count 0x0032 034 034 000 Old_age Always - 674085
sbin sudo ./hdparm -B /dev/sda
/dev/sda:
APM_level = off
照这么说我的 off 是很安全的啦?
但这个 1TB 的机械硬盘是我 11 年 12 月刚换上的。也已经 67w 次了。而且最关键的是它没坏。硬盘是西部数据的。
另外这种东西既然研究了就不妨研究的深入透彻一些。看中文炒冷饭甚至以讹传讹没意思。
据我 google 看到的内容总结了一下,大概以下几点:
- openSUSE 是最早发现这个问题的,要早于 Ubuntu,甚至我们的这个 wiki 页面:
old-en.opensuse.org/Disk_Power_Management
被好多其它发行版(Ubuntu)引用来作为修复该问题的依据。看你们都还在翻 08/09 年的老文,所以澄清下,你们现在纠结的问题是我们几年前发现的。
我们在 11.0 里就一度修复过这个问题:
bugzilla.novell.com/show_bug.cgi?id=386555
但是在 11.4 中又移除了该修复,因为它给用户造成的问题比硬盘寿命降低更大 (more dangerous than useful):
bugzilla.novell.com/show_bug.cgi?id=663067
- 硬盘的 load cycle count 是硬盘磁头挂起到滑道中的次数,这个问题有两面性:
挂起到滑道的次数越多,越伤磁头 ; 挂起到滑道的次数越少,越容易损坏硬盘磁碟中的数据,甚至刮出坏道。(机械硬盘的内部跟老式唱片机是一样的)
而这个挂起间隙是由硬盘制造商出厂前来设定的,跟 openSUSE 乃至整个 Linux 都没有关系:
howtoeverything.net/linux/hardware/why-some-hard-disks-wont-spin-down-hdparm
bugzilla.novell.com/show_bug.cgi?id=816388
比如西部数据是 8 秒,日立也很短,这可能是他们的侧重点在于数据的安全性而不是硬盘的寿命造成的(西部数据的 1TB 笔记本机械硬盘在淘宝卖不到 600,能用两年以上,一天一块钱不到,我 07 年的日立现在也还能用); 而 APM 是 Linux 的内核 ATA 驱动提供的一个 hack,它也有局限,对一些厂商的硬盘就毫无办法,人家把电源(AC/Battery 切换)和声音(parking 磁头时的咔哒声)管理硬编程到硬盘固件中,显示的是跟 SSD 一样的 not supported,而另一些厂商的硬盘则成为了 ATA 驱动已知的老大难问题:
ata.wiki.kernel.org/index.php/Known_issues#Drives_which_perform_frequent_head_unloads_under_Linux
但即使没有问题,使用 ATA 驱动来 hack 也是很脏的一个 hack。
因为那是你的硬盘硬件乃至设计目的的问题。
正如 openSUSE 的开发者在 bugzilla 所说:
「没有一个值是通吃的。有些厂家要 255 才行,有些要 254,有些 128 就够了。」
言下之意就是:这个值设的越大,你冒的风险就越大。你硬盘的理论寿命提升到 10 万年,笔记本电脑猛得歪一下数据丢一半,又有什么意义呢。看开发者的意思是宁可承担「openSUSE 杀硬盘」,也不承担「openSUSE 丢数据」的骂名。更何况该骂名本来就该由厂家来承担,「安全但不耐用」和「长寿但爱坏」两害相权的问题。
- 为什么同样的厂家设置,Windows 的 LCC 升得慢?
好多人包括我的第一感觉在内,是「卧槽 openSUSE 粗大事了」。
但实际上这是 Linux 文件系统的设计问题。Ext3/Ext4/Btrfs 等文件系统有 Journal 日志功能,每 3 到 4 秒就会唤醒磁盘一次,即使你在休眠 / 挂起。而如果你的 APM 是默认的 8 秒,ok,那你 LCC 增加得可快了,刚 park 磁头又被叫回来。
Windows 的 NTFS/FAT 文件系统没有 Journal 功能。直接表现就是:Windows 唤醒很慢。
================================================================
大环境摆在这里,现在的问题就是:
-
你对机械硬盘价格的接受程度如何?如果每天一块钱比较 Okay 的话,那就不用管。
-
如果不 Okay 的话,笔记本是拿来供着的,或者真的很穷,那你可以查 ata wiki 看你的硬盘 parking 时间是否厂家设置太短,然后自行参考 old-en 的 workaround 去冒险~
正确的解决方法应该像这个里面说的那样:
bugzilla.novell.com/show_bug.cgi?id=816388
找问题多的硬盘厂商,提供建议,由 openSUSE 来修。
PS:我贴的那些链接我自己也还没时间看完。可能说的有偏差,见谅。
日立 1T 使用了 2 个月,数值是 63127, 如果按照 60W 的标准,两年都用不到。
首先膜拜下苏姐的钻研精神 m<(_ _)>m
其次,并不是所有的硬盘 60w 都会挂。只是部分笔记本硬盘出现了这个问题,于是就出现了这样的叫嚣。
因为笔记本要经常移动,有可能在移动过程中伤害磁盘,所以 APM 值设置的高一点应该也是为了这个原因。ThninkPad 笔记本都有主动式硬盘保护系统,也是在检测到震动的时候会暂时关闭硬盘。因为现在普遍的认知是:数据是无价的——为了数据安全几块硬盘并不算什么。
附上服务器上的一块西数企业级硬盘数据。已经运行了 2w 多小时,lcc 依然不到三位数。
smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.2.0-39-generic-uksm0.1.2.2] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net
=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000f 200 200 051 Pre-fail Always - 3
3 Spin_Up_Time 0x0003 211 185 021 Pre-fail Always - 4416
4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 27
5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0
7 Seek_Error_Rate 0x000e 200 200 051 Old_age Always - 0
9 Power_On_Hours 0x0032 071 071 000 Old_age Always - 21836
10 Spin_Retry_Count 0x0012 100 253 051 Old_age Always - 0
11 Calibration_Retry_Count 0x0012 100 253 051 Old_age Always - 0
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 27
192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 95
193 Load_Cycle_Count 0x0032 200 200 000 Old_age Always - 97
194 Temperature_Celsius 0x0022 107 102 000 Old_age Always - 43
196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0
197 Current_Pending_Sector 0x0012 200 200 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0010 200 200 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
200 Multi_Zone_Error_Rate 0x0008 168 168 051 Old_age Offline - 2186
而这块硬盘的 APM 显示是 Not supported.
Thinkpad 的主动式硬盘保护需要安装一个软件支持的,支持系统是 windows 哦。 think.lenovo.com.cn/support/driver/detail.aspx?DEditid=4993&docTypeID=DOC_TYPE_DRIVER&osid=234&treeid=3107518&args=%3Fcategoryid%3D3107518%26CODEName%3D3259B73%26SearchType%3D1%26wherePage%3D1%26SearchNodeCC%3D3259B73
在 Linux 应该无效吧。
所以是说不要管硬盘 apm 的配置值吗?恩,ssd 果然才是主角!
ssd 如果数据挂了是没有可能恢复的吧。
为了避免移动过程中伤害磁盘,APM 应该是设置低一点吧。
同学… 台机硬盘没有暂泊磁头的设置呦,只有开关机才会增加 LCC 次数。然后你偏偏还是个关机就是事故的服务器… 讲什么好呢…
得了吧,如果只是有开机才会增加 LCC 俺的那块 LCC70W+ 的盘是个啥情况,那得开关多少回机~
还有 suspend to ram/disk 以及 resume。
PS:说话客气点会死?说人不行你学阿苏找证据啊,你那块硬盘你得问你干什么了。
使用su -c 'hdparm -B 254 /dev/sda’可以设置APM_level值,但这样做不持久,每次重新启动系统就又变回原来的值,可以通过安装laptop-mode,然后修改/etc/laptop-mode/laptop-mode.conf中的
Power management for HD (hdparm -B values)
BATT_HD_POWERMGMT=128
LM_AC_HD_POWERMGMT=254
NOLM_AC_HD_POWERMGMT=254
这样做以后可以解决比如硬盘老响问题,并修改hdparm -B valuse