Jak přidat odkládací oddíl (swap) do běžícího systému

Odkládací oddíl je vyhrazené místo na disku, kam jádro operačního systému odkládá data, když zaplní fyzickou paměť RAM. „Jádrem“ samozřejmě myslím Linux a „operačním systémem“ linuxovou distribuci. Odkládací oddíl neboli swap je vytvořen při instalaci systému podobně, jako je vytvořen oddíl pro systém nebo uživatelská data.

Mám nový počítač a 2 GB RAM, takže jsem vytvoření swapu frajersky přeskočil. Firefox mě usvědčil z nabubřelosti – v jádru totiž existuje hlídač, který se jmenuje OOM Killer (out of memory killer, česky něco jako „zabiják těch, kdo sežerou všechnu paměť“). Pokud nějaký proces zaplní celou paměť, je zabit (killed, terminus technicus). A s ním také ten proces, který ho spustil. Protože tím šupákem na odstřel bývá Firefox a je spuštěn v grafickém prostředí, je sejmuto také grafické prostředí. Uvolní se sice téměř všechna paměť RAM, ale zároveň jsou ukončeny všechny programy, které byly na zabitém procesu (=grafickém prostředí) závislé. Česky řečeno „práce v prdeli“.

Je to korektní chování – aby jeden program neohrozil ostatní, je ukončen. Blbé je, že i jeho rodič, který je dost důležitý (opět grafické prostředí). Proto má svůj význam odkládací oddíl, i když si člověk myslí, že má paměti dost. Paměti není nikdy dost! V okamžiku, kdy je všechna zaplněna, jádro jedná zhruba takto:

  1. Pokud existuje odkládací oddíl, jsou nejméně používaná data přesunuta z RAM na odkládací oddíl. Bývá to diskový oddíl nebo soubor, médium řádově pomalejší než čipy RAM.
  2. Pokud ovšem není kam odklízet, zabije se proces, který v paměti zabírá nejvíc místa – protože se jeho odstraněním nejvíc získá. OOM killer tady funguje jako nejvyšší konstruktér. 😉

Ale dost teorie. Zkrátka se mi začalo stávat, že byla všechna paměť plná, nejen vinou Firefoxu. Nebylo kam odkládat a systém se stával nestabilním. Tak jsem se poohlédl po tom, jak si přidat swap. Při instalaci jsem si pro tyhle a jiné situace vytvořil diskový oddíl o velikosti cca 10 GB. Teď jsem ho tedy smazal, na volném místě jsem vytvořil gigabajtový swap, na zbytku pak znovu „záložní“ oddíl pro strýčka Příhodu.


Rozdělení disku

Rozdělení disku, odkládací oddíl vybrán

Nechci systém uspávat na disk, proto jsem vytvořil odkládací oddíl menší než je RAM. Kdybyste chtěli tuto funkci využívat, musel by swap mít velikost zhruba 2×RAM.

Jak ale sdělit systému, že má oddíl používat? Pomohla mi stránka na help.ubuntu.com. Příkazem sudo mkswap /dev/sda2 jsem diskový oddíl sda2 nastavil jako odkládací. Následně se odkládání aktivuje příkazem sudo swapon /dev/sda2. A je to! Ověřit, že systém odkládací oddíl používá, si můžete například příkazem free:

$ free
             total       used       free     shared    buffers     cached
Mem:       1803560    1706572      96988          0      43540     601832
-/+ buffers/cache:    1061200     742360
Swap:      1020116      45732     974384

Nebo si zobrazte části pseudosouboru /proc/meminfo, které obsahují řetězec „Swap“ (jsou to vlastně střeva jádra systému):

$ grep "Swap" /proc/meminfo
SwapCached:        620 kB
SwapTotal:     1020116 kB
SwapFree:       974384 kB

Odkládací oblastí nemusí být jen diskový oddíl – může to být i soubor v běžném souborovém systému. Je nutné jej předtím vytvořit příkazem dd, ale jinak se s ním pracuje stejně jako s oddílem. „V Linuxu je všechno soubor…“ 😉 Více na uvedené wiki stránce.

Nakonec ještě zbývá nastavit, aby se oddíl automagicky připojoval při každém startu systému. O to se stará soubor /etc/fstab, takže doplníme řádek

/dev/sda2   none   swap   sw   0   0

První je diskový oddíl, slovo none znamená, že se nemá připojovat nikam do adresářové struktury, následuje typ, opět parametr vyřazující jiné volby a nakonec dvě nuly, které zamezují kontrole souborového systému – žádný tam není.

Ještě jedna věc mě zaujala – jak jádro pozná, že už je třeba data šoupnout do swapu? Nebo jak moc a jak často odkládá? Zhruba to postihuje swappiness, tedy hodnota vyjadřující nutnost swapování. Minimální je nula, která znamená „Vydržaj, pijaněr!“ čili neodkládat do swapu, dokud to jde. (Já třeba když musím, tak musím, jinak bych se po–.) Maximální je sto, což znamená, že jdou data z paměti rovnou na disk do swapu. Ubuntu podle wiki používá hodnotu 60 – jak jsou na tom další systémy? Parametr se nastavuje v souboru /etc/sysctl.conf, ale zatím jsem to ještě nezkoušel. Příště, až nebude co bourat…

5 komentářů u „Jak přidat odkládací oddíl (swap) do běžícího systému“

  1. Na desktopu jsem dlouhou dobu úspěšně pracoval bez swapu. Dokonce jsem měl tolik místa v paměti, že jsem si zavedl RAM disk. U notebooku už to ale bohužel aplikovat nešlo, protože suspend vyžaduje minimálně tolik swapu, kolik je RAM.

  2. Jo firefox – to je o nem zname, ze je to nenazrany bumbrlicek. Proto jsem se slzou v oku zacal v praci pouzivat Operu. Neni lepsi funkcne, ale rozhodne neni tak nenazrana co se tyka systemovych prostredku kdyz mate otevrenych x zalozek (tabs??)

  3. Tak milý Vlasto Otte, právě jsi mi vytáhl třísku z p….

    Mockrát dík 🙂

  4. Tak jinak. Například správce disků KDE, GParted a další. V menu disku mají možnost Připojit/Odpojit odkládací oddíl. Takže už není třeba používat ty dva uvedené příkazy. Jen je třeba do fstabu přidat swapovací oddíl.

    Anebo vše řešit swapovacím souborem.

Komentáře nejsou povoleny.