Na nabídku

Linuxové postřehy


Nějaké návody do Linuxu.

dosemu_win3-1.htmdosemu_win3-1.htmmandriva_vpc.htmmandriva_vpc.htmmint_11.htmmint_11.htm
mint_11_uziti.htmmint_11_uziti.htmubuntu_vpc.htmubuntu_vpc.htmunix-nt.htmunix-nt.htm


Ramdisk s ReiserFS

Linux je fajn. Kohosi moudrého napadlo, že do cache se dá použít i normální souborový systém jako je ext3. Má to vadu - je ho potřeba nastavit při každém startu systému a navíc do ní dát i strukturu aby se systémy, pro které to je, nevztekaly (v zásadě i hezký případ pro nasazení KWCMS s distribucí přes rsync -> data jsou v systému 2x, jednou v permanentním úložišti, kde se i spravují a podruhé distribuční v ramdisku).

Ramdisk funguje podobně jako běžný disk, včetně připojení do stromu v systému. Běžně mívá v základních instalacích od 4 do 64 MB. Z principu ho nelze vytvářet za běhu, protože jádro má stránky paměti už rozdělené, včetně ramdisků.

Je zajímavostí, že spíš než ramdisk najdete v nasazení tmpfs, který ale není úplně plnotučný a má problém s věcmi jako rychlé procházení prťavých souborů - klasický případ cache. Dost keců, jdeme na to.

Za prvé je potřeba systému říct, po kolika blocích má krájet paměť. To se dělá už v zavaděči jako parametr jádra.

ramdisk_size=1000000

Tahle hodnota se nastavuje v zavaděči, takže když napíšu /etc/grub.conf, už si snad dohledáte, kam to dát. Já mám připraveno 1 giga.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

Dál je potřeba vytvořit úlohu, kterou se bude ramdisk po startu formátovat, připojovat do systému a vytvářet strukturu. To se děje ve složce /etc/init/, kam se zapíše soubor, který ramdisk připraví.

## Ramdisk s ReiserFS
## naformatuj, pripoj a vyrob strom

description     "Mount Ramdisk with ReiserFS"

script
    mkreiserfs -q /dev/ram5
    mount /dev/ram5 /ramdisk
    mkdir /ramdisk/cache
    mkdir /ramdisk/cache/tmp
    chown www-data -R /ramdisk/cache
    chgrp www-data -R /ramdisk/cache
    chmod 775 -R /ramdisk/cache
end script

Ještě je třeba se ujistit, že v /etc/fstab není zaváděn další ramdisk, ten ale s tmpfs. Pak už jen reboot a - máme ramdisk. Co si do něj dáte je jen vaše věc, ale je třeba si pamatovat, že soubory se mažou s každým restartem.


Když hvězdička nestačí 2

Dostali jsme se do situace, kdy nestačí ani cyklus for, respektive je zbytečně pomalý. Musí tedy dojít na změnu. Je to paradoxní, ale na mazaní cache je vhodný i příkaz find. Stačí správné argumenty.

#!/bin/bash
find /webroot/nasazeni/cache/ -type f -print -delete 2>/dev/null

Zde je zneužito vlastnosti, že find složku hloubkově úplně nečte (ls). Navíc vynechává složky včetně podsložek a maže a vypisuje mazané soubory. Na víc složek mimo strom se prostě zavolá víc Find.


Když hvězdička nestačí

Dělám e-krám. Neptejte se jak a proč. Na vydání je potřeba vždy smazat starou cache. Zábava začíná.

Souborů v cachi u takového krámu je kolem 500k. A hvězdička má blbou vlastnost - vnitřně se mění na výpis všech souborů. Takže nám vyleze informace "Příliš mnoho argumentů". Osobně se domnívám, že přetekla délka příkazu. Snadné vydání, kde mazání cache zabralo jedinou řádku, tímto končí. Oklikou si však lze poradit i s takovouto zátěží - cykly for v shellu. Avšak nebudu dodávat, kolik že to spapá času, než je cache smazaná a nahození dokončené. V takovém stavu se debugovat, natož vyvíjet, moc nedá.

#!/bin/bash
for cache in /webroot/nasazeni/cache/ /webroot/nasazeni/temp/
do
 if [ -d ${cache} ]
 then
  continue
 fi
 echo $cache
 rm $cache
done

Zde je použit "for" nad výčtem složky. Navíc ještě vynechává podsložky (ne jejich obsah) a vypisuje mazané soubory. Malinkou úpravou lze pucovat složek daleko více.

To nakonec nepíšu o problému s ramdiskem, který někoho napadlo krutě poddimenzovat (místo, kde se cache válí).

Petr Plšek, 182 00 Praha, me@kalanys.com