- předchozí článek - následující článek - obsah - úvodní stránka -

Linuxové noviny 07/98

Pracovní soubory na ramdisku

Milan Šorm, 8. července 1998

Donedávna jsem byl zvyklý pracovat s Linuxem na slabších strojích s několika málo megabyty paměti. Výkonnější stroje byly vždycky přisouzeny na podivné operační systémy a Linux byl degradován na operační systém starých a slabých strojů.

Bohudík se tento názor začal vytrácet, a tak jsem byl postaven před stroj s 64 MB paměti, který měl dělat WWW server, obsluhovat poštu a příležitostně na něm měly běžet překlady. A právě ty mě podnítily zabývat se myšlenkou, proč se nevrátit do éry MS-DOSu, kdy měl každý svůj malý ramdisk a na něm překládal knihovny a své programy. Řada věcí se tím urychlila.

Proto jsme se s kamarádem pustili do realizace tohoto plánu. Chtěli jsme 32 MB ponechat beze změny, avšak ze zbylých 32 MB udělat ramdisk, na něj umístit /tmp a v případě potřeby do tohoto adresáře nalinkovat ještě jiné adresáře (např. se zdrojáky).

Nejprve bylo nutné přeložit jádro s podporou ramdisku. To provede nastavení volby CONFIG_BLK_DEV_RAM=y v souboru .config. Jádro se přeloží a zavede se běžným způsobem do lilo.conf. Navíc mu však přibude volba ramdisk=32768, která udává velikost interního členění ramdisků v jádře. Po nabootování tohoto jádra lze potom využít až 16 ramdisků o této velikosti (my použijeme jen jediný). Tyto ramdisky jsou přístupné přes /dev/ram0/dev/ram15.

My jsme chtěli mít ramdisk zakládaný běžným init-skriptem známým v RedHatu a tak jsme do /etc/rc.d/init.d udělali skript nazvaný ramdisk, který reagoval na povely start založením ramdisku, namountováním na /tmp a nakopírováním nějakých základních dat z /usr/local/tmp. Na povel stop potom ramdisk odpojil. Při tvorbě tohoto skriptu jsme vyšli z podobných skriptů (např. pro sshd).

Příslušné povely pro vytvoření ramdisku jsou mkfs.ext2 -b 1024 /dev/ram0 32748, který založí ext2 filesystém na prvním interním ramdisku. Tento filesystém bude mít 32748 kilobytových bloků. Ne všechny budou využitelné pro data, ale většina ano (část zabere superblok, tabulky inodů apod.). Připojení filesystému k /tmp provede mount -t ext2 /dev/ram0 /tmp a dále je nutné nastavit t-bit adresáři /tmp, což učiní povel chmod 1777 /tmp. No a na závěr už stačí jen nakopírovat nějaká implicitní data povelem cp -R /usr/local/tmp /.

Odpojení ramdisku v sekci stop zvládne jistě každý sám. Stejně tak zajistit spouštění tohoto skriptu v příslušných běhových úrovních (3,5 apod.). A proč kopírujeme implicitní data? Máme některé veřejné uživatele, kteří mají jako svůj domovský adresář nastaveno právě /tmp a jako shell nějakou konkrétní informační službu. A některé takové služby potřebují konfigurační soubor, který tam nakopírujeme tímto způsobem. Navíc máme na /tmp napojené i jiné adresáře, ve kterých vznikají dočasná data proměnlivé velikosti.

Ramdisk lze užít i jiným způsobem. Lze si například vyrobit několik menších ramdisků a vytvořit si skript, který uživateli na požádání připojí takovýto ramdisk do některého jeho podadresáře v home. Takovýto uživatel si na něm něco může soukromě překládat a potom zase zrušit připojení (příp. se o to může např. večer postarat nějaký skript spouštěný z cronu). Fantazii se meze nekladou... *


- předchozí článek - následující článek - obsah - úvodní stránka -