7 Varukoopiad

See peatükk selgitab, kuidas, miks ja millal teha varukoopiaid ning mil viisil taastada vajaminevaid andmeid varukoopiate järgi.

7.1 Varukoopiate tähtsus

Paljud andmed on teile kindlasti väärtuslikud. Nende korduv loomine nõuab aega ja jõupingutusi ning maksab raha või vähemalt isiklikku südamevalu ja pisaraid. Mõnikord ei saa neid aga üldsegi taastada, näiteks kui on tegemist mingi eksperimendi tulemustega. Kuna küsimus on investeeringus, peaksite oma andmeid kaitsma ja astuma samme kaotuste vältimiseks.

On neli põhipõhjust, miks andmed võivad kaotsi minna: riistvara riknemine, tarkvara vead, inimlik tegevus või looduskatastroofid (viies põhjus on “midagi muud”). Kuigi kaasaegne riistvara on üsna töökindel, võib ta ikkagi näiliselt spontaanselt laguneda. Kõige ebakindlam osa andmesalvestuseks mõeldud riistvarast on kõvaketas, mis kasutab väikesi magnetvälju — need ei pruugi elektromagnetilise müraga täidetud maailmas puutumatuks jääda. Moodne tarkvara isegi ei püüa töökindel olla, kivikõva programm on pigem erand kui reegel. Inimesed on hoopiski ebausaldusväärsed, nad kas teevad vigu või on kuritahtlikud ja hävitavad andmeid sihilikult. Loodus pole võib-olla pahatahtlik, aga ta võib laastata isegi erapoolikust säilitades. Seda kõike arvestades on väike ime, et miski üleüldse töötab.

Varukoopiate tegemine ongi meetod andmetesse investeeritu kaitseks. Omades andmetest mitmeid koopiaid, pole millegi hävimine suur õnnetus ja maksma läheb see ainult kadunud andmete taastamise varukoopialt.

On tähtis varukoopiaid õigesti teha. Nagu kõik muu füüsilise maailmaga seotu, riknevad ka varukoopiad varem või hiljem. Olulise osa varukoopiate korrektsest valmistamisest moodustab veendumine nende kasutuskõlblikkuses (vastasel korral veendute varukoopiate kasutuskõlbmatuses ning reeglina liiga hilja). Kui säilitate ainult üht varukandjat, võib see samuti hävida ja sellisest varukoopiast on vähe kasu. Mõnikord võite andmete taastamisel märgata, et unustasite teha varukoopia millestki olulisest nagu näiteks 15 000 kasutajaga andmebaas. Kui aga kõik varukoopiad töötasid alles äsja perfektselt, võib ikkagi juhtuda, et viimane teadaolev magnetlintsalvesti seda tüüpi lintide lugemiseks on üleöö keldrisse viidud ning sisaldab nüüd pangetäie vett.

7.2 Varukoopia kandja valik

Kõige tähtsam varukoopiatega seotud otsus on varukoopia kandja valik. Arvestama peab kulusid, töökindlust, kiirust, kättesaadavust, kasutuslikkust jne.

Hind on oluline, sest varukoopiate tegemisel peaks ruumi olema mõned korrad rohkem kui andmete jaoks vaja läheb. Odav kandja on harilikult sundkäik.

Töökindlus on väga tähtis, kuna vigane varukoopia võib nutma panna ka suure mehe. Varukoopia kandja peab tagama andmete riknemata säilimise mitmeid aastaid. Varukoopia kandja töökindlust mõjutab ka kasutusviis. Kõvaketas on tavaliselt väga töökindel, aga varukoopia kandjana mitte kõige usaldusväärsem (eriti kui ta asub samas arvutis kettaga, millest varukoopiat tehakse).

Kiirus ei ole harilikult väga oluline, kui varukoopiaid tehakse arvutiga suhtlemata. Pole tähtis, kas varukoopia valmistamine võtab kaks või viis tundi, kuni see ei vaja järelvalvet. Teisest küljest, kui varukoopiat ei saa teha sel ajal, kui arvutil muid ülesandeid pole, kerkib kiirus tõsiseks probleemiks.

Kättesaadavus on ilmselt vajalik, kuna te ei saa kasutada varukoopia kandjat ilma teda hankimata. Laenamine ei tule siin ühegi tõsiselt võetava võimalusena arvesse. Muidu te lihtsalt ei saa taastada andmeid varukoopialt pärast krahhi.

Kasutuslikkus on oluline tegur siis, kui varukoopiaid valmistatakse sageli. Mida kergem neid teha on seda parem. Varukoopia kandja kasutamine ei tohiks olla keeruline või tüütav.

Tüüpilised alternatiivid on disketid ja magnetlindid. Disketid on väga odavad, üsna töökindlad, mitte väga kiired ja üpris kättesaadavad, aga samas mitte eriti kasutuslikud suurte andmekoguste puhul. Lindid on veidi kallimad, töökindlad, kiired, kättesaadavad ja sõltuvalt lindi suurusest ka üsna mugavad.

Leidub ka teisi alternatiive. Nad ei ole tavaliselt nii hea kättesaadavusega, aga kui see pole probleem, võivad otsustavaks saada muud head omadused. Näiteks magnetoptilised kettad ja CD-ROM-id omavad nii diskettide (nad on juhusliku juurdepääsuga, tehes ühe faili taastamise kiireks) kui ka lintide (sisaldavad palju andmeid) häid omadusi.

7.3 Varukoopia vahendi valik

Varukoopiate valmistamiseks saab kasutada mitmeid vahendeid. Unixi traditsioonilised varukoopiate tegemise vahendid on tar, cpio ja dump. Lisaks on välja töötatud palju sobivaid pakette (nii priivara kui ka kommertstarkvara). Varukoopia kandja valik võib mõjutada vahendi valikut.

Tar ja cpio on sarnased ning varukoopia seisukohast suures osas ekvivalentsed. Mõlemad on võimelised salvestama faile magnetlintidele ja neid sealt taastama, samuti kasutama peaaegu kõiki kandjaid, kuna tuuma seadmedraiverid hoolitsevad madala taseme töötluse eest ning kõik seadmed sarnanevad kasutajataseme programmidele. Mõned programmide tar ja cpio Unix-versioonid võivad omada probleeme ebatavaliste failidega (sümbollingid, seadmefailid, väga pikkade nimedega failid jne), aga Linuxi versioonid peaksid kõiki faile korralikult käsitsema.

Dump erineb selle poolest, et loeb failisüsteemi kettalt otse, mitte läbi süsteemse failisüsteemi. See programm kirjutati ka spetsiaalselt varukoopiate tegemiseks, tar ja cpio aga on tegelikult ette nähtud failide arhiveerimise jaoks, kuigi töötavad hästi ka varukoopiate valmistamisel.

Failisüsteemi otsesel lugemisel on mõningad eelised. See võimaldab failidest varukoopiaid teha nende ajamärke mõjutamata, tar'i ja cpio jaoks peaks aga failisüsteemi kõigepealt kirjutuskaitsega ühendama. Otsene failisüsteemi lugemine on intensiivse varundamise puhul ka oluliselt tõhusam, sest see toimub palju väiksema lugemis-kirjutuspea liigutamisega. Põhilise miinusena võib mainida, et varukoopiaprogramm on spetsiifiline iga failisüsteemi tüübi jaoks (näiteks Linuxi programm dump saab aru ainult failisüsteemist ext2).

Dump toetab ka varukoopiatasemeid, programme tar ja cpio kasutades peab aga appi võtma lisavahendid.

7.4 Lihtsad varukoopiad

Lihtne varunduskava näeb ette valmistada kõigest korraga varukoopia ning edaspidi varundada osi, mida on muudetud pärast eelmise varukoopia tegemist. Esimest, kõike sisalduvat varukoopiat, nimetatakse täisvarundiks, järgnevaid aga muutvarunditeks. Täisvarundi valmistamine on tihti töömahukam kui muutvarundite tegemine, kuna selleks on vaja lindile kirjutada palju rohkem andmeid, samuti ei pruugi täisvarund ühele lindile või disketile ära mahtuda. Taastamine muutvarunditelt võib aga tähendada palju suuremat tööd kui täisvarundilt taastamine. Muutvarundite kasutamist saab optimeerida nii, et teete alati varukoopia kõigest, mis on muutunud pärast eelmist täisvarundust. Sel juhul kaasneb varukoopiatega küll rohkem tööd, aga ei tohiks tekkida vajadust taastada rohkem kui täisvarund ja üks muutvarund.

Kui soovite teha varukoopiaid iga päev ja teil on kuus linti, võite kasutada 1. linti esimeseks täisvarunduseks (näiteks reedel) ja linte 2 - 5 muutvarunduseks (esmaspäevast neljapäevani). Siis tehke uus täisvarund kuuendale lindile (teine reede) ja alustage muutvarundite tegemist uuesti lintidega 2 - 5. Ei ole soovitav linti 1 enne üle kirjutada, kui teil on uus täisvarund, sest täisvarundi valmistamisel võib mõnikord midagi ootamatut ette tulla. Kui olete teinud täisvarundi lindile nr. 6, säilitage linti nr. 1 kusagil mujal (kui teised varulindid hävivad näiteks tulekahjus, jääb teile midagi ikkagi alles). Järgmise täisvarundi tegemisel võtate 1. lindi ja jätate 6. lindi tema asemele.

Kui teil on üle kuue lindi, saate neid kasutada täisvarunduseks. Iga uue täisvarundi valmistamisel kasutage kindlasti vanimat linti. Nii säilivad teil mitme eelneva nädala täisvarundid, mis lubavad vajaduse korral leida vana kustutatud faili või faili vanema versiooni.

7.4.1 Varundite tegemine tar'iga

Täisvarundi valmistamine programmiga tar on hõlbus:

# tar --create --file /dev/ftape /usr/src
tar: Removing leading / from absolute path names in the archive
#

Ülaltoodud näide kasutab tar'i GNU-versiooni (pikkade suvanditega). Programmi tar traditsiooniline versioon saab aru ainult ühemärgilistest suvanditest. GNU-versioon oskab käsitseda varundeid, mis ei mahu ühele lindile või disketile ning ka väga pikkade pöördusteedega failinimesid — kõik traditsioonilised versioonid nendega toime ei tule. Linux kasutab reeglina ainult tar'i GNU-versiooni.

Kui teie varund ei mahu ühele lindile, tuleb kasutada mitmeköitelist suvandit (-M):

# tar -cMf /dev/fd0H1440 /usr/src
tar: Removing leading / from absolute path names in the archive
Prepare volume #2 for /dev/fd0H1440 and hit return:
#

Pange tähele, et peate disketid enne varundust vormindama. Muidugi saab vormindamiseks kasutada teist akent või virtuaalterminali, kui tar peaks küsima uut disketti, aga see on tülikam.

Pärast varukoopia tegemist peaksite suvandi -compare (-d) abil kontrollima, kas kõik on korras:

# tar -compare -verbose -f /dev/ftape
usr/src/
usr/src/linux
usr/src/linux-1.2.10-includes/
....
#

Varukoopia kontrollist loobumine tähendab , et te ei pruugi oma varukoopiate töökõlbmatust märgata enne originaalandmete kaotamist.

Muutvarundi tegemiseks programmiga tar võib kasutada suvandit -newer (-N):

# tar -create -newer '8 Sep 1995' -file /dev/ftape /usr/src -verbose
tar: Removing leading / from absolute path names in the archive
usr/src/
usr/src/linux-1.2.10-includes/
usr/src/linux-1.2.10-includes/include/
usr/src/linux-1.2.10-includes/include/linux/
usr/src/linux-1.2.10-includes/include/linux/modules/
usr/src/linux-1.2.10-includes/include/asm-generic/
usr/src/linux-1.2.10-includes/include/asm-i386/
usr/src/linux-1.2.10-includes/include/asm-mips/
usr/src/linux-1.2.10-includes/include/asm-alpha/
usr/src/linux-1.2.10-includes/include/asm-m68k/
usr/src/linux-1.2.10-includes/include/asm-sparc/
usr/src/patch-1.2.11.gz
#

Kahjuks tar ei märka informatsiooni (näiteks pääsuloa või nime) muutumist faili inode'is. Probleemi saab lahendada käsuga find, võrreldes praegust failisüsteemi olekut varemvarundatud failide loendiga. Skriptid ja programmid selle teostamiseks võib leida Linuxi FTP-serveritest.

7.4.2 Failide taastamine tar'iga

Programmi tar suvand --extract (-x) ekstraktib faile:

# tar -extract -same-permissions -verbose -file /dev/fd0H1440
usr/src/
usr/src/linux
usr/src/linux-1.2.10-includes/
usr/src/linux-1.2.10-includes/include/
usr/src/linux-1.2.10-includes/include/linux/
usr/src/linux-1.2.10-includes/include/linux/hdreg.h
usr/src/linux-1.2.10-includes/include/linux/kernel.h
...
#

Järgnev käsurida võimaldab ekstraktida konkreetseid faile või katalooge (koos kõigi failide ja alamkataloogidega):

# tar xpvf /dev/fd0H1440 usr/src/linux-1.2.10-includes/include/linux/hdreg.h
usr/src/linux-1.2.10-includes/include/linux/hdreg.h
#

Varukoopia mingis köites sisalduvate failide loendi saamiseks kasutage suvandit -list (-t):

# tar -list -file /dev/fd0H1440
usr/src/
usr/src/linux
usr/src/linux-1.2.10-includes/
usr/src/linux-1.2.10-includes/include/
usr/src/linux-1.2.10-includes/include/linux/
usr/src/linux-1.2.10-includes/include/linux/hdreg.h
usr/src/linux-1.2.10-includes/include/linux/kernel.h
...
#

Pange tähele, et tar loeb varundit alati järjest, seega suurte varundite puhul on ta üsna aeglane. Pole ka võimalik kasutada suvalise juurdepääsuga andmebaasitehnikaid, kasutades magnetlintsalvestit või mõnda muud jadakandjat.

Tar ei käsitse kustutatud faile päris õigesti. Kui taastasite failisüsteemi täis- ja muutvarundilt ning olete kahe varunduse vahel mingi faili kustutanud, eksisteerib see fail pärast taastamist ometi edasi. Asjast võib kujuneda tõsine probleem, kui kõnealune fail sisaldab tundlikke andmeid, mis ei tohiks enam kättesaadavad olla.

7.5 Mitmetasemeline varundamine

Eelnevas jaotises käsitletud lihtne varundusmeetod on tihti piisav isiklikuks kasutamiseks või väikeste saitide puhul. Suurte võrgukohtade, paljude kasutajate ja tiheda töörežiimi korral sobib paremini mitmetasemeline varundamine.

Lihtsal meetodil on kaks varundustaset: täis- ja muutvarundid. Seda saab üldistada suvalise tasemete arvu jaoks. Täisvarund oleks tase 0 ja erinevad muutvarundite tasemed 1, 2, 3 jne. Igal muutvarunditasemel teete varukoopia kõigest, mis on muutunud pärast eelmist varundust samal või eelneval tasemel.

Selline varundusmeetod lubab odavalt luua pikema varundite ajaloo. Eelmise lõigu näites ulatus varundite ajalugu tagasi eelmise täisvarundini. Mahtu saab suurendada täiendavate lintide lisamisega, aga see võib liiga kalliks osutuda. Pikem varundite ajalugu on igati kasulik, kuna failide kustutamist või riknemist ei märgata tihtipeale väga kaua. Isegi faili ajalooline versioon on parem kui mitte midagi.

Mitme taseme abil saab varundite ajalugu palju odavamalt laiendada. Näiteks kui ostate 10 linti, võite kasutada linte 1 ja 2 igakuiseks varunduseks (esimene reede iga kuu), linte 3 - 6 iganädalaseks varunduseks (teised reeded; ärge unustage, et kuus võib olla ka viis reedet, seega vajate veel nelja linti) ja linte 7-10 igapäevaseks varunduseks (esmaspäevast neljapäevani). Ainult nelja lisalindiga võite pikendada varundite ajalugu kahelt nädalalt (kui kõik igapäevased lindid on kasutatud) kahe kuuni. Tõsi küll, te ei suuda taastada iga faili kõiki kahe kuu jooksul loodud versioone, aga tulemus on piisavalt hea.

Joonis 7.1 näitab, millist varundustaset iga päev kasutatakse ja millistelt varunditelt saab vajaduse korral taastada kuu lõppseisu.

Joonis 7.1 Mitmetasemelise varundusgraafiku näide

Varundustasemeid saab kasutada failisüsteemi taastamiseks kuluva aja säästmiseks. Kui teil on palju muutvarundeid monotoonselt kasvavate tasemenumbritega, peate kogu failisüsteemi taastamiseks töötlema neid kõiki. Selle asemel võite kasutada mittemonotoonseid tasemenumbreid, mis lubab vähendada taastatavate varundite arvu.

Taastamiseks vajalike lintide arvu minimeerimiseks kasutage iga muutvarundi jaoks madalamat taset. Sel juhul kasvab varundite tegemiseks kuluv aeg (iga varund kopeerib kõik alates viimasest täisvarundusest). Tabel 7.1 kirjeldab paremat skeemi. Kasutage järgmist varunditasemete järjestust: 3, 2, 5, 4, 7, 6, 9, 8, 9 jne. See hoiab nii varundite tegemis- kui ka taastamisajad lühikesed. Taastamiseks vajalike lintide arv sõltub sellest, kui pika aja tagant teha täisvarundeid, aga see on kindlasti vähem kui lihtsate skeemide puhul.

Stiilne skeem võib vähendada vajaliku töö hulka, aga samas eeldab paljude tegurite arvestamist ning tuleb otsustada, kas asi on vaeva väärt.

Programmile dump on varunditasemete tugi sisse ehitatud, programmide tar ja cpio puhul tuleb seda teostada kesta stsenaariumidega.

Lint Tase Varundus
(päeva)
Taaste-
lindid
1 0 n/a 1
2 3 1 1, 2
3 2 2 1, 3
4 5 1 1, 2, 4
5 4 2 1, 2, 5
6 7 1 1, 2, 5, 6
7 6 2 1, 2, 5, 7
8 9 1 1, 2, 5, 7, 8
9 8 2 1, 2, 5, 7, 9
10 9 1 1, 2, 5, 7, 9, 10
11 9 1 1, 2, 5, 7, 9, 10, 11
... 9 1 1, 2, 5, 7, 9, 10, 11, ...

Tabel 7.1 Tõhus varundusskeem, mis kasutab mitut varundustaset

7.6 Mida varundada

Loomulikult tahate te varundada niipalju kui võimalik. Põhiline erand on tarkvara, mida saab kerge vaevaga uuesti installeerida, aga isegi programmidel võib olla varundamist vajavaid konfigureerimisfaile, et mitte korrata kogu konfigureerimisprotseduuri. Teine suur erand on failisüsteem /proc, kuna temas sisalduvaid andmeid loob tuum automaatselt ning varukoopia valmistamine pole soovitav. Eriti mittevajalik tundub olevat fail /proc/kcore — jooksva füüsilise mälu kujutis ning päris suure mahuga.

Hallid alad sisaldavad uudiseid, logifaile ja mitmeid muid kataloogi /var osi. Peate ise otsustama, mida neist varundada.

Kindlasti tuleb varundada kõik kasutajate failid (/home) ja süsteemi konfigureerimisfailid (/etc pluss mõned failid mööda kogu failisüsteemi).

7.7 Tihendatud varundid

Varundid võtavad palju ruumi, mis võib maksta kopsaka summa. Vajaliku ruumi vähendamiseks saab varundeid tihendada. On olemas mitmeid tihendusmeetodeid. Mõned programmid toetavad sisseehitatud tihendusmoodulit: näiteks GNU tar'i suvand -gzip (-z) suunab kogu varundi enne kandjale kirjutamist läbi tihendusprogrammi gzip.

Kahjuks põhjustavad tihendatud varundid mõningaid probleeme. Olenevalt tihendusmeetodist võib ainult üks väär bitt muuta kasutuks kõik ülejäänud tihendatud andmed. Mõnedel varundusprogrammidel on küll sisseehitatud veaparanduskoodid, aga ükski meetod ei suuda käsitseda suurt arvu vigasid. Seega kui varund on tihendatud programmis GNU tar kasutataval viisil (salvestatakse tihendatud väljundina ainsasse üksusse), põhjustab üks viga ka kogu ülejäänud varundi riknemise. Varundid peavad olema töökindlad ja selline tihendusmeetod pole hea.

Alternatiiv oleks tihendada iga fail eraldi. See tähendab halvemal juhul ühe faili kadumist, aga kõik teised jääksid kahjustamata. Kadunud fail oleks võinud niikuinii rikneda, seega pole olukord halvem kui tihendamata jätmine. Programm afio (cpio variant) suudab seda teha.

Tihendamine võtab samuti mingi aja ja seetõttu ei pruugi varundusprogramm jõuda andmeid piisavalt kiiresti magnetlindile kirjutada. Kui magnetlintsalvesti ei saa andmeid rahuldava kiirusega kätte, peab ta peatuma. See muudab varundamise veelgi aeglasemaks ning mõjub halvasti nii lindile kui draivile. Väljundit võib küll puhverdada (kas sisemiselt, kui varundusprogramm on piisavalt tark, või eraldi programmiga), aga isegi sellised meetmed ei tarvitse olla piisavad. Üldiselt peaks siiski olema tegemist vaid aeglaste arvutite probleemiga.