Portál AbcLinuxu, 6. května 2025 06:23
Dnes už není největším majetkem zařízení nebo programové vybavení, ale jsou to samotná data. Jejich nevratná ztráta může firmu položit. A když k tomu připočteme i klesající kvalitu zařízení, musíme dávat větší důraz právě na zálohování. AFS umožňuje několik cest jak zálohovat a lze je různě kombinovat dle potřeb. Mezi zajímavý způsob patří online záloha volumu, kterou lze okamžitě připojit. AFS má vlastní systém zálohování, ale můžete využít mechanismu dumpů, který lze snadno napojit k již existujícím řešením zálohování.
Pokud nemáte ještě žádný systém zálohování, měli byste o něm rozhodně
uvažovat. V AFS už máte zálohovací systém vestavěný a hodí se pro systematické
zálohování dat uložených na AFS. Zálohovat můžete na pásky nebo na souborový
systém. AFS dumpy se použijí, když chcete integrovat zálohování AFS do
existujícího
systému. AFS vám v takovém případě dodá pouze archiv a jeho správu si
musíte zajistit sami. Backup volumy jsou jednorázová záležitost a doplňují
systém o snadný přístup uživatele k „poslední“ záloze. Zálohovat na úrovni
souborů, například programem tar
, není vhodné, protože je nutné
řešit přístup pro čtení dat, uložení oprávnění a nesmíme zapomenout
na mount pointy, které se běžnému programu (i uživateli) tváří jako adresáře.
V tomto díle budeme hlavně zálohovat uživatelský volume. Pokud
chcete vidět, že vám opravdu zálohuje, je vhodné tento
volume trochu zaplnit. Když jsme jej ale zakládali, nenastavili jsme
mu kvótu. Defaultní kvóta je 5000 KB, což dnes není nijak závratná
hodnota. Jako administrátor
(nezapomenout kinit
a aklog
) svému uživateli
zvýšíme kvótu na 1 GB (zapsat jej musíme v KB):
~$ cd /afs/foo.bar/users/s/svamberg/ /afs/.foo.bar/users/s/svamberg$ fs listquota . Volume Name Quota Used %Used Partition user.svamberg 5000 11 0% 6% /afs/foo.bar/users/s/svamberg$ fs setquota . -max 1000000 /afs/foo.bar/users/s/svamberg$ fs listquota . Volume Name Quota Used %Used Partition user.svamberg 1000000 11 0% 6%
Abychom se nemuseli znova přehlašovat, obejdeme uživatele, jak jsme se to naučili v minulém díle:
/afs/foo.bar/users/s/svamberg$ fs setacl home system:administrators all /afs/foo.bar/users/s/svamberg$ mkdir home/tmp
Do volumu uložíme nějaký obsah, cokoliv, co máme po ruce:
/afs/foo.bar/users/s/svamberg$ cp /boot/* home/tmp cp: omitting directory `/boot/grub' cp: omitting directory `/boot/lost+found'
Dump je jednoduchý způsob, jak si vyrobit zálohu. Zkrátka řeknete AFS, aby vám daný volume zabalil a uložil do jediného souboru. Výsledný soubor není komprimovaný. Je přitom jedno, jestli chcete zabalit RW, RO nebo BK (backup) volume.
Problém tohoto přístupu je, že umí sice provádět inkrementální dumpy,
ale pouze na úrovni souborů. Pokud mu zadáte datum a čas, od kterého
má udělat inkrementální zálohu, pak vos dump
zahrne do zálohy
pouze novější soubory (dle času modifikace) než je uvedené datum. Pokud se
tedy ve velkém datovém souboru změnil jen jeden bit, bude ve výsledném dumpu
zahrnut celý soubor. To nemusí být v některých případech nejvýhodnější.
K tomu musíte mít nějaký systém, který vám bude udržovat správu jednotlivých dumpů, zajistí vám návaznost mezi dumpem s plnou zálohou a inkrementálním dumpem. Většinou postačí několik jednoduchých skriptů, kterými mechanismus dumpů navážete na již existující zálohovací systém.
Plnou zálohu volumu vytvoříme snadno:
/afs/foo.bar/users/s/svamberg$ mkdir /tmp/afsdump ; cd /tmp/afsdump /tmp/afsdump$ vos dump -id user.svamberg -file user.svamberg.full Dumped volume user.svamberg in file user.svamberg.full
Pro inkrementální zálohu musíme napřed zjistit čas, provést nějakou změnu ve volumu a vytvořit dump od daného času:
/tmp/afsdump$ date +"%m/%d/%y %H:%M" 04/12/11 23:19 /tmp/afsdump$ cp /etc/motd /afs/foo.bar/users/s/svamberg/home/tmp/ /tmp/afsdump$ vos dump -time "04/12/11 23:19" -id user.svamberg -file user.svamberg.inc
V průběhu provádění zálohy je daný volume uzamčen a nelze do něj zapisovat,
ani nad ním dělat jiné administrátorské úkony. V případě malých volumů to
nevadí, ale u větších by to mohl být problém. Proto existuje přepínač
-clone
, který napřed vytvoří klon zálohovaného volumu a tento
klon se následně zazálohuje. Tato volba úplně nevyloučí uzamčení volumu,
ale významně potřebný čas pro zamknutí zkrátí. Vyzkoušíme to tentokrát
na RO volumu:
/tmp/afsdump$ vos dump -id root.afs -file root.afs.full -clone Dumped volume root.afs in file root.afs.full
Pokud chcete vidět rozdíl při vytváření zálohy s klonem a bez něj, použijte
přepínač -verbose
, který je dostupný téměř u všech AFS příkazů.
Některé zálohovací systémy mohou vyžadovat alokaci místa pro výsledný dump, například pro zjištění, zda na cílovém médiu je dostatek místa. Musíte tedy nějak zjistit velikost zálohy ještě před zálohováním. To lze snadno zjistit příkazem:
/tmp/afsdump$ vos size -id user.svamberg -dump Volume: user.svamberg dump_size: 8427706
Pro zjištění velikosti inkrementální zálohy stačí přidat parametr
-time
jako u vos dump
.
K vytvořeným zálohám by uživatelé neměli mít přístup, protože tyto dumpy lze obnovit na lokální souborový systém, kde by neplatila ACL z AFS a tak by se mohli snadno dostat k datům, k nimž nemají mít právo přístupu.
Toto obnovení má několik omezení z povahy rozdílů AFS a lokálních souborových
systémů. Především nelze obnovit přístupová práva, ani mount pointy. Dále mohou
soubory či adresáře přejmenovány, pokud se nenajde jejich umístění, to se může
stát při nesprávném pořadí inkrementů. Detaily o omezeních tohoto "nouzového"
způsobu obnovy jsou v manuálové stránce programu restorevol
.
/tmp/afsdump$ restorevol -file user.svamberg.full Restoring volume dump of 'user.svamberg' to directory './user.svamberg'. /tmp/afsdump$ ls user.svamberg/home/tmp/ System.map-2.6.36-trunk-amd64 initrd.img-2.6.36-trunk-amd64 config-2.6.36-trunk-amd64 vmlinuz-2.6.36-trunk-amd64
Přidaný soubor motd
samozřejmě chybí, měl by ale být v
inkrementální záloze:
/tmp/afsdump$ restorevol -file user.svamberg.inc Restoring volume dump of 'user.svamberg' to directory './user.svamberg'. An incremental dump. /tmp/afsdump$ ls user.svamberg/home/tmp/ System.map-2.6.36-trunk-amd64 motd config-2.6.36-trunk-amd64 vmlinuz-2.6.36-trunk-amd64 initrd.img-2.6.36-trunk-amd64
Pokud si rozbalíte inkrementální zálohu samostatně zjistíte, že
se v ní nachází celá adresářová struktura volumu a přidaný soubor motd
:
/tmp/afsdump$ restorevol -file user.svamberg.inc -extension .test Restoring volume dump of 'user.svamberg' to directory './user.svamberg.test'. An incremental dump. /tmp/afsdump$ find user.svamberg.test user.svamberg.test user.svamberg.test/public user.svamberg.test/public/project user.svamberg.test/home user.svamberg.test/home/tmp user.svamberg.test/home/tmp/motd user.svamberg.test/mail
Pokud nevíte co se v daném dump souboru nachází,
použijte utilitku file
:
/tmp/afsdump$ file user.svamberg.inc user.svamberg.inc: AFS Dump (v1) Vol 536870921, user.svamberg on: Tue Apr 12 20:50:44 2011 incremental since: Tue Apr 12 23:19:00 2011
Dump je samozřejmě vhodnější obnovit do AFS stromu, aby nám zůstaly zachovány všechny informace. Nejlepší volbou je rozbalení požadované zálohy jako nový volume, protože tak nepoškodíme to, co uživatelovi ještě zůstalo v jeho volumu. On by měl nejkvalifikovaněji rozhodnout, zda data ze zálohy jsou použitelná, nebo se spokojí s tím, co už si v domovském adresáři napáchal. To se samozřejmě netýká případů, kdy obnovujeme data po hardwarových problémech.
Dohodneme se, že uživatelské volumy budeme obnovovat ze záloh s prefixem
tmp.
. Tak poznáme, k jakému volumu se vztahuje a zároveň
se nám v budoucnu nebude plést mezi regulérní volumy. Pro obnovu musíme
uvést, na jakém serveru a partition se má nový volume vytvořit.
/tmp/afsdump$ vos restore -server afsfs.foo.bar -partition a -name tmp.user.svamberg -file user.svamberg.full Restoring volume tmp.user.svamberg Id 536870942 on server afssrv.foo.bar partition /vicepa .. done Restored volume tmp.user.svamberg on afsfs.foo.bar /vicepa /tmp/afsdump$ vos examine tmp.user.svamberg tmp.user.svamberg 536870942 RW 8231 K On-line afssrv.foo.bar /vicepa RWrite 536870942 ROnly 0 Backup 0 MaxQuota 1000000 K Creation Wed Apr 13 00:26:29 2011 Copy Wed Apr 13 00:26:29 2011 Backup Tue Apr 12 20:50:44 2011 Last Access Tue Apr 12 22:43:46 2011 Last Update Tue Apr 12 22:39:20 2011 0 accesses in the past day (i.e., vnode references) RWrite: 536870942 number of sites -> 1 server afssrv.foo.bar partition /vicepa RW Site
Nově vzniklý volume můžeme uživateli připojit do jeho domovského adresáře:
/tmp/afsdump$ fs mkmount /afs/foo.bar/users/s/svamberg/restore tmp.user.svamberg /tmp/afsdump$ ls /afs/foo.bar/users/s/svamberg/restore/home/tmp/ System.map-2.6.36-trunk-amd64 initrd.img-2.6.36-trunk-amd64 config-2.6.36-trunk-amd64 vmlinuz-2.6.36-trunk-amd64
V cestě je vidět celá struktura volumu, vyjma inkrementu, ten budeme aplikovat
s parametrem -overwrite incremental
:
/tmp/afsdump$ vos restore -server afsfs.foo.bar -partition a -name tmp.user.svamberg -file user.svamberg.inc -overwrite incremental Restoring volume tmp.user.svamberg Id 536870942 on server afssrv.foo.bar partition /vicepa .. done Restored volume tmp.user.svamberg on afsfs.foo.bar /vicepa /tmp/afsdump$ ls /afs/foo.bar/users/s/svamberg/restore/home/tmp/ System.map-2.6.36-trunk-amd64 motd config-2.6.36-trunk-amd64 vmlinuz-2.6.36-trunk-amd64 initrd.img-2.6.36-trunk-amd64
A teď záleží na tom, jak jsou vaši uživatelé spolehliví a nezačnou tento nový RW volume používat k odkládání. Takže důrazně informovat, aby daný volume nezneužíval. Je sice možnost snížit kvótu nebo odebrat právo pro zápis, ale to může vadit aplikacím, které uživatel může používat pro zpracování dat. Z výukových důvodů se podíváme, jak vypadá přetečená kvóta:
/tmp/afsdump$ fs setquota /afs/foo.bar/users/s/svamberg/restore/ 5000 /tmp/afsdump$ fs listquota /afs/foo.bar/users/s/svamberg/restore/ Volume Name Quota Used %Used Partition tmp.user.svamberg 5000 8232 165%<< 6% <<WARNING
Nepoužívejte velikost kvóty 0
(nula), protože to znamená
neomezenou kvótu.
OpenAFS podporuje tzv. negativní práva, tedy že někomu něco odpírá. Toho lze právě využít k odepření zápisu, aniž bychom museli nějak upravovat normální práva. Používat negativní oprávnění se však pro běžné případy nedoporučuje.
/tmp/afsdump$ cd /afs/foo.bar/users/s/svamberg/restore /afs/foo.bar/users/s/svamberg/restore$ find . -noleaf -type d -exec fs setacl -dir {} -acl svamberg w -negative \; /afs/foo.bar/users/s/svamberg/restore$ fs listacl home Access list for home is Normal rights: system:administrators rlidwka svamberg rlidwka Negative rights: svamberg iw
Nastavíme zpátky kvótu, protože jinak by nás odepřela ještě před testem práv. Pak se můžeme přihlásit jako uživatel a zkusit zapsat do souboru:
/afs/foo.bar/users/s/svamberg/restore$ fs sq . 1000000 /afs/foo.bar/users/s/svamberg/restore$ kinit svamberg Password for svamberg@FOO.BAR: /afs/foo.bar/users/s/svamberg/restore$ aklog /afs/foo.bar/users/s/svamberg/restore$ echo "xxx" >> home/tmp/motd bash: home/tmp/motd: Permission denied
Protože jsme neudělali negaci oprávnění pro mazání 'd', tak soubory odstraňovat můžeme:
/afs/foo.bar/users/s/svamberg/restore$ rm -f home/tmp/motd
Stejně nejlepší strategií je pohrůžka, že zítra ta záloha už připojená nebude. Je to bez práce a naprosto funkční řešení. My si ale volume ponecháme ještě na nějaké hraní do příštího dílu.
Nezáleží na tom, z jakého typu volumu (RW, RO, BK) byl dump vytvořen, vždy se bude obnovovat do RW volumu.
Zálohování do souborů je relativně jednoduchý způsob, ke kterému vám
stačí oprávnění administrátora a nemusíte v AFS nic konfigurovat. Oproti
tomu, musíte navázat externí zálohovací mechanismy minimálně na příkaz
vos dump
a je vhodné zajistit kompresi výsledného souboru.
Občas mohou nastat situace, že se vám bude hodit vytvořit jen jednorázový dump, například před operací s volumem, kde si nejste jisti výsledkem. V přístím díle budeme v zálohování pokračovat, tentokrát budeme vytvářet BK volumy a postaráme se, aby zálohování probíhalo automaticky.
Díly o zálohování mi zkontroloval a připomínkoval Olda Balák, velmi děkuji.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.