tirsdag den 14. april 2009

Hvorfor klikker min harddisk...

Jeg havde lagt mærke til at harddisken i min EEE Box klikkede flere gange i minuttet. Troede i første omgang at det bare var almindelig disk access, men det lader til at være et kendt og frygtet fænomen i Ubuntu (og for den sags skyld andre Linux distroer) - det er simpelthen unload/load mekanismen (til parkering af læse/skrivehovedet) i harddisken der aktiveres!

Dette sker normalt for at beskytte harddisken i f.eks. bærbare mod at crashe, når man flytter rundt med dem mens de er tændt (ja, det er der nogen der gør!).

Problemet er bare at harddisk producenterne har sat tærskelværdien meget lavt, så hovedet parkeres sådan ca. hver gang der ikke har været aktivitet på disken i 5-6 sekunder. Dette koblet med at der i linux skrives et "last access time" tidsstempel på alle filer, hver gang de tilgås (også ved læsning OG også selvom filen ligger i disk cache!) gør at hovedet umiddelbart efter parkering bliver hevet ud af parkerings positionen.

I mit tilfælde har min EEE Box med Ubuntu 8.10 server været i brug i 26 dage og der har været 5 unload/load cykluser pr. minut = 7200 pr. døgn! I alt har den haft over 142.000 cykluser.

Producenter opgiver typisk MTBF for unload/load cykluser til 600.000 - er der nogen der kan se problemet? Jeg skulle få mine første fejl om ca. 3-4 måneder!

Problemet er dog heldigvis ikke svært at løse - først skal du installere smartmontools:
sudo apt-get install smartmontools

Dernæst checker vi lige om du har problemet - følgende terminal kommandoer opsummerer for hvert minut der er gået hvor mange cykluser der har været:
gcc() { smartctl -a /dev/sda | grep 'Load_Cycle_Count' | awk '{print $10}'; }; n=$(gcc); while :; do nn=$(gcc); echo "$(date) $((nn-n))"; n=$nn; sleep 60; done

I mit tilfælde havde jeg altså 5 pr. minut!

Hvis du vil se hvor mange cykluser dit drev har haft i alt skal du udføre følgende:
sudo smartctl -a /dev/sda | grep 'Load_Cycle_Count'

Her havde jeg altså 142.106 cykluser :(

Det er også meget rart at vide hvor mange timer drevet har kørt:
sudo smartctl -a /dev/sda | grep 'Power_On_Hours'

I mit tilfælde 636 (= ca. 26 dage, i skrivende stund).

Næste logiske spørgsmål er så: Hvad gør man ved det?

Hvis du har Ubuntu 9.10 eller derunder, skal du tilføje følgende tekst i slutning af /etc/hdparm.conf:
/dev/sda {
apm = 254
spindown_time = 0
}

Hvis du har Ubuntu 10.04, skal du tilføje følgende tekst i slutning af /etc/hdparm.conf:
/dev/sda {
apm = 254
apm_battery = 254
}

Dette sætter powersave til næstmindste niveau og forhindrer at drevet går i standby/sleep (spindown).

Filen hdparm.conf læses af systemet under boot og sætter parametre for de drev man har valgt at definere i filen.

For at aktivere funktionen uden at genstarte systemet skal du udføre følgende kommando i et terminal vindue:
sudo hdparm -B 254 /dev/sda

Der er en del sites på nettet der foreslår at sætte parameter værdien til 255 (=APM OFF), men det virker desværre ikke for alle producenters drev, hvilket værdien 254 skulle gøre - det har i hvert fald løst problemet på min bærbare med Intrepid Desktop og min EEE Box med ditto Server version.

Ikke mere klikkeri! (og forhåbentlig et længere liv til mine harddiske)...

Research kilder: Slashdot.org, Ubuntu Launchpad

9 kommentarer:

  1. Hey - googlede mig hertil - og lige hvad jeg ledte efter!

    SvarSlet
  2. Hov - denne tekst virkede ikke for mig - kan ikke gennemskue hvad der er galt...???
    sudo lcc() { smartctl -a /dev/sda | grep ‘Load_Cycle_Count’ | awk ‘{print $10}’; }; n=$(lcc); while :; do nn=$(lcc); echo “$(date) $((nn-n))”; n=$nn; sleep 60; done

    SvarSlet
  3. Hej Simon,

    En af mine venner har også haft problemer, det lader til at lcc compileren ikke var installeret på hans maskine. Det mystiske er at den er installeret på både min server og mine to laptops - uden at jeg har gjort noget specielt for det (andet end at installere build-essentials, hvilket den åbenbart ikke er en del af).

    Jeg graver i øjeblikket efter løsningen - det er svært at finde noget om det på Google :(


    /Thomas

    SvarSlet
  4. Så fandt jeg fejlen(e):

    1. lcc står for "Local C Compiler" - hvorfor jeg har den installeret aner jeg ikke, for den kan ikke installeres på normal vis, man skal selv kompilere den (med en anden compiler!).

    MEN! Man kan lige så godt benytte Gnu C compileren, så jeg har ændret dette i kommandoerne.

    Hvis du ikke har denne, skal du bare installere gcc pakken:

    sudo apt-get install gcc

    2. Når jeg indsatte kommandolinje teksten i mit WordPress indlæg stod den fint, men når man kopierede den fra indlægget (hjemmesiden) over i terminalvinduet blev alle klammamser (" og ') lavet om til nogle andre tegn og så virkede det selvfølgelig ikke.

    Fandt ud af at jeg skulle rette mit indlæg i HTML og sætte kommandolinje teksten ind imellem "code" tags, så bliver tegnene ikke ændret.

    Bottomline: Det virker nu!

    SvarSlet
  5. Takker for svaret, og hjælpen også... Lige nu klikker min harddisk i hvert fald ikke!

    SvarSlet
  6. Min siger godt nok en klik lyd.. ret tit.. som en bordtennis bold lige hopper en enkelt gang på bordet. jeg kører med windows 7.. og har ingen anelse om hvad jeg skal gøre.. det der i har nævnt ovenfor.. er det kun andet styresystem?

    SvarSlet
  7. Hej Rocky :)

    Ja, det er styresystemet Ubuntu (en variant af linux), så løsningen kan desværre ikke bruges på Windows.

    Men hvis din harddisk lyder som du beskriver, så er jeg næsten sikker på at den er ved at stå af - de klik jeg hentyder til er kun næsten hørbare og "kontrollerede" klik.

    Du må hellere få læst dine filer over på en ekstern harddisk og kontakte producentens supportnummer - går ud fra der stadig er garanti på din PC, siden den er installeret med Windows 7?

    /Thomas

    SvarSlet
  8. Æv! Det lader til at dette fix kun virker op til Ubuntu 9.10 - i 10.04 (Lucid) bliver kun en del af hdparm.conf læst af udev og altså desværre ikke den del der har med strømstyring af harddisken at gøre :(

    Så nu er der 2 ting der holder mig tilbage fra at opgradere min server - denne + mangler officielt Virtualmin script...

    Læs evt. mere om problemet her:
    https://bugs.launchpad.net/ubuntu/+source/hdparm/+bug/568120

    SvarSlet
  9. OK - så fandt jeg også løsningen på det problem - har rettet indlægget til med specifik løsning til Ubuntu 10.04 - kom ikke og sig jeg er langsom ;)

    /Thomas

    SvarSlet