openSUSE a zvyšující se load_cycle_count

load_cycle_count je ukazatel který zaznamenává počet zaparkování hlaviček pevného disku. Po instalaci openSUSE 11.X jsem si všimnul divného cvakání disku. Toto cvakání je parkování hlaviček, zvuk se opakuje co cca 5-10 vteřin. Disk je konstruován tak, aby vydržel minimálně 300 000 těchto cyklů. Propočtem jsem zjistil, že u mě by disk přesáhl hranici 300 000 během jednoho roku, což určitě nění správně.

Jak zjistit že máte problém?
Použijte příkaz smartctl a hledejte aktuální hodnotu Load_Cycle_Count. V níže uvedeném výpisu je vidět, že disk byl v provozu 225 hodin a za tu dobu stihl 8852 zaparkování. Hodnota jde poměrně rychle nahoru, takže za minutu opakujte výpis a pokud se hodnota zvýšila, tak máte problém :)


# smartctl -a /dev/sda

PS: sda je můj interní disk, je možné že Váš bude trochu jiný, viz příkaz # fdisk -l

............
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 0x002f 200 200 051 Pre-fail Always - 0
3 Spin_Up_Time 0x0027 179 173 021 Pre-fail Always - 2050
4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 84
5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0
7 Seek_Error_Rate 0x002e 100 253 000 Old_age Always - 0
9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 225
10 Spin_Retry_Count 0x0032 100 253 000 Old_age Always - 0
11 Calibration_Retry_Count 0x0032 100 253 000 Old_age Always - 0
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 63
192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 6
193 Load_Cycle_Count 0x0032 198 198 000 Old_age Always - 8852
194 Temperature_Celsius 0x0022 110 100 000 Old_age Always - 37
196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0
197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0030 100 253 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 0
200 Multi_Zone_Error_Rate 0x0008 100 253 000 Old_age Offline - 0
............

Níže je řešení, které jsem testoval na openSuse 11.3, kernel 2.6.34.7-0.5-desktop, ale mělo by fungovat i na jiné verzi

Zastavení růstu Load_Cycle_Count:
Použijte níže uvedený příkaz, pokud se růst zastaví, máte vyhráno...
# hdparm -B 254 /dev/sda

Za předpokladu že hdparm zafungoval je třeba nastavit systém tak, aby tento příkaz pouštěl po startu a také po probuzení z uspání.

Vytvoříme jednoduchý script /usr/bin/hdd_apm_setup.sh, jehož obsahem bude:

#!/bin/bash
hdparm -B 254 /dev/sda

nastavíme mu právo na spuštění:
chmod +x /usr/bin/hdd_apm_setup.sh

Aby se nám script pustil po startu, doplníme ho včetně cesty do souboru /etc/init.d/boot.local
Pro spuštění po probuzení je třeba udělat link na náš script v adresáři /etc/pm/power.d
takže:
# cd /etc/pm/power.d
# ln -s /usr/bin/hdd_apm_setup.sh hdd_apm_setup.sh

a je hotovo...

Závěrečné postesknutí:
chyba nahlášena v roce 2009, má hezký status Critical, ale nikdo ji neopravil....