Hlavní navigace

Jak na uspávání disku v Linuxu?

3. 9. 2007
Doba čtení: 7 minut

Sdílet

Velké množství uživatelů používá ke své práci notebooky, a tak by chtěli, aby měly jejich počítače co nejdelší výdrž na jedno nabití baterií. Tomu pomůže i rozumné zastavování nepoužívaného disku. Velmi často se však disky zase samy po několika sekundách roztáčejí. Čím je to způsobeno? Jak skutečně uspat?

Nedávno se mi ozval jeden známý, který měl problémy se svým linuxovým notebookem. Nastavil si uspávání disku, aby ušetřil nějakou tu minutu drahocenné energie, ale disk ne a ne usnout. Tedy on se sice zastavil, ale po několika málo sekundách jej zase nějaká systémová aktivita probrala a on se roztočil.

Protože můj kolega není jediný, kdo něco podobného řeší a na mnoha diskusních fórech se to podobnými otázkami jen hemží, rozhodl jsem se sepsat článek, který vše podstatné okolo disků vysvětlí a především uživatelům poradí, jak vyřešit běžné problémy.

Existuje řada skriptů a balíků, které řeší některé zde zmiňované problémy za uživatele. My ovšem půjdeme do hloubky a vysvětlíme si, jak to uvnitř chodí a co můžeme zvládnout ručně. Víc informací přece nikdy neuškodí a budete schopni vyřešit problémy, které třeba skripty nezvládly.

Uspávání disku

Disky patří v noteboocích mezi podstatné konzumenty elektrické energie. Samozřejmě nejsou samy a při vysávání baterky spolupracují například s displejem, procesorem a pamětí. Na rozdíl od ostatních zmiňovaných periferií se ovšem s diskem dá alespoň něco dělat.

Velmi často totiž během delší práce disk vlastně vůbec nepotřebujete. Když sedíte ve vlaku a píšete článek v oblíbeném textovém editoru nebo upravujete fotografie a hrajete si s každou deset minut, pak se pravděpodobně bude váš disk nudit, přestože se stále točí a konzumuje energii.

Ideální by tedy bylo disk po nějaké době, kdy není potřeba, automaticky vypnout. Někteří uživatelé se uspávání disku bojí, protože ví, že snižuje jeho životnost. To je samozřejmě pravda, konkrétní čísla vás ale snad uklidní.

Běžný stolní disk vydrží „papírově“ asi 40 000 roztočení. Pokud bychom jej tedy zastavovali a roztáčeli každých 10 minut, nevydržel by nám ani rok. Proti tomu u disků určených pro notebooky se předpokládá, že budou častěji roztáčeny. U takového disku tedy výrobce obvykle garantuje 300 000 roztočení. To při stejné desetiminutovce dělá asi šest let života. Tedy za předpokladu, že byste takto notebook provozovali 365 dní v roce. Nemusíte se tedy nějaké újmy bát.

Pro konfiguraci uspávání pevného disku můžeme použít systémový příkaz hdparm. Stačí jej zavolat s parametrem -S a údajem o čase. Ten je vyjádřen číslem 0 – 255. Ten vyjadřuje časové úseky a je odstupňován v několika úrovních:

Časy pro hdparm
číslo časový údaj na jednotku
0 vůbec nezastavuj
1 až 240 jednotka je 5 sekund
241 až 251 jednotka je 30 minut
252 21 minut
253 dle výrobce 8 až 12 hodin
254 rezervovaný údaj
255 21 minut a 15 sekund

Příklad: 120 je deset minut (120 * 5 sekund), 244 jsou dvě hodiny

Můžeme tedy rovnou zavolat:

$ hdparm -S 6 /dev/hda

To způsobí, že pokud se na disk nebude 30 sekund „sahat“, automaticky se zastaví. Při jakékoliv další aktivitě se automaticky rozeběhne a začne odpovídat. A tak stále dokola.

Bohužel to nebude tak jednoduché a většinou se vám disk hned po několika málo sekundách zase roztočí. Za normálních okolností totiž systém k disku přistupuje dle potřeby – tedy velmi často.

Omezujeme použití disku

Existuje samozřejmě několik různých metod, které můžeme použít, abychom co nejvíce omezili počet interakcí s diskem. Ty nejdůležitější si nyní postupně popíšeme.

Laptop mód

Za normálních okolností zapisuje jádro na disk po malých dávkách a rozkládá tak zátěž do delších časových úseků. To ale samozřejmě brání zastavování disků, protože ty jsou stále potřeba.

V případě, že aktivujeme takzvaný Laptop mode, začne systém automaticky pracovat tak, že se bude snažit co nejvíce věcí vyřídit v krátkých časových úsecích a po zbytek práce nechat disk na pokoji.

Konkrétně to znamená, že se při práci s diskem snaží systém natahat co nejvíce dat předem do paměti, vysypat veškeré cache na disk a podobně. Zároveň se například prodlouží veškeré periody pro odkládání stránek na disk.

Změní se i nastavení správy paměti. Pokud systému začne docházet paměť, obvykle začne vyprazdňovat cache a zbavuje se některých stránek z paměti. V Laptop módu jsou ale při zahazování upřednostňovány ty stránky, které nevyžadují zápis na disk a je možné je smazat rovnou, třeba proto, že už na disku jsou.

Tento režim si některé distribuce aktivují automaticky a je možné jej zapnout v konfiguračních souborech. Pokud ovšem váš systém ničím podobným nedisponuje nebo si přejete zapnout režim ručně, stačí zapsat jedničku do souboru v adresáři  /proc:

$ echo "1" > /proc/sys/vm/laptop_mode

Pro vypnutí režimu stačí do stejného souboru zapsat nulu.

Omezení souborového systému

Kromě uživatele a různých aplikací generuje komunikaci s diskem i samotný souborový systém. I když jen čteme soubory z cache, jádro na disk zapisuje časové značky informující o posledním přístupu k souborům.

Tuto vlastnost ale můžeme snadno vypnout a zabránit tak velké části zápisů. Budeme k tomu potřebovat parametr noatime, který přidáme do souboru /etc/fstab.

Další možností je nastavení synchronizací write cache s fyzickým diskem. Pokud totiž něco zapisujeme na disk, obvykle se informace zapíší jen do paměti a na disk se dostávají, „až je čas“. Existuje ale konstatní časový úsek, po kterém se data zapíší vždy. Dojde tedy k vylití cache na disk.

Tento čas je standardně nastaven na pět sekund, ovšem v případě notebooku je to obvykle příliš krátký čas. Náš počítač je napájen baterií, takže nás neohrozí výpadek elektrické energie a můžeme si tak dovolit tento čas prodloužit. K tomu slouží další mount parametr, tentokrát commit, který je následován údajem o počtu sekund pro sync. Výsledný řádek v /etc/fstab by tedy mohl vypadat takto:

/dev/hda1   /   ext3    noatime,commit=300 0 1

Tím způsobíme, že se nebudou zapisovat časové značky a write cache se automaticky vyprázdní až po pěti minutách. Čase je možno samozřejmě zkrátit dle vašich požadavků. V každém případě je i během této periody možno důležitá data na disk dostat. Stačí k tomu použít příkaz

$ sync

Logovači systémových událostí

Pokud provedeme výše uvedená opatření, náš notebook nemusí disky roztáčet třeba i deset minut. Pokud nebudeme vůbec zapisovat, může nám vypnutý disk vydržet i mnohem déle.

Tedy za předpokladu, že nespustíme už zmíněný příkaz sync nebo jej některá aplikace nespustí za nás. To je případ například démona syslogd. V jeho zájmu totiž je, abyste v logu měli doopravdy všechny důležité informace. Po každém zápisu tedy sám způsobí synchronizaci, abyste i po pádu systému měli informace o tom, co se stalo.

Toto chování se samozřejmě nehodí pro notebooky a tak by bylo záhodno jej změnit. Samozřejmě se můžeme démona zbavit, ale to bychom přišli o mnoho důležitých informací. Rozumnější je, ho přesvědčit, aby „nesyncoval“.

Konfigurační soubor tohoto démona se nachází v souboru /etc/syslog.conf. V něm jsou uloženy informace o tom, co a kam se bude zaznamenávat. V souboru budou tedy řádky jako

user.*  /var/log/user.log

To znamená, že se všechny systémové hlášky týkající se uživatelů budou automaticky zapisovat do uvedeného souboru a automaticky dojde k synchronizaci disků. Pokud jí chceme zabránit, stačí jednoduše před cestu k souboru připsat pomlčku.

user.*  -/var/log/user.log

Po restartu démona už se nebude sync provádět. Doporučuji ovšem zvážit, ke kterým souborům pomlčku připíšete, kritické informace by bylo dobré mít určitě na disku pro odhalování systémových problémů.

Další nezbedové

Může se stát, že i přes všechna tato opatření se některý nezbedný proces bude stále domáhat přístupu k disku a stále jej roztáčet. Existuje jednoduchý způsob, jak takového „viníka“ odhalit. Systém totiž dokáže informovat o tom, kdo a jak přistupuje k diskům.

Nejprve je potřeba, abyste zastavili logovacího démona syslogd. Ten by totiž mohl způsobit zacyklení, protože by se všechny informace o zápisech na disk snažil zapsat na disk a tím by způsobil další zápisy…

$ /etc/init.d/sysklogd stop

Poté v jádře aktivujeme zápis informací o tom, kdo se to snaží pracovat s diskem.

echo "1" > /proc/sys/vm/block_dump

Výstup získáme s pomocí příkazu dmesg. Jednotlivé řádky mohou vypadat například takto:

kdeinit(7512): WRITE block 32541 on hda1

To znamená, že proces kdeinit s uvedeným PID zapsal blok dat na disk hda1. Pokud nebude proces nijak agresivní, měl by jen pozměnit stránku v cache, což se projeví hláškou:

bash(3556): dirtied inode 26545 (.bash_history) on hda1

Znamená to, že byl pozměněn (doslova zašpiněn) soubor .bash_history, ale nedošlo k jeho zápisu. Pokud budete mít hlášek v systému příliš mnoho, můžete filtrovat jen slovíčko „WRITE“.

root_podpora

Závěrem

Doufám, že vám tyto informace pomohou udržet váš notebook déle v kondici. Správně nastavené uspávání disku může prodloužit běh vašeho notebooku na jedno nabití až o několik desítek minut. Kromě toho, že déle vydrží, nabídne vám také nižší teplotu a méně hluku.

Samozřejmě se vám uspávání nemusí hodit jen k notebooku, ale i například váš domácí server bude rád, když bude moci na chvíli disky zastavit, ušetřit vám část účtu za elektřinu a předvést vám, jak umí být tichý.

Používáte notebook?

Byl pro vás článek přínosný?

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.