AFS

Distributed filesystem AFS was chosen to be the primary system of sharing disk space in the METACentre project, mainly due to uniform structure of the directory tree as well as its authorisation and authentication capabilities.

This document consists of five section describing the user view on AFS in its setup in META centre. The sections are:

 

The intended readers of this documents are beginner users of AFS. It is not ment as a replacement of section 1 man pages. Man pages exist for the most of AFS commands, the most of the commands also provides brief help with a "-help" or "-?" options.

Brief history and AFS implementations

AFS was developed as Andrew file system at Carnegie Mellon University. Further the development was carried on by the off-spring company Transarc Corporation which was finally bought by IBM. Currently, IBM sells the product as IBM AFS.

IBM also released a snapshot of the complete AFS source code, allowing foundation of an open-source project OpenAFS. Currently the infrastructure of METACentre is mostly based on OpenAFS.

Besides these implementations there exists a completely independent implementation of the AFS client ARLA. Some of the METACentre nodes use this implementation, mainly due to unavailability of OpenAFS on specific platforms.

However, behaviour of different AFS impolementation is indistinguishable from an ordinary user's view.

Úvod do systému AFS

AFS je distribuovaný souborový systém, který má na všech uzlech uniformní vzhled adresářového stromu. Kořen tohoto stromu leží v adresáři /afs, v němž jsou adresáře odpovídající jednotlivým tzv. buňkám (cells). Buňky zpravidla pžedstavují několik administrativně sloučených serverů, např. doména ÚVT MU je reprezentována buňkou ics.muni.cz. Kořenový adresář naší buňky je tedy /afs/ics.muni.cz/, a v rámci METACentra jej lze zkracovat jako /ics/.

V rámci jedné buňky jsou určité adresářové podstromy (tj. např. domovský adresář konkrétního uživatele nebo kořenový adresář určitého programového produktu) uloženy v tzv. svazcích (volumes). Tyto svazky lze umísťovat na libovolném AFS serveru bez ohledu na jejich umístění v adresářovém podstromu AFS, a lze je v případě potřeby přesunovat mezi AFS servery (aniž by to ovlivnilo jeho umístění v adresářovém stromu). Klient (klientská pracovní stanice) zjistí aktuální místo uložení požadovaného svazku dotazem na Volume Location Server. K řádné činnosti systému AFS tedy není nutno, aby klienti byli o těchto přesunech informováni (na rozdíl od např. systému NFS, kde každá změna fyzického umístění vystavovaného adresáře musí být vhodným způsobem sdílena všem klientům, kteří tento adresář využívají).

Systém souborů AFS rovněž podporuje lokální diskovou (případně paměťovou) cache. Často používané soubory tak jsou permanentně uloženy na lokálním disku, a přístup k nim je většinou podstatně rychlejší než např. protokolem NFS. Dalším prvkem, který zvyšuje dostupnost dat (ale pouze dat vystavených pouze pro čtení), jsou replikační servery (replica servers). Soubory, do nichž není vyžadován zápis (například software), mohou být umístěny na více "replikačních" serverech, přičemž AFS klient vždy přistupuje k momentálně dostupnému serveru, pokud možno však k serveru nejbližšímu.

Protože adresářový strom /afs je na všech počítačích identický, a občas můžeme chtít rozlišovat adresáře v závislosti na architektuře počítače (binární spustitelné programy apod.), je v AFS možnost odkazovat se na platformu, na níž momentálně pracujeme, jménem @sys. V současné době jsou v METACentru podporovány platformy

Například adresář bin může být symbolický link na adresář @sys/bin, a spustitelné binární soubory se pak budou ukládat do adresářů sgi_6564/bin, i386_linux24/bin apod.

Každý uživatel METACentra má svou domovskou buňku obvykle odpovídající instituci, které je zaměstnancem nebo studentem. V příkladech v tomto dokumentu budeme předpokládat domovskou buňku ics.muni.cz (pokud není explicitně uvedeno jinak).

Systém AFS je přístupný jako softwarový modul afs, spolu s ostatními základními balíky je také zahrnut pod virtuální modul metabase. Zpřístupnění AFS se tedy provede např. příkazem

module add metabase
(Při běžném přihlášení na počítače METACentra je již tento virtuální modul zpřístupněn.) K dispozici tak získáme příkazy kinit, kauth, afslog, regpag, klist, tokens, pts, fs, a další, které budou popsány v tomto dokumentu. Ke každému z těchto příkazů existuje ale i manuálová stránka, a všechny podporují volbu -help (případně -?) která vypíše stručnou syntaxi.

Autentizace uživatele v systému AFS

Autentizace, tj. prokázání totožnosti uživatele, je v systému AFS postavena na systému Kerberos.

Při přihlášení na libovolný ze strojů METACentra je na základě nově vytvořeného nebo přeneseného kerberovského lístku (viz dokumentace k systému Kerberos) vytvořeno oprávnění k systému AFS, tzv. token. (Na základě lístku jej lze získat i explicitně příkazem afslog.) The list of tokens can be printed out using command klist -T or tokens.

Token je, narozdíl od kerberovského lístku uloženého v obyčejném souboru, reprezentován položkou v tabulce udržované jádrem operačního systému, a přísluší (až na zde neuváděné vyjímky) skupině procesů, tzv. PAGu. PAGy jsou obdoba UNIXovských session ID v AFS. Daný token platí pouze pro konkrétní PAG, příslušnost k PAGu je děděna na potomky procesu. Procesu obyčeného uživatele (ne roota) není dovoleno přejít k jinému PAGu, může ale vytvořit nový PAG, a získat tak nezávislost na svém rodiči.

Příkaz pagsh spustí nový shell patřící do nového PAGu (také s přednastaveným novým unikátním jménem souboru s lístky). K takto vytvořenému PAGu nepřísluší prozatím žádný token (tj. PAG je vůči AFS zcela anonymní), ten je třeba získat příkazy kauth, resp. afslog.

Každá terminálová relace (při přihlášení via telnet, rlogin atd.) má svůj vlastní PAG. Standardní prostředí METACentra zajišťuje v těchto případech automatické vytvoření tokenu z kerberovských lístků.

Token zaniká automaticky se zánikem PAGu, tj. ukončením všech k PAGu příslušných procesů. Explicitně jej lze také zničit příkazem unlog, resp. je zničen i při explicitní destrukci kerberovských lístků příkazem kdestroy (není-li zadán s s volbou --no-unlog).

Prostředí METACentra také zajišťuje automatické vytvoření a údžbu lístků a tokenů pro procesy spuštěné dávkovými systémy LSF, NQE a PBS. Ze strany uživatele tedy nejsou nutné žádné speciální akce; je zaručeno, že procesy spuštěné dávkovým systémem budou mít po celou dobu běhu platný token pro přístup k AFS.

Pro pohodlnou práci s více dlouhotrvajícími terminálovými relacemi je určen příkaz regpag. Dovoluje zaregistrovat PAGy terminálových relací, a po obnovení kerberovských lístků (zpravidla následující pracovní den) automatické obnovení tokenů ve všech registrovaných PA(G)zích.

Jeho použítí je:

regpag [-l] [-u] [-U] [-r] [-t tkfilename] [ gid gid ]
Při spuštění bez argumentů tento příkaz zaregistruje aktuální PAG. Volba "-l", případně "--list" vypíše zaregistrované PAGy, volba "-u" nebo "--unreg" odregistruje zaregistrovaný PAG, "-U" nebo "--unregall" odregistruje všechny zaregistrované PAGy, a volba "-r" nebo "--renew" obnoví tokeny pro všechny registrované PAGy. Volbou "-t ticketfile", resp. "--tkfile=ticketfile" lze specifikovat jméno souboru s lístky.

 

Příkazy popsané výše by měly stačit k zahájení běžné práce s AFS, pokud budeme na AFS nazírat jako na běžný souborový systém a nebudeme od něj chtít specifické vlastnosti. Těmito specifickými vlastnostmi máme na mysli především specifikaci přístupových práv (tzv. ACL, Access Control Lists), vytváření skupin uživatelů

Přístupová práva systému AFS

Přístupová práva v systému AFS jsou udělována zásadně adresářům, nikoliv jednotlivým souborům (ty přebírají vlastnosti adresářů, v nichž jsou umístěny -- z tohoto důvodu v systému AFS může mít soubor jiné jméno ("tvrdý" link) pouze v rámci stejného adresáře, aby nedocházelo ke konfliktům přístupových práv). Každý adresář v souborovém systému AFS může mít až 20 ACL položek definující přístupová práva pro různé uživatele nebo skupiny uživatelů AFS. Existují tři nejdůležitější systémové skupiny AFS s následujícími jmény stanovenými konvencí:

Každá položka ACL se sestává ze sedmi práv (rlidwka), která mohou být specifikovanému uživateli nebo skupině přidělena (v případě, že položka specifikuje tzv. normální právo) nebo odňata (v případě tzv. negativního práva):

Pro přístup k souboru (čtení, zápis nebo spuštění) nestačí mít právo AFS, ale soubor musí mít nastaveno i příslušné UNIXovské právo pro vlastníka souboru (rwx). UNIXovská práva pro skupinu a ostatní jsou systémem AFS ignorována.

Pro manipulaci se souborovým systémem v AFS existuje příkaz fs, který má řadu podpříkazů. Jejich stručný seznam získáme příkazem

fs help
Výpis ACL provedeme podpříkazem listacl, který má zkratku la. Tak například příkazy
fs listacl .
fs la .
jsou ekvivalentní a způsobí výpis ACL aktuálního adresáře. Předpokládejme, že výstup tohoto příkazu je
Access list for /afs/ics.muni.cz/packages is
Normal rights:
system:administrators rlidwka
soft rlidwka
system:anyuser rl
Což znamená, že pro zmíněný adresář mají členové skupiny system:administrators a skupiny soft všechna práva a všichni ostatní uživatelé (tj. členové skupiny system:anyuser) mají práva rl (tj. číst soubory v adresáři a vypisovat obsah adresáře).

Pro změnu ACL slouží podpříkaz setacl příkazu fs, který má zkratku sa. Jeho typická syntaxe je

fs setacl -dir directory -acl ACL... [-negative]
případně je možné použít zkrácenou verzi v případě, že příkaz má pouze dva argumenty:
fs setacl directory ACL
kde ACL je pár uživatel právo, případná volba -negative pak specifikuje, že položka je chápána jako negativní právo místo normálního (tj. právo je specifikovanému uživateli odňato). Například, chceme-li uživateli petr přidělit právo číst a zapisovat do souborů do adresáře zdrojaky a vytvářet v něm soubory nové, učiníme tak příkazem
fs setacl -dir zdrojaky -acl petr@meta rliw
Přípona @meta ve jménu uživatele je důsledkem použití společného realmu META (viz dokumentace k systému Kerberos) pro autentizaci do všech (jinak vzájemně oddělených) AFS buněk. Při specifikaci a výpisu ACL je nutno ji uvádět u všech uživatelů METACentra.

Pro často používané kombinace práv existují symbolické zkratky, které můžeme použít místo položky právo v ACL. Tyto zkratky jsou uvedené v následujícím seznamu:

Takže např. pro zamezení jakéhokoli přístupu všem uživatelům kromě uživatelů specificky vyjmenovaných v ACL můžeme použít příkaz
fs sa -dir . -acl system:anyuser none
(Jde vlastně o vyřazení skupiny system:anyuser z ACL. Podrobněji se o těchto skupinách zmíníme v kapitole Ostatní běžné příkazy AFS.) Pokud naopak chceme uživateli pavel umožnit neomezený přístup do aktuálního adresáře, použijeme příkaz
fs sa -dir . -acl pavel@meta all

Pro praktické použití může být velmi užitečná (i když nikoli nezbytná) volba -clear příkazu fs setacl. Tato volba způsobí nejprve úplné smazání všech položek ACL, a pak do nich zapíše pouze práva vyjmenovaná v rámci právě prováděného příkazu fs setacl.

Závěrem je nutno zdůraznit, že pro zálohování AFS filesystému je nezbytné, aby všechny adresáře měly alespoň právo

roots rl
Pokud toto není splněno, adresář nemůže být zálohován, neboť zálohovací program z důvodů bezpečnosti běží s tokenem skupiny roots. a nikoli system:administrators.

Přidělování skupinových práv

Na rozdíl od standardního UNIXu, kde je vytváření a administrace skupin (viz group(5)) výhradně v kompetenci privilegovaného uživatele (root), v AFS může vytvářet své skupiny každý uživatel. To je vhodné především v případech, kdy uživatel chce přidat (nebo odejmout) určitá práva větší skupině jiných uživatelů, obvykle charakterizované příslušností např. k určitému projektu, ročníku apod. V těchto situacích je pak také mnohem jednodušší administrace např. při přijetí nového člena do projektu nebo při opakování ročníku studentem, kdy pouze přidáme nebo vyřadíme uživatele ze skupiny místo pracného a k chybám náchylného opravování přístupových práv pro každý adresář zvlášť.

Manipulace se skupinami zajišťuje řada podpříkazů programu pts. Skupinu vytvoříme příkazem pts creategroup, uživatele do skupiny přidáváme příkazem pts adduser a vyjímáme příkazem pts removeuser. Jméno skupiny má formát vlastník:jméno.skupiny. Vytvoření skupiny si ukážeme na příkladu:

grond$ id
cerno (uid=343, gid=50)
grond$ pts creategroup cerno:vyuka.chemie
group cerno:vyuka.chemie has id -210
grond$ pts adduser zak1@meta cerno:vyuka.chemie
grond$ pts adduser zak2@meta cerno:vyuka.chemie
grond$ pts adduser fyzik@meta cerno:vyuka.chemie
grond$ pts removeuser fyzik@meta cerno:vyuka.chemie
grond$ pts examine cerno:vyuka.chemie
Name: cerno:vyuka.chemie, id: -210, owner: cerno, creator: cerno
membership: 2, flags: S-M--, group quota: 0.
grond$ pts members cerno:vyuka.chemie
Members of cerno:vyuka.chemie (id: -210) are
zak1@meta
zak2@meta
grond$

Příkaz pts members vypíše členy skupiny, jestliže jeho argumentem je jméno skupiny; jestliže jeho argumentem je uživatelské jméno, vypíše skupiny, jichž je zmíněný uživatel členem. Příkaz pts examine vypíše informace o skupině. Ve výstupu příkazu pts examine si blíže povšimněme položky flags: která specifikuje různá práva uživatelů vůči skupině. Flags je pětiznakový řetězec, sestávající se ze znaků SOMAR, kde na místě každého znaku může být buď malé nebo velké písmeno nebo pomlčka. Malé písmeno znamená přidělení práva členům skupiny, velké pismeno přidělení práva všem uživatelům a pomlčka odepření práva všem kromě vlastníka a administrátorů. Tato práva jsou:

Tyto příznaky lze nastavit příkazem pts setfields.

Vlastník skupiny (případně administrátor AFS) může skupinu zrušit příkazem pts delete.

Ostatní běžné příkazy systému AFS

Pro některé účely (např. pro účely zálohování) je vhodné znát, na kterém serveru fyzicky leží AFS svazek, s nímž pracujeme. To lze zjistit příkazem
fs whereis directory
Zda je příslušný AFS server v provozu, nebo zda je odstaven ("down"), zjistíme pomocí příkazu
fs checkservers

Všem uživatelům AFS je přidělena AFS quota, která nahrazuje klasické BSD quotas dostupné na většině UNIXovských filesystémů. Zjistit kvótu libovolného AFS svazku lze některým z příkazů

fs listquota [dir]
fs lq [dir]
fs quota [dir]
Ekvivalentní příkazy listquota a lq vypisují procentuální zatížení svazku a partition v tabelární formě. Příkaz quota vypisuje pouze procentuální zatížení svazku (podíl limitu a skutečného obsazení svazku). Jednotkou je vždy 1 kB.

Rozdíly v sémantice standardních UNIXovských příkazů

V důsledku rozdílných vlastností souborového systému AFS a standardního UNIXovského filesystému má řada UNIXovských příkazů odlišnou sémantiku nad soubory v UNIXovském filesystému a nad soubory v AFS. V této části jsou stručně popsány rozdíly v sémantice těchto příkazů.

Dalším rozdílem je implementace systémového volání write(2), které nezajistí zápis dat na médium na AFS serveru, ale pouze do vyrovnávací paměti (AFS cache) na lokálním stroji. Pro vyvolání tohoto zápisu musí zapisující proces provést volání close(2) nebo fsync(2).

Na AFS filesystému není podporováno zamykání souborů s výjimkou volání flock(2).

Komponenta cesty (jména souboru) v AFS ve tvaru @sys je systémem souborů AFS expandována na jméno platformy (např. na počítači SGI PowerChallenge pod operačním systémem IRIX 6.5 je tento řetězec expandován na řetězec sgi_65.

Setuid bit mohou v AFS filesystému nastavovat pouze členové skupiny system:administrators.

Last changed: 2009-03-19 12:20:15