Využití technologie zRAM u systému GNU/Linux s malou pamětí

zRAM je vlastnost linuxového jádra poskytující formu virtuální komprese paměťového prostoru. Díky této technologii lze vytvářet komprimovaná bloková zařízení, která jsou umístěna v operační paměti počítače. Tato zařízení můžeme také, i když velmi zjednodušeně, označovat i jako virtuální „diskové“ prostory. V současné době můžeme vybírat ze dvou kompresních algoritmů. Tím prvním, a výchozím, je LZO, druhým pak LZ4.
Následující článek je jednoduchý návod, jak vytvořit swap, adresáře /tmp/var/log za použití technologie zRAM.V mém případě je technologie zRAM nasazena zatím pouze na embedded zařízení Alix 3D3. Jedná se o zařízení s i586 CPU AMD Geode LX800 pracujícím na 500 MHz, 256 MB DDR DRAM a diskovým prostorem na CompactFlash. Nasazeným operačním systémem je Arch Linux i686 se systemd. Operační paměti není nazbyt a využití CompactFlash pro některé funkce nepřichází, vzhledem k omezenému počtu zápisů, v úvahu. Z toho důvodu jsem se rozhodl využít právě technologie zRAM. Pro příslušné souborové systémy lze využít tmpfs, tedy opět oblast v operační paměti, nicméně není komprimována. Velikost ukládaných dat aplikací = velikosti uložených dat v paměti. V případě zRAM se udává tento poměr cca 3:1.

Co nás čeká? Plánování > zavádění modulu jádra > vytvoření souborového systému  > připojení souborového systému > vytvoření dalších potřebných adresářů.

Konfigurace

V distribuci Arch Linux není potřeba pro zprovoznění zRAM kompilovat jádro, moduly ani instalovat dodatečný software. Vše je obsaženo v základním systému.

Plánování

Před vlastní konfigurací je důležité si rozmyslet, které adresáře budou umístěny v souborovém systému vytvořeném v zRAM. To z toho důvodu, že po vypnutí/restartu nebudou data uložená v těchto adresářích k dispozici – jsou uloženy v operační paměti RAM. Tyto adresáře se vytvoří při startu systému znovu.

Pro mé účely bude dostačující umístit do zRAM adresáře /tmp/var/log. Adresář /tmp bývá obvykle po startu vymazán a logy ve /var/log zachovat nepotřebuji. Ty nejdůležitější informace jsou přeposílány službou syslog-ng na vzdálený server.

Pro některé služby je však potřeba po startu systému, a vytvoření /var/log v zRAM, vytvořit adresáře pro ukládání vlastních logů. Jsou to např. minidlna, named, nginxsquid. Bez těchto adresářů nelze příslušné služby spustit.

Potřebujeme tedy následující informace: které adresáře umístíme do zRAM, co bude dále potřeba vytvořit, kopírovat – s jakými vlastníky a oprávněními.

Příklad:
adresáře:
/tmp/ o velikosti 30 MB, /var/log/ o velikosti 20 MB
vytvořit:
/var/log/minidlna 0755 minidlna:minidlna
/var/log/named 0755 named:named
/var/log/nginx 0755 http:log
/var/log/squid 0755 proxy:proxy

Zavedení modulu jádra po startu systému

Modul jádra operačního systému má název zram. Prvním předpokladem pro úspěšnou konfiguraci je jeho zavedení při startu systému. Pro tento účel vytvoříme v adresáři /etc/modules-load.d/ soubor zram.conf. Ten bude obsahovat název modulu, tedy zram.

Nyní nastevíme parametry modulu. V adresáři /etc/modprobe.d/ vytvoříme soubor zram.conf, ale s jiným obsahem.

Parametr num_devices modulu zram říká, kolik blokových zařízení má vytvořit v adresáři /dev/. V tomto případě to budou /dev/zram0, /dev/zram1/dev/zram2. Každý z našich vybraných adresářů bude vytvořen na jednom specifickém zařízení. Např. /var/log na /dev/zram0, /tmp na /dev/zram1, swap na /dev/zram2. Musíme nechat vytvořit správný počet. Pokud jich bude více, nevadí. Zůstanou nevyužita.

Informace o modulu a jeho parametrech získáme pomocí příkazu modinfo:

Výše uvedené soubory zajistí zavedení jaderného modulu s těmi správnými parametry.

Nastavení zařízení zRAM a vytváření souborových systémů

Modul máme zaveden. Pro jeho využití musíme nadefinovat velikost příslušných blokových zařízení a vytvořit souborové systémy.

Tyto operace můžeme provést skriptem, anebo využijeme udev. Vytvoříme soubor /etc/udev/rules.d/10-zram.rules s následujícím obsahem:

Parametr ATTR{disksize}= definuje velikost zařízení, RUN+="/usr/bin/mkfs.ext4 -O ^has_journal -L TMP $env{DEVNAME}" obsahuje příkaz pro vytvoření souborového systému EXT4, bez žurnálu. Lze vytvořit EXT2, nicméně EXT4 je o něco výkonnější a systém nebude zavádět další modul – EXT4 využívám také pro root a datový disk. Souborový systém bez žurnálu proto, že při výpadku napájení přijdeme o data (to nám nevadí), žurnál zabýrá cenný paměťový prostor a částečně zatěžuje procesor.

Třetí zakomentovaný řádek vytváří v blokovém zařízení swap. Jelikož je ale zakomentovaný, neprovede se.

Pokud bychom chtěli využít kompresní algoritmus LZ4, přidáme na příslušný řádek mezi parametry ATTR{comp_algorithm}="lz4".

Připojování souborových systémů

Jedním z posledních kroků je nastavení připojování souborových systémů na správná místa. Do souboru /etc/fstab přidáme následující:

Pokud ale již nějaké zařízení na příslušné adresáře připojujeme (druhý sloupec), vše si ještě jednou promyslíme a případně změníme. Třetí, zakomentovaný, řádek opět definuje připojení swap.

Vytváření dalších adresářů na novém souborovém systému

Jak bylo uvedeno v části plánování, některé služby potřebují existenci vlastních adresářů. Konkrétně služby minidlna, named, nginxsquid.

V adresáři /etc/tmpfiles.d/ vytvoříme následující:

Pokud tyto služby nevyužíváme, nebo využíváme jiné, konfiguraci upravíme. V případě, že po startu systému některé služby neběží, můžeme se pomocí příkazu journalctl podívat na příčinu a donastavením uvést systém do funkčního stavu.

Kontrola stavu

Po restartu operačního systému si můžeme ověřit, zda je vše tak jak má být.

Připojené souborové systémy:

Volné místo na souborových systémech:

Využití blokového zařízení zram0:

Velikost blokového zařízení zram0:


Přidáno 12. 07. 2015
Stejným způsobem nově připojuji adresáře /tmp/var/log u Rasberry Pi.

Leave a Reply