Notebook Hardisk :硬碟經常發出怪聲/磁頭歸位聲的問題與可能解決方法

hardisk最近趁著硬碟正便宜的時候,為小 NB 換了一顆新的 WD Scorpio SATA 160GB 的硬碟,把原本日立的換了出來,使用起來相當愉快,但是卻發現一個問題,在夜深人靜的夜晚裡使用時,硬碟總是三不五時會發出「噠、喀」的聲音,如果這時候要讀取檔案或是切換程式就會聽到馬達重新啟動與高速旋轉的聲音,讓人感到相當厭煩。

照理來說,這種情況一般只發生在電腦關機與硬碟進入休眠的時候(在 Windows 當中做電源管理,當時間超過設定值的時候讓硬碟進入休眠狀態時有一樣的情況),通常這時候如果重新啟動檔案或動作,就會聽到類似的聲音,如果是新生代大概會以為是硬碟快掛了而緊張的半死,但是有經歷過 DOS 時代的人應該都會知道這是硬碟在做 Parking 的動作(磁頭歸位),當硬碟接收到 Parking 的命令時就會強制磁頭回歸到安全位置(這時候就會聽到類似「喀噠」的聲音),而硬碟馬達則會進入停止運作的狀態讓磁盤繼續旋轉至逐漸靜止,啟動檔案時磁頭又從原本的位置快速移出(「喀噠」again),馬達重新啟動帶動磁盤而出現高速旋轉音。

當硬碟資料受損、出現壞軌、磁頭要重新搜尋磁盤上的資料時,也會進行歸位停駐再重新啟動,所以老硬碟出現這種情況的時候大概就是硬碟快要掛點的時候了,這種聲音成為一個判斷的依據,可是以現在的製程來說,新硬碟是不可能在初期就發生這種事情的,因為如果是瑕疵品,那連安裝作業系統都會產生問題才對。

會一直停駐磁頭發出聲音的這個問題,其中是包含兩種技術在裏面的,一種是 Head Load/Unload Technology,就是前面提到讓硬碟磁頭歸位的技術,而馬達停止運作則是電源管理技術(Power Managgement),通常,這是因為電源管理程式或元件發出命令,指示硬碟要進入休眠或是停止狀態,硬碟才會讓磁頭歸位並且停止馬達的運作。

粗淺的來說是這樣,不過要先寫一下別的東西。硬碟基於資料保護與資料延續等原因與義務,是有限制使用壽命的,這是一種人為的規範,也是一種人為的刻意限制,並非物理性運作的壽命時間,原因是避免硬碟過度長時間使用、等到硬碟真的發生故障後會造成資料無法挽救的狀況;像是一般硬碟會強調「平均故障時間 300,000 小時」,實際上硬碟可以使用的時間遠超過這個數字,但是這樣的機制是讓使用者知道這顆硬碟是否差不多該換了,許多資訊單位也會依照這樣的設定值去更換以達運作時間限制的硬碟,即使硬碟本身依然是好的,原因不外乎「資料無價」。

但是要怎麼知道知道這顆硬碟的使用時間呢?現在的硬碟本身就會將這些基本資料給紀錄下來,只要用相關軟體就可以讀取出來,當然,除了使用時間之外,硬碟內記載了相當多的運作資料,同樣也會記載磁頭歸位的次數(在軟體內查詢通常就是 Load/Unload 的次數),供相關人員做問題分析或是預防資料遺失,而一般硬碟磁頭機件歸位與重新啟動的總次數通常上限是 600,000 次,不過這就不是人為的規範或限制了,而是馬達、軸承等機件的物理壽命頂多就是如此,因為這種歸位停駐的技術是強制進行的,自然會影響到運作機件的物理性壽命。

如果以平均使用三年就進行汰換的個人電腦而言,600,000 的次數讓硬碟每天可以啟動關閉 547.95 次,平均每個鐘頭可以開開關關 22.83 次之多,平均每一分鐘可以開關硬碟一次,早上上班電腦開機後、一直工作到中午、吃個飯回來下午工作到下班、電腦關機,每天開關機加上休眠的次數,根本不到 100 次,600,000 次對於一般人的使用而言綽綽有餘,以數字回推的話,一部硬碟用個十年都不是問題。

或許是近年來省電節能喊的太大聲了,現在的新硬碟都搭載了新的進階電源管理技術(Adcanced Power Management,APM),尤其是號稱搭載先進電源管理技術的SATA硬碟更是如此,只要設定的時間一到,就可以命令硬碟進入休眠,磁頭歸位、馬達停止運作,直到接收到新的命令在進行啟動。一般桌上型電腦的 3.5 吋硬碟都會保持在持續運作的狀態,直到關機或是作業系統命令其休眠才會做磁頭停駐的動作(通常作業系統的設定為主要依據的設定),但是在筆記型電腦或隨身硬碟常用的 2.5 吋硬碟上這種技術卻是常駐且自動進行的,而廠商通常都把這個時間設定的很短,只要幾秒鐘沒有讀取,硬碟就自動進入休眠狀態。

廠商對此當然有其一套說法,在筆記型電腦或隨身硬碟當中,只要磁頭經常性的進行歸位停駐,就更有機會避免突然性的碰撞或振動造成磁頭撞擊磁盤所引起壞軌或資料損失的問題,但是這卻讓磁頭短時間內 Parking 的次數大幅升高,尤其是 SATA 硬碟,所以也會不斷聽到那種「喀噠」聲,而即使硬碟本身並沒有被 Unload 掉或是停機,這也會記入了一次 Load/Unload ,因為磁頭實際上的確進行歸位停駐而並非單純的降低用電量而已(之後可以自行測試並且用軟體觀看數字累計)。

通常,筆記型電腦只要接上 AC 電源就會被作業系統認定為是「Desktop 的型態」而避免硬碟進入休眠狀態,但是在一些竭盡所能延長電池使用時間的廠牌當中(像是 SONY ),就算接上 AC 電源依然會被認定為是 Laptop 的型態,除非使用者把電池給拔了,也就是說只要在有裝上電池的情況(例如充電),作業系統就會認定這是一台筆記型電腦而去回應相關的軟硬體(就算電池電量滿的也一樣);在作業系統當中強制設定其是 Desktop ,硬碟的出廠設定也會覆蓋過作業系統的命令進入電源管理的狀態,磁頭停駐的聲音就會不斷出現(次數也不斷的累計上去),而磁頭機件是有其壽命限制的,最多就那 600,000 次,差一點的硬碟可能就只有 300,000 次;而我絕對不會去推測說這是廠商為了提高使用者更換硬碟的機率所做的設定。

這個問題首次被拿出來討論是在 Ubuntu 的社群裡,7.10 (或是 8.04) 之後的版本只要安裝在 NB 上頭,使用者就發現磁頭停駐的狀況非常明顯的大幅提高了,這很明顯是作業系統本身的問題,對以 Ubuntu 工作的使用者來說,一整天的時間累積下來磁頭停駐的次數簡直是難以想像,如此頻繁的 Parking 沒有人敢保證硬碟磁頭與磁臂不會因此掛點,而這個「硬碟聲音吵鬧」的問題也不斷的回報到 Ubuntu 與 Debian 的社群與討論區當中,聽說新版的 Debian 已經解決了這個問題,但是 Ubuntu 直到 9.04 Alpha 6 似乎依然沒有解決(因為我正在使用這個版本)。

但是當我切換回 Windows 時,也發現這個問題同樣存在,這時候就面臨 Windows 本身對於硬體的控制能力比 Linux 弱,無法進行相關的設定,所以這不但是硬碟本身出廠 APM 設定值的問題,同時也是作業系統 APM 管理與設定的問題。針對不同的作業系統就只好找出不同的解決方案:

1. Ubuntu :
Ubuntu 在 8.04 之後在這方面有略做改善,但是 Ubuntu 接受廠商的說法,只要 Ubuntu 偵測到是 NB 時,就採取硬碟廠商的預設值(或是一般硬碟普遍會採用的 APM 設定),但是卻沒預料到電池接不接上會造成誤判、硬碟本身會自動進行管理、2.5 吋 SATA 硬碟普遍預設時間都很短的問題,簡單的解決辦法是執行下列命令:
sudo hdparm -B 255 /dev/sda
hdparm 是 Linux 當中針對硬碟進行細微設定的老程式,「-B」則是針對硬碟進行 APM 的設定,數值範圍在 0~255 之間, 128 為硬碟標準設定值,254 是最大值,255 則是關閉 APM 。

但是每次都要在開機之後手動執行命令列關閉,很麻煩,寫死在 session 裏面也不能應付狀況的改變,解決的方法是直接從開機設定值著手,而這個設定通常放在 /etc/acpi/ac.d、/etc/acpi/resume.d/、/etc/acpi/start.d/、/etc/acpi/battery.d/ 這些資料夾當中的 90-hdparm.sh
DO_HDPARM=y
if [ -e /usr/sbin/laptop_mode ] ; then
LMT_CONTROL_HD_POWERMGMT=$(. /etc/laptop-mode/laptop-mode.conf && echo “$CONTROL_HD_POWERMGMT”)
if [ "$LMT_CONTROL_HD_POWERMGMT" != 0 ] ; then
# Laptop mode controls hdparm -B settings, we don’t.
DO_HDPARM=n
fi
fi
注意第一行的判斷式,將其改成:
if [ -e /var/run/laptop-mode-tools/enabled ] ; then
根據一些文章與討論是可以改善部份 NB 的問題,但是我倒是懶得改這部份,注意更後面的部份:
if [ "$STATE" = "BATTERY" ] ; then
hdparm -B 128 $dev
else
hdparm -B 254 $dev
fi
我覺得判斷失準的部份在這裡,因為電池接上後,就算有 AC 電源,偵測 BATTERY 還是會回應「存在」的,所以我把設定值改成這樣:
if [ "$STATE" = "BATTERY" ] ; then
hdparm -B 254 $dev
else
hdparm -B 255 $dev
fi
有電池的狀態就以最長無命令的時間才進行休眠,不要動不動就休眠,而在沒電池的狀態(這時候一定是用AC電源),乾脆就把 APM 給關了,硬碟從此不會莫名其妙喀喀咻咻叫;

2. Windows XP/Vista
在 Windows 當中很怪的是,我找不到相關的「隱密」設定能夠越過硬碟的出廠值的,即使在 Windows 的電源管理當中把 APM 給關了,只要接上電池,硬碟依然很頻繁的進行 Parking 的動作,看來 Windows 並沒有辦法 Over 過硬碟內的設定值,而這時候就要求助其他的軟體。
在網路上找到一個叫作 CrystalDiskInfo 的免費軟體,它不但可以查出硬碟中已經紀錄下來的統計資料(S.M.A.R.T. info),也可以調整或關閉各廠牌硬碟的 APM 功能:

不關閉而要改設定成高效能也行,可是!一般 IDE 硬碟和部份品牌的 SATA 硬碟支援軟體寫入相關設定,但是像是 WD 的 SATA 硬碟就不行,只好在 CrystalDiskInfo 當中設定隨作業系統啟動、常駐於通知區域、與自動套用 AAM/APM Control 了,幸好程式並不大,並且可以監控一下硬碟的執行溫度,還不錯咧;

3. Mac OS X
如果 Macbook / Macbook pro 自行更換硬碟後,可能會發生相同的問題,也有可能發生更嚴重的問題(像是失去保固或是一些OOXX的),基於 Apple 平均每兩年會更新一次產品線與相關產品配備、 Mac OS X 每更新幾版就會淘汰舊的硬體 Model 、以及 Mac 與市場上硬體低弱的相容性, Mac 版的解決方案請往這走 ,不然就是只能往這走囉

最近發現到,會關注一些電腦硬體細節的人是越來越少了,很多人在買車時會比較車的性能、車的配備,買了之後會注意開車的安全性、舒適性,在買手機的時候也會比較手機的功能、手機的使用時間,買了之後會注意手機的細微功能、個人化、通話品質等,但是對於電腦硬體大多人卻都不想懂,這還真是一個奇怪的現象。(「學長~我的筆記型電腦剛買來硬碟就喀喀叫~是不是壞了?幫我換硬碟~」 XD)