next up previous
Next: Zařízení ramdisk a Up: Jak jsem louskal Previous: Moduly

Kořenový systém souborů přes NFS

Mnozí používáme NFS (Network File Sharing protokol) pro sdílení části diskového prostoru naší LAN několika počítači zároveň. V tomto odstavci bych rád upozornil na novinku, která přichází s novým jádrem řady 2.0.x a to je, kromě úplného přepracování a tedy zrychlení NFS, možnost montování kořenového filesystému přes NFS. Této nové možnosti zajisté rádi využijí všichni, kteří chtějí mít více než jeden X-terminal a nemají dostatek diskového prostoru, či dokonce mají bezdiskový počítač. V dalším budeme uvažovat, že vytváříme X-terminál na bezdiskové stanici IP-10.11.11.101, a že kořenový FS montujeme ze serveru IP-10.11.11.1.

Jak na to?

Nejprve je třeba na serveru vytvořit kořenový adresář stanice /bezdisk/stanice1/ a v něm komletní strukturu kořenového FS. Pozor, tento adresář se stanici bude jevit jako kořenový adresář /, proto veškeré symbolické linky budou vztahovány k tomuto adrsáři a nikoli k původnímu /bezdisk/stanice1; například uděláme-li na serveru link /bezdisk/stanice1/usr -> /usr na stanici to bude znamenat zacyklený symbolický link /usr -> /usr! Adresář /usr je dobré přimontovat později během bootování pomocí NFS.

V adresáři /bezdisk/stanice1/etc je třeba upravit všechny konfigurační soubory tak, aby odpovídaly stavu na stanici; rozhodně je třeba editovat HOSTNAME, fstab, inittab a zejména síťovou část |rc.d/rc.*|.

Jádro na serveru by mělo mít podporu NFS, případně RARP ( Reverse Address Resolution Protocol) či BOOTP. Pro další předpokládejme RARP. Do /etc/exports na serveru je dobré přidat řádek spřístupňující stanici její kořenový adresář a případně jiné potřebné adresáře, například /usr, /bin, /lib, /var/X11R6.

#  Soubor /etc/exports
#____________________________________________________________________
#                    |       jméno počítače tak jak je v /etc/hosts | 
#   adresář          |               + v závorce parametry pro NFS  |
#                    |                                              |
/bezdisk/stanice1                     stanice1(rw)
/usr                                  stanice1(rw) 
#____________________|______________________________________________|
#  Konec souboru /etc/exports

A poslední věc, kterou na serveru spustíme bude rarp -s <IP-stanice> <HW-stanice>, kde IP-stanice je IP adresa stanice a HW-stanice je hardwarová adresa ethernet karty stanice --- tedy například, rarp -s 10.11.11.101 00:00:c0:7b:5a:1c. Jak zjistit HW adresu vaší karty by mělo být uvedeno v návodu ke kartě; adresu karty lze zjistit i při bootování jádra linuxu s podporou dané karty, v bootovacích výpisech, například instalační diskety Slackware 3.0. Výpis lze prohlédnout pomocí příkazu dmesg(8); důležitá část výpisu pro naši kartu NE2000 vypadá takto:

ne.c:v1.10 9/23/94 Donald Becker (becker@cesdis.gsfc.nasa.gov)
NE*000 ethercard probe at 0x320: 00 00 c0 7b 5a 1c
eth0: NE2000 found at 0x320, using IRQ 10.

No a nyní vytvoříme jádro pro stanici, jádro je třeba kompilovat s podporou NFS a NFSroot, tj. je třeba vybrat v nabídce Filesystems položku NFS filesystem support, pozor, ne jako modul, ale jako pevnou součást jádra, a poté vybrat Root file system on NFS a případně připojit i podpora protokolu, který nám umožní automatické nakonfigurování síťového rozhranní, především IP adresy stanice, tedy buď RARP či BOOTP supprot či dokonce oba zároveň.

Po kompilaci se rozhodneme jakou metodu bootování stanice použijeme. Můžeme použít LiLo či loadlin. Existují ještě další dvě metody, ale o těch zde záměrně nehovořím, viz nfsroot.txt v dokumentaci k jádru. Řekněme, že na stanici normálně běhá DOS a X-terminal se používá jen zřídka. V tom případě zvolme loadlin.exe. Na stanici v adresáři, napřiklad, C:\loadlin umístíme vedle loadlin.exe navíc námi skompilované jádro pro stanici. Před použitím programu loadlin si neopomeňte přečíst dokumentaci dodávanou k tomuto užitečnému programu.

Jaký server požádat o NFS kořenový systém a jaký adresář poté jako kořenový souborový systém použít se jádru předává pomocí parametrů jádra root a nfsroot. Parametr root=/dev/nfs předá jádru informaci o tom, že se kořenový filesystém bude montovat přes síť pomocí NFS. Parametr
nfsroot=<server-ip>:<root-dir>:<nfs-options>
předá jádru informace o tom, na kterém počítači <server-ip> má hledat kořenový systém souborů <root-dir>, přičemž existuje řada voleb, kterými lze způsob připojení NFS blíže specifikovat <nfs-options>. Čili v našem případě bude příkazová řádka pro loadlin vypadat takto:
loadlin.exe zImage root=/dev/nfs nfsroot=10.11.11.1:/bezdisk/stanice1

V našem případě si stanice veškeré informace o konfiguraci svého IP rozhraní vyžádá přes protokol RARP. Pošle dotaz to sítě a bude jí serverem 10.11.11.1 odpovězeno, že adresa odpovídající její HW adrese je 10.11.11.101. Teprve poté je možné užívat NFS.

V principu je možené se obejít bez RARP či BOOTP protokolu a konfiguraci TCP/IP předat jádru jako parametr
nfsaddrs=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>, kde:

<client-ip> --- IP adresa stanice. Je-li toto pole prázdné, tak adresa bude určena pomocí protokolu RARP či BOOTP. Který s těchto protokolů se užije závisí na om jaký byl vybrán při konfiguraci kernelu, popř. na parametru <autoconf>.
<server-ip> --- IP adresa NFS serveru. Je-li k určení adresy stanice užito protokolu RARP a tento porametr není prázdný odpověď na RARP dotaz bude zpracovana pouze tímto serverem. Chceme-li užít rozdílných serverů pro NFS a RARP zde vyplníme jméno RARP serveru, popř. tento parametr necháme prázdný a IP adresu NFS serveru specifikujeme parametrem nfsroot; viz víše. Je-li parametr <server-ip> vynechán je doplněn adresou serveru, jež odpoví na RARP či BOOTP dotaz.
<gw-ip> --- IP adresa brány (gateway). Je nutné specifikovat v případě, že je server na jiné síti. Je-li tento parametr vynechán, tak bude předpokládáno, že server se nalézá na lokální síti, nebude-li odpovězeno na BOOTP dotaz jinak.
<netmask> --- netmask lokálního síťového rozhranní. Je-li tento parametr prázdný, maska je odvozena od IP adresy stanice, nebude-li odpovězeno na BOOTP dotaz jinak.
<hostname> --- jméno stanice. Je-li tento parametr prázdný užije se jako jmého ASCII reprezentace IP adresy případně hodnota navrácená při BOOTP dotazu.
<device> --- jméno užitého síťového rozhranní. Je-li tato hodnota prázdná, užijí se všechna zařízení pro než byl zodpovězen RARP dotaz a první ze zařízení, které odpoví na BOOTP dotaz. Pro NFS bude užito toho zařízení pro nejž byl zotpovězen buď BOOTP či RARP dotaz. Má-li stanice pouze jedno síťové rozhraní, můžeme bez obav zanechat tento parametr prázdný.
<autoconf> --- metoda, která se užije k autokonfiguraci. Na místě parametru se specifikuje protokol, který nakonfiguruje síťové rozhranní na stanici, tj. buď bootp či rarp. Je-li jako parametr zadáno both či nic, užijí se oba protokoly; samozřejmě jen tehdy umožnili-li jsme užití obou protokolů během konfigurace jádra stanice. Volba none na tomto místě vypíná automatickou konfiguraci a v tomto případě je třeba specifikovat všechny předchozí parametry.

Tedy v našem případě doplníme parametr nfsroot například takto:
nfsaddrs=10.11.11.101:10.11.11.1:::stanice1::none
V tomto případě nejsme nuceni užívat RARP či BOOTP.

Nám se osvěčilo užití RARP. Konfigurace pomocí příkazové řádky jádra ne vždy pracovala jak má. Při použití loadlin.exe jsme narazily na omezení Diskového Operačního Systému; příkazový řádek může mít v DOSu pouze 128(!) znaků a to je dosti málo --- bylo nutné se omezit na krátké cesty, přejmenovat obraz jádra i samotný loadlin.exe....

Samozřejmě k tomu, aby se nám rozběhl bezdiskový X-terminal je třeba ještě dalších úprav. Je třeba nějaký swapovací prostor pro stanici, nebo nejlépe stanici s velmi velkou pamětí. Nám dostačovalo 8MB RAM + swap do souboru na DOSovské části disku. Ale to už je jiný příběh.



next up previous
Next: Zařízení ramdisk a Up: Jak jsem louskal Previous: Moduly

Michal Kočer
kocer@merlin.pap.univie.ac.at