Kelių katalogų apjungimas panaudojant aufs
Trumpai
Kartais yra naudinga apjungti kelis katalogus į vieną. Vienas toks atvejis būtų kai tarkim turime vieną diską duomenims laikyti ir jis vėliau užpildomas informacija. Tada reikia pirkti kitą diską, kad būtų vietos, bet jo taip paprastai neprijungsi prie tos pačios vietos, kaip ir pirmasis diskas, išlaikant tokią pačią struktūrą (abiejų diskų "talpos" prijungimas prie to pačio taško), o ir RAID naudoti neišeis, nes jiems reikia perdaryti skirsnių lentelę, kas sąlygos duomenų praradimą. Kokia išeitis? Naudoti tokią failų sistemų apjungimo "failų sistemą" aufs.
Taip pat tai galima panaudoti tokiais atvejais, kai negalime rašyti į sistemą (LiveCD), bet norime ją keisti. Tada tiesiog skaitomą sistemą sujungiame su virtualia tmpfs sistema ir taip bus rašoma į tmpfs failų sistemą, o atrodys, kad pakeitimai yra išsaugomi ir toje sistemoje, kurią galima tik skaityti.
Apie aufs
Kodėl aufs, o ne, tarkim, unionfs? Svarbiausia priežastis dėl ko pasirinkau aufs yra tai, kad jis palaiko savo sujungtų katalogų prieigą naudojantis NFS. Taip pat ji palaiko daugybę kitų funkcijų, kurių neturi unionfs, bei aufs laikoma stabilesne už unionfs. Prieš diegiant aufs yra rekomenduojama pasiskaitinėti pateiktas nuorodas, kad vėliau būtų išvengta nenumatytų problemų.
Eiga
Pasiruošimas
Dauguma dar distribucijų nėra įtraukusios aufs į savo paketus, tad jį reikės pasiruošti rankomis. Papildomai reikės: gcc ir make. Taip pat reikės branduolio išeities tekstų /usr/src/linux kelyje. Aufs parsisiųsime naudojantis CVS:
mkdir build cd build mkdir aufs.wcvs cd aufs.wcvs cvs -d:pserver:anonymous@aufs.cvs.sourceforge.net:/cvsroot/aufs login #paprašius slaptažodžio spaudžiame enter cvs -z3 -d:pserver:anonymous@aufs.cvs.sourceforge.net:/cvsroot/aufs co aufs
Jei jau turite išeities tekstus ir norite juos atnaujinti:
cd aufs.wcvs/aufs cvs update
Konfigūravimas ir kompiliavimas
Aufs palaikymą galima įkompiliuoti į branduolį, bet mano atveju paprasčiau ir geriau buvo tiesiog sukompiliuoti kaip modulį. Kai aufs palaikymas įkompiliuojamas į branduolį, tai veiksmų seka yra kitokia. Pirmiausiai reikėtų paredaguoti modulio nustatymų failą:
cd aufs nano local.mk
Ir nustatykime atitinkamas eilutes:
CONFIG_AUFS_EXPORT = y #įjungiame NFS palaikymą CONFIG_AUFS_DEBUG = #išjungiame debug režimą. Tai padarius aufs veiks sparčiau. Atkreipkite dėmesį, kad nereikia naudoti n raidės, o tiesiog palikti tuščią vietą. Kitu atveju kompiliavimas nepavyks.
Prieš kompiliuojant gali tekti pasinaudoti pateikiamomis branduolio pataisomis (detaliau skaityti aufs svetainėje), kad viskas susikompiliuotų ir veiktų korektiškai. Man asmeniškai naudojant Debian Stable 2.6.18 branduolį pataisų nereikėjo. Tačiau su Gentoo Vanilla branduoliu reikėjo šių pataisų: put_filp.patch ir lhash.patch. Jas galima rasti aufs/patch kataloge. Jeigu reikia, jas pritaikyti galima šitaip (šiems veiksmams gali reikėti root vartotojo teisių):
cd patch cat lhash.patch | patch -p0 -d /usr/src/linux cd ..
Sukompiliuojame aufs modulį:
make -f local.mk
Diegimas
man -l ./aufs.5 #rekomenduojama pasiskaityti install -m 500 -p mount.aufs umount.aufs auplink aulchown /sbin #sudiegiami įrankiai darbui su aufs echo FLUSH=ALL > /etc/default/auplink insmod ./aufs.ko #užkrauna modulį mkdir /lib/modules/$(uname -r)/kernel/fs/aufs cp aufs.ko /lib/modules/$(uname -r)/kernel/fs/aufs
Taip pat nurodome, kad aufs modulis būtų automatiškai užkraunamas sistemos paleidimo metu. Tam padaryti reikia redaguoti /etc/modules failą (Debian sistemoje; kitose sistemose tai gali būti kitas failas):
echo "aufs" > /etc/modules
Aufs naudojimas
Aufs prijungimo parinktys
dirs=katalogas[=ro|rr|rw][:kitas_katalogas[=ro|rr|rw]] - nustato katalogus, kuriuos apjungti. ro - nustato, kad tame kataloge galima tik skaityti, rw - galima skaityti ir rašyti, rr - toks pat kaip ro, tik pageriną darbą tam tikrais atvejais.
append:katalogas - prijungia dar vieną katalogą prie jau esamos "apjungtųjų šakos" galo.
prepend:katalogas - prijungia dar vieną katalogą prie jau esamos "apjungtųjų šakos" pradžios.
del:katalogas - pašalina katalogą iš "apjungtųjų katalogų šakos".
plink
noplink - Nustato ar naudoti "pseudo link" savybę. Numatytasis yra plink nustatymas, kuris reiškia, kad ši savybė bus naudojama. Plačiau apie tai žiūrėti toliau.
create=NUSTATYMAS - ši parinktis nurodys kaip bus kuriami ir paskirstomi failai tarp sujungtų katalogų. Šis nustatymas taip pat gali turėti create_policy pavadinimą. Galimos NUSTATYMAS reikšmės:
tdp - taip pat gali būti top-down-parent. Pasirenka pirmiausią įrašomą apjungtą katalogą, kuriame yra tas katalogas, kuriame bus pats failas, failo rašymui. Jeigu katalogo, į kurį turi būti įrašytas failas, nėra įrašomame apjungtajame kataloge, tai bus įvykdytas vidinis copyup. Šio copyup nustatymo reikšmė visąlaik yra bottom-up. Tai yra numatytasis nustatymas.
rr - taip pat gali būti round-robin. Pasirenka apjungtą katalogą į kurį bus rašoma "rato būdu", t.y. bus renkamasis kiekvienas iš įrašomų apjungtų katalogų kiekvienam įrašomam failui, eiliškumo tvarka, ir bus įrašoma po vieną failą į apjungtus katalogus kiekvienu "ratu". Išimti taikoma mkdir iškvietimui. Kai bus kuriame 10 naujų katalogų, jie visi bus sukurti viename apjungtajame kataloge.
mfs[:sekundės] - taip pat gali būti most-free-space[:sekundės]. Rašomą į tą apjungtą katalogą, kuriame yra daugiausiai laisvos vietos. Sekundės nurodo kiek laiko bus išlaikoma parinkto apjungtojo katalogo statusas kaip "talpiausio" - praėjus tam laiko tarpui, bus perskaičiuojama per naują, kuris apjungtasis katalogas turi daugiausiai laisvos vietos. Šis uždelsimas yra taikomas dėl našumo. Numatytasis laiko nustatymas yra 30 sekundžių.
mfsrr:minimalusDydis[:sekundės] - pasirenka apjungtą įrašomą katalogą, į kurį bus rašoma, pagal tai, kuris turės daugiausiai laisvos vietos, o jei ne - vėliau bus taikomas "rato" režimas. Jeigu pasirinktas įrašytinas apjungtasis katalogas turi mažiau vietos nei nurodytas minimalusDydis baitais (šiai reikšmei nustatyti galima naudoti terminalo aritmetinę išraišką, pvz.: $((10 * 1024 * 1024)) - taip bus nurodomas 10MiB dydis), tai aufs bando "rato" režimą. Taip pat galima nustatyti sekundes, kurios daro tą patį kaip ir mfs režime.
pmfs[:sekundės] - Pasirenka įrašomą apjungtą katalogą įrašymui pagal tai ar tame kataloge yra katalogas, į kurį bus rašomas failas, taip kaip tdp režime. Jeigu katalogas į kurį bus rašoma egzistuoja keliuose apjungtuose kataloguose, tai aufs pasirenka tą, kuriame yra daugiausiai laisvos vietos (taip kaip mfs režimas).
copyup=NUSTATYMAS - ši parinktis nustato, kuris iš apjungtų katalogų, į kuriuos galima rašyti, bus pasirinktas rašymui. Šis nustatymas taip pat gali turėti copyup_policy arba cpup pavadinimus. Galimos NUSTATYMAS reikšmės:
tdp - taip pat gali būti top-down-parent. Tokio pat create nustatymo atitikmui. Tai yra numatytasis nustatymas.
bup - taip pat gali būti bottom-up-parent. Pasirenkama įrašomą apjungtą katalogą, kuriame yra katalogas, kuriame bus įrašomas failas, ir kuris apjungtasis katalogas yra artimesnis copyup šaltiniui.
bu - taip pat gali būti bottom-up. Parenkamas arčiausias įrašomas apjungtasis katalogas copyup šaltiniui, nepaisant to ar yra tas katalogas, kuriame bus rašomas failas.
udba=NUSTATYMAS - aufs palaiko apjungtųjų katalogų keitimą tiesiogiai, t.y. vietoj to, kad redaguotų vartotojas aufs pateikiamą katalogą, jis gali redaguoti pačius katalogus, kuriuos apjungė. Nors aufs yra sukurtas, kad tai daryti būtų saugu, gali atsitikti taip, kad aufs turės klaidingą informaciją (inode) po tokių tiesioginių redagavimų ir taip bus atvaizduojami klaidingi duomenys aufs pateikiamame kataloge. Tarkim tiesiogiai pervadinus bylą, ta byla aufs kataloge gali būti nebepasiekiam ir nauju, ir senu vardu. Taip yra dėl to, kad aufs kešuoja informaciją apie bylas apjungtuose kataloguose ir tas kešas nėra atnaujinamas po tiesioginio keitimo. Galimos NUSTATYMAS reikšmės:
none - aufs tiki įrašu ir inode kešu sistemoje ir niekada netikrins dėl tiesioginių modifikacijų. Su šia parinktimi aufs veikia greitai, bet gali jums rodyti neteisingus duomenis tiesioginio redagavimo atveju. Jeigu bus dažnai apjungtasis katalogas redaguojamas tiesiogiai, tai aufs nebegalės atvaizduoti teisingų duomenų apie jį. Tai gali sukelti keistą bylų elgseną, pakibimus ar bet ką kitą. Šį nustatymą rekomenduojama naudoti tik tada, kai esate tikri, kad niekas tiesiogiai neredaguos apjungtųjų katalogų, o tai pasiekti gali būti sudėtinga, nes neuždrausite tokių komandų kaip find / -ls.
reval - aufs tikrina tiktai ar egzistuoja prieš tai buvusi byla. Jeigu egzistavusi byla buvo ištrinta tiesiogiai, aufs panaikina kešą su ta byla ir duomenis užkrauna per naują, tad informacija išlieka teisinga. Šis testas atliekiamas minimaliu lygiu iki tiek, kad būtų užtikrinamas našumas ir bylos buvimas. Tai yra numatytasis nustatymas ir aufs su juo veikia greitai.
inotify - aufs nustato inotify žymę visiems katalogams apjungtuosiuose kataloguose ir gauna pranešimas apie katalogą ir jo turinį. Tai sunaudoja kompiuterio resursų, CPU ir atminties. Šiuo atveju kris našumas, bet tai yra pats saugiausias variantas. Reikėtų paminėti, kad linux inotify turi apribojimų (Linux Inotify limitations). Kad galimėtų naudoti šią parinktį ums reikės bent 2.6.18 versijos branduolio ir nustatyti CONFIG_INOTIFY ir CONFIG_AUFS_UDBA_INOTIFY parinktis local.mk byloje prieš kompiliavimą.
Truputis informacijos apie Pseudo link panaudojimą aufs
Aufs palaiko "netikras nuorodas" (pseudo link). Tai yra loginė (netikra) hard-link nuoroda tarp apjungtų katalogų. Kitais žodžiais tariant, tai yra sukurta byla link() komanda ir tikrasis sukurtasis failas, kuriam buvo sukurta nuoroda tik skaitymui leistojame apjungtajame kataloge.
Kai jūs turite bylas užvadintas bylas A ir B, kurios yra tvirtai sujungtos (hardlink) tik rašymui leidžiamame apjungtajame kataloge, jūs ką nors rašote į bylą A, aufs sukuria ar pakeičia bylą A įrašymui leidžiamame apjungtajame kataloge. Apjungtajame kataloge, kuriame leidžiamas rašymas, byla A nėra tvirtai sujungiama, bet aufs atsimena, kad ji buvo tvirtai sujungta, ir elgiasi su byla B taip kaip ji egzistuotų įrašymui leidžiamame apjungtajame kataloge, nurodant bylos A inode, esantį rašymui leidžiamame apjungtajame kataloge, taip kaip bylos B inode.
Kadangi mes įdiegėme pilną aufs plink palaikymą, tai rekomenduojama jį ir naudoti (t.y. neišjungti noplink komanda).
Katalogų prijungimas mount pagalba
Sujungia katalogas1 turinį su katalogas2. Turinys bus rodomas /tmp/aufs, o pakeitimai bus rašomi tik į katalogas1, nes katalogas2 nustatytas kaip ro (read-only):
mount -t aufs -o dirs=/home/tadas/katalogas1:/home/tadas/katalogas2=ro none /tmp/aufs
Automatinis katalogų prijungimas su fstab
Galimas aufs pavyzdys naudojimui su /etc/fstab:
/dev/hda1 /disk/wd300 ext3 defaults 0 2 /dev/hdd1 /disk/wd500 ext3 defaults 0 2 none /data/ aufs dirs=/disk/wd500=rw:/disk/wd300=rw,create=mfs:120 0 0
Naudojimas su NFS
Sąlygos aufs veikti su NFS
Yra keletas sąlygų, kad veiktų NFS:
- Branduolio versija turi būti 2.6.18 ar vėlesnė.
- local.mk byloje jums reikia nustatyti CONFIG_AUFS_EXPORT parinktį į "y".
- Apjungiamasis katalogas turi palaikyti dalinimą per NFS. Pavyzdžiui tmpfs failų sistema linux-2.6.18 branduolyje ar ankstesniame, to nepalaiko.
NFSv2 versija yra nepalaikoma. Kai jūs prijunginėsite apjungtuosius katalogus per NFS klientą, jums reikės nustatyti bent nfsvers=3 parinktį.
- Jeigu NFS bylos valdiklis (file handle) yra didelis, tai aufs nesugebės jo palaikyti. Maksimalus NFSv3 bylos valdiklio dydis bylų sistemoje (filesystem) yra 64 baitai. Aufs naudoja 24 baitus 32bitų sistemai ir dar 12 baitų 64bitų sistemai. Likusi vieta yra naudojama apjungtosios bylų sistemos bylos valdikliui.
- Išorinė Inode numerių žymėjimo ir vertimo lentelė (xine) yra reikalinga, nes NFS bylos valdiklis yra pagrįstas inode numeriu. xino nustatymas yra įjungiamias pagal nutylėjimą.
Apjungtosios bylų sistemos turi būti pasiekiamosm, t.y. "nepaslėptos". Tai reiškia, kad naudoti "mount --move", kai yra naudojama initramfs, switch_root ar chroot.
- Kai dalinamas NFS katalogas, jis turi turėti nustatytą fsid parinktį.
- noplink parinktis dabar yra rekomenduojama naudoti.
Apjungtų katalogų dalinimas
Šių katalogų dalinimas beveik niekuo nesiskiria nuo paprastų. Tik reikia turėti omeny, kad serverio /etc/exports faile reikia pridėti fsid (tai tiesiog sveikas skaičius, pagal kurį atskiriamas dalinamasis katalogas) nustatymą, o kliento pusėje nepamiršti nustatyti NFS versijos, nes aufs veikia tik su NFS 3 ir naujesne versija.
Galimas serverio /etc/exports pavyzdys:
/data/multimedia/music 192.168.0.0/255.255.255.0(rw,no_root_squash,no_subtree_check,no_all_squash,sync,fsid=88294)
Galimas kliento fstab pavyzdys:
192.168.0.1:/data/multimedia/music /home/tadas/music/ nfs defaults,nfsvers=3,rw,users,soft 0 0
Pastebėjimai
- Maksimalus palaikomas apjungtų katalogų skaičius nustatomas kompiliavimo metu (local.mk failas). Numatytoji reikšmė yra 127.
- Bet kuri failų sistema gali būti panaudojama apjungimui išskyrus aufs ir unionfs. Jeigu jūs nurodysite aufs arba unionfs kaip apjungtiną katalogą, tai aufs praneš apie "perdengimo" klaidą. Nustačius CONFIG_AUFS_ROBR galėsite prijungti aufs failų sistemas prie kitos aufs šakos tik skaitymo režimu.
aufs naudoja išorinę žymėjimo lentelę duomenims tarp tikrų failų sistemų ir aufs sistemos apsikeisti (xino). Toje lentelėje yra dažnai keičiami duomenys, tad jeigu jūs naudojate flash įrenginį, rašiančiam aufs katalogui, tai jo tarnavimo laikas gali gerokai sutrumpėti. To išvengti galima nustačius, kad lentelė būtų saugoma ne tame flash įrenginyje. Tai padaryti galima prijungimo metu su xino nustatymu - xino=/kelias/iki/failo .
- Xino failai turėtų būti sukurti failų sistemoje išskyrus tada, kai failų sistemas NFS. Jeigu jūsų pirmasis apjungtas rašomas katalogas yra NFS, tai jums reikės nurodyti xino failo kelią kitur, bet ne NFS kataloge. Taip pat jeigu jūs ketinate pašalinti apjungtą katalogą, kur yra xino failas arba pakeisti apjungto katalogo rašymo teises tik į skaitymo, tai jums reikės nustatyti kitą xino failo vietą prieš šalinant ar modifikuojant apjungtą katalogą, kuriame tas xino failas yra.
- Taip pat nekorektiškai atvaizduojame likusi vieta apjungtuose kataloguose - rodoma laisva vieta likusi pirmame pagal eilę apjungtame kataloge.
Pabaiga
Aufs sistema turi daug galimybių, tad patartina gerai įsiskaityti į pateiktą dokumentaciją, kad geriau suprasti kaip ji veikia. Tačiau manau su šiuo straipsniu, jūs sugebėsite atlikti pagrindines, dažniausiai pasitaikančias užduotis.
Nuorodos
http://aufs.sourceforge.net/ - pagrindinis aufs puslapis.
http://aufs.sourceforge.net/aufs.html - aufs man dokumentacija.