最近購買了一顆 Seagate 晶鑽 2.5吋 500GB 行動硬碟要拿來在 Linux 下做備份資料用。

當然啦,最基本的一定是先建 Partition,再來就是 mkfs.ext3。到此為止都還算順利。

開始使用就先 copy 約 80GB 的資料進去。等到隔天複製完了再把它卸載,收起來。 過了幾天,把硬碟接上,並進行掛載。咦?有錯誤訊息?

EXT3-fs warning (device sde1): ext3_clear_journal_err: Filesystem error recorded from previous mount: IO failure
EXT3-fs warning (device sde1): ext3_clear_journal_err: Marking fs in need of filesystem check.
EXT3-fs warning: mounting fs with errors, running e2fsck is recommended
EXT3 FS on sde1, internal journal
EXT3-fs: mounted filesystem with ordered data mode.

怪了,我不可能沒有卸載就拔 USB 插頭的,怎麼會有這種問題咧?

後來直接觀察 log,第一時間的判斷就是,硬碟去睡覺了。睡了之後,叫不醒。便開始 Google 資料了。

Google 後,證實為 Seagate 自作聰明,會讓硬碟 Spindown。要在 Windows 下才會叫的起來。在 Linux,Mac 下,都會有叫不醒的問題。國外有蠻多討論的。也有人用 crontab 很頻繁的去動一下硬碟,讓它不要昏過去。不過,這方式實在不漂亮,我不太能接受,所以,繼續尋找解決方案。

後來找到一篇用 sdparm 去修改硬碟的設定值,就姑且一試:

先檢查硬碟的狀態:

# sdparm -a /dev/sde
/dev/sde: Seagate Portable 0130
Power condition mode page:
IDLE 0 [cha: n, def: 0, sav: 0]
STANDBY 1 [cha: y, def: 1, sav: 1]
ICT 0 [cha: n, def: 0, sav: 0]
SCT 3000 [cha: y, def:3000, sav:3000]

更改硬碟 STANDBY 的值:

# sdparm --clear STANDBY -6 /dev/sde
/dev/sde: Seagate Portable 0130

啟動硬碟:

# sdparm --command=start /dev/sde
/dev/sde: Seagate Portable 0130

最後確認硬碟的狀態:

# sdparm -a /dev/sde
/dev/sde: Seagate Portable 0130
Power condition mode page:
IDLE 0 [cha: n, def: 0, sav: 0]
STANDBY 0 [cha: y, def: 1, sav: 1]
ICT 0 [cha: n, def: 0, sav: 0]
SCT 3000 [cha: y, def:3000, sav:3000]

 

這兩天測試,複製資料,複製完後就丟著不管它,放一整個晚上,隔天也不會有叫不醒的情形。所有的 mount,umount 都可以正常操作,沒有任何的錯誤訊息。

以上資料僅供參考,如果操作後有任何得問題恕不負責。

7/13 更新:
我的硬碟只要從主機上拔下,再接回去之後 STANDYBY mode 就會自動再變回 1。也就是說,改過的設定並沒有記下來!最後,還是透過 Seagate Windows 下的專屬軟體 Free Agent 來去修改它的 Power Spindown 設定。希望這次真的是一勞永逸了。

參考來源:
http://alienghic.livejournal.com/382903.html