Nějaké návody do Linuxu.
dosemu_win3-1.htm | mandriva_vpc.htm | mint_11.htm | |||
mint_11_uziti.htm | ubuntu_vpc.htm | unix-nt.htm |
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.
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.
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í).