Rsnapshot: erinevus redaktsioonide vahel
Resümee puudub |
Resümee puudub |
||
1022. rida: | 1022. rida: | ||
* jätab arvuti käima lisaks 30 minutiks (vastasel korral on keeruline arvutisse üldse sisse saada |
* jätab arvuti käima lisaks 30 minutiks (vastasel korral on keeruline arvutisse üldse sisse saada |
||
* lülitab arvuti välja |
* lülitab arvuti välja |
||
+ | |||
+ | ===2023 aasta alguse tähelepanekud=== |
||
+ | |||
+ | Debian v. 11 süsteemi rnsapshot paigaldamiseks sobib kasutada backports repot, saab rsnapshot versioon 1.4.5 |
||
+ | |||
+ | <pre> |
||
+ | root@pbs:~# tail -n 2 /etc/apt/sources.list |
||
+ | deb http://deb.debian.org/debian bullseye-backports main contrib non-free |
||
+ | deb-src http://deb.debian.org/debian bullseye-backports main contrib non-free |
||
+ | </pre> |
||
===Kasulikud lisamaterjalid=== |
===Kasulikud lisamaterjalid=== |
Viimane redaktsioon: 28. veebruar 2023, kell 00:48
Sissejuhatus
rsnapshot http://rsnapshot.org/ on varundamise tarkvara, mida iseloomustavad sellised omadused
- kirjutatud Perl keeles
- võimaldab varundatud andmeid mitmetasemeliselt roteerida (nt nii, et pidevalt on olemas viimase 28 päeva, viimase 8 nädala pühapäevase päeva, viimase 24 kuu ühe nädala pühapäevase päeva ja viimase 10 aasta ühe kuu pühapäevase päeva varukoopiad)
- kasutab rsync tarkvara ja hardlinkimist
- varundatud andmete varasemad seisud saab teha kasutajatele automaatselt kättesaadavaks nö /home/.snapshot kataloogi abil
- rsnapshot võimaldab seadistusfailis kirjeldatud tegevusi enne käivitamist kontrollida ning esitada rsync, mv, rm jt käsud koos võtmetega, mida kasutatakse varundamisel tehes varundmise debugimise oluliselt lihtsamaks
- olemasolevat varundust on suhteliselt lihtne migreerida rsnapshotile, kuna andmeid hoitakse otseselt failisüsteemis ja ennustatavates kataloogides
- rsync võtmetega saab kontrollida varundatavate andmete kopeerimise kiirust
- rsnapshot kasutamisel kulub suhteliselt palju failisüsteemi inodesid
Tööpõhimõte
rsnapshot võimaldab varundada andmeid kahel viisil
- kohaliku arvuti failisüsteemist sama arvuti kataloogipuu alla
- kopeerides üle võrgu varundatavatest arvutitest varunduse arvutisse (ülemine nool märgib ühenduse algatamise suunda, alumine andmete liikumise suunda)
varunduse arvuti varundatav arvuti _____ _____ | | -----> | | |_____| <----- |_____| | | | | ---|-----------------------------|----- rsync, ssh, rsnapshot rsync, sshd
rsnaphost kasutab andmete varunduse arvutisse kopeerimiseks rsync tarkvara, millega kaasnevad sellised asjaolud
- varundatava arvuti poole pöördutakse ülidselt privilegeeritud kasutajana, kuigi tehniliselt võib kasutada ka privilegeerimata kasutajat
- varunduse arvutis säilitatakse varundatavad failid hardlinkidena, mis tähendab, et kui fail ei muutu, siis tema järgmisel varundamisel praktiliselt ei kulu varunduse arvutis ruumi; faili isegi natuke muutunud uus versioon võtab uuesti samapalju ruumi failisüsteemis
- üle võrgu liigub andmeid minimaalselt
- varundatud faile saab otseselt varunduse arvuti failisüsteemis kasutada (taasteks on vaja faile lihtsalt kopeerida)
- varundusserverisse peab olema paigaldatud rsnapshot, varundatavates arvutites peab olema üldiselt olemas rsync programm ja SSH server
Varundamise saab seadistada tööle kahel viisil
- sync_first
- non sync_first
kusjuures peaks eelistama sync_first varianti põhjusel, et nii toimub kopeerimine ja roteerimine eraldi käivitatavate tegevustena ja sedasi saab hõlpsamini nt uut seadistust läbi proovida ilma varem varundatud andmeid kaotamata.
sync_first
sync_first puhul (st seadistusfailis on vastav parameeter sisse lülitatud) koosneb varundamine kahest tegevusest
- varundatavast arvutist kopeeritakse andmed varunduse arvuti ajutisse kataloogi /var/cache/rsnapshot/.sync/arvutinimi käsuga
# rsnapshot sync
- ajutise kataloogi ümbernimetamine daily.0 kataloogiks
# rsnapshot daily
non sync_first
sync_first mitte kasutamisele (st parameeter on seadistusfailis välja lülitatud) öeldakse
# rsnapshot daily
mille käigus toimub kaks tegevust
- varundatavas arvutis nihutatakse nö daily.* nimed edasi ja tekitatakse uus daily.0 kuhu kopeeritakse hard linkide abil daily.1
- rsync abil kirjutatakse daily.0 sisu üle, sealjuures kustutatakse vahepeal allikas kustunud failid
Varundatud andmete roteeerimine
Varunduse arvutis roteeritakse varundatud andmeid rsnapshot käsuga, kasutades sobivat parameetrit, nt
# rsnapshot hourly | daily | weekly | monthly | ...
Daily
Kui seadistufailis on kirjeldatud nt sellised rotatsiooni intervallid
retain daily 7 retain weekly 3 retain monthly 2
ning öeldakse teist korda
rsnapshot sync && rsnapshot daily
siis sync moodustab uuesti .sync kataloogi ning daily kutsub esile sellised kataloogide ümbernimetamised
daily.0 -> daily.1 .sync -> daily.0
kus
- esmalt liigutatakse olemasoleva kataloog daily.0 nime alla daily.1
- seejärel liigutatakse .sync nime alla daily.0
Olgu aga toimunud seitse sync && daily käivitamist, st olemas on kataloogid
daily.0 ... daily.6
Sellises olukorras järgmise sync ja daily käivitamisel liigutatakse katalooge nii
daily.6 -> _delete.PID daily.5 -> daily.6 daily.4 -> daily.5 daily.3 -> daily.4 daily.2 -> daily.3 daily.1 -> daily.2 daily.0 -> daily.1 .sync -> daily.0
Kusjuures skripti töö lõpus vahepeal moodustunud delete nimeline kataloogi kustutatakse.
Weekly
Igal weekly käivitamisel liigutatakse katalooge sarnaselt, kui daily.6 puudub, siis ei toimu olemasolevate weekly.* kataloogidega üldse midagi
weekly.2 -> _delete.PID weekly.1 -> weekly.2 weekly.0 -> weekly.1 daily.6 -> weekly.0
Monthly
Iga monthly käivitamisel liigutatakse katalooge saranselt, kui weekly.2 puudub, siis ei toimu olemsolevate monthly.* kataloogidega üldse midagi
monthly.1 -> _delete.PID monthly.0 -> monthly.1 weekly.2 -> monthly.0
Tulemus
Varundamise töö käigus tekib varunduse arvutisse sarnane kataloogistruktuur
/srv/data/rsnapshot/daily.0/moraal.auul /srv/data/rsnapshot/daily.0/fs.auul /srv/data/rsnapshot/daily.1/moraal.auul /srv/data/rsnapshot/daily.1/fs.auul /srv/data/rsnapshot/daily.2/moraal.auul /srv/data/rsnapshot/daily.2/fs.auul ... /srv/data/rsnapshot/weekly.0/moraal.auul /srv/data/rsnapshot/weekly.0/fs.auul /srv/data/rsnapshot/weekly.1/moraal.auul /srv/data/rsnapshot/weekly.1/fs.auul ... /srv/data/rsnapshot/monthly.0/moraal.auul /srv/data/rsnapshot/monthly.0/fs.auul /srv/data/rsnapshot/monthly.1/moraal.auul /srv/data/rsnapshot/monthly.1/fs.auul ...
Varundamiseks kasutatakse ainult varunduse arvuti failisüsteemi, mis tähendab, et varunduse arvuti failisüsteem peab olema üldiselt samade või nö rohkemate omadustega, kui kõige keerulisema varundatava arvuti failisüsteem (nt failinimede pikkuse poolest). Varundamine ei sõltu praktiliselt varunduse arvuti kellaajast, st roteerimise määrab erinevate argumentidega rsnapshot käivitamine. Oma töö käigus ei tekita rsnapshot mingeid nö metaandmeid varunduse arvuti failisüsteemi (nt timestamp faile vms).
Märkused
Osutub, et retain parameetri järel kasutatud parameetrite hourly, daily, weekly jt nimed on suvalised, st nende asemel võib kasutada suvalisi unikaalseid nimesid, nt igatunnine, iganadalane, centurly. Toimimise seisukohast on oluline millal ja millise parameetriga rsnapshot programmi käivitatakse.
Tarkvara paigaldamine
Varunduse arvuti
rsnapshot tarvkara paigaldamiseks varunduse arvutisse sobib öelda
# apt-get install rsnapshot
kusjuures tekivad
- /etc/rsnaphost.conf - seadistusfail
- /var/cache/rsnapshot - varundatavate andmete kataloog
Varundatav arvuti
Varundatavast arvutis peab saama andmeid kopeerida rsync abil, selleks paigaldatakse tavaliselt varundatavasse arvutisse rsync programm ning tekitatakse sinna SSH võtmega ligipääs varunduse arvuti jaoks.
Varundamise seadistamine
Varundamise tööd juhib seadistusfail /etc/rsnapshot.conf, mille kirjutamisel tuleb arvestada, et
- parameeter ja tema väärtused tuleb eraldada ühe või enama tabulaatoriga
- katalooginimed (lokaalsed ja teise arvuti omad) tuleb lõpetada reeglina kaldkriipsuga
Nt sellised read teevad koopia lokaalse ja üle võrgu ligipääsetava arvuti /etc kataloogist
# egrep -v "^#|^$" /etc/rsnapshot.conf config_version 1.2 snapshot_root /var/cache/rsnapshot/ cmd_cp /bin/cp cmd_rm /bin/rm cmd_rsync /usr/bin/rsync cmd_ssh /usr/bin/ssh cmd_logger /usr/bin/logger retain daily 7 retain weekly 3 retain monthly 2 verbose 3 loglevel 3 logfile /var/log/rsnapshot.log lockfile /var/run/rsnapshot.pid rsync_short_args -aH rsync_long_args --delete --numeric-ids --relative --delete-excluded link_dest 1 sync_first 1 use_lazy_delete 1 backup /etc/ localhost/ backup root@moraal.auul:/etc/ moraal.auul/ +rsync_long_args=--bwlimit=16000,exclude=core,ssh_args=-p22222
kus
- /var/cache/rsnapshot/ - varundamise arvuti kataloog, kus asuvad varundatud andmed
- lockfile - tagab, et kui rsnapshot protsess käib ja püütakse käivitada teist eksemplari, siis see ei käivitu
- rsync_short_args ja rsync_long_args - milliste suvanditega rsync programmi käivitatakse; erinevad rsync suvandid on eristatud komadega sh ssh kuulab mittestandardsel pordil
- link_dest - rsnapshot seadistusfailis saab öelda, kas kasutatakse rsync --link-dest parameetrit või mitte; mitte puhul kasutatakse hardlinkide moodustamiseks cp -al käsku, nt
... mv /var/cache/rsnapshot/daily.1/ /var/cache/rsnapshot/daily.2/ /bin/cp -al /var/cache/rsnapshot/daily.0 /var/cache/rsnapshot/daily.1 /usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \ --exclude=core --bwlimit=16000 --rsh=/usr/bin/ssh root@moraal.auul:/etc \ /var/cache/rsnapshot/daily.0/moraal.auul/
- sync_first - andmete kopeerimisel kasutatakse spetsiaalset ajutist kataloogi /var/cache/rsnapshot/.sync/moraal.auul ning andmete roteerimine toimub eraldi protseduurina; sync-first kasutamine annab võimaldab tulla paremini toime mingil põhjusel katkenud varundamisega.
- use_lazy_deletes kasutamisel toimub välja roteeritud backupi kustutamine skripti töö lõpus (vaikimisi toimib ta enne roteerimisi)
- backup ja backup_script (vt. allpool) read täidetakse üksteise järel; teise arvutisse sisselogimine seatakse tavaliselt käima ssh võtmetega
- +rsync_long_args - lisab seadistusfailis ülalpool kasutatud samanimelise võtme argumentidele näidatud argumendid; ilma + märgita asendab
Seadistusfaili kontrollimiseks sobib öelda
# rsnapshot configtest Syntax OK
backup_script kasutamine
backup_script võimaldab andmete kopeerimise asemel käivitada skripti kas lokaalses või mõnes teises arvutis. backup_script tegeleb vaid skripti käivitamisega, skripti väljundi tulemusel kuhugi failisüsteemi tekkinud andmed kopeeritakse tavaliselt mõne järgmise backup reaga varunduse arvutisse.
Lokaalselt töötava PostgreSQL andmebaasi dump faili abil varundamine
Varunduse arvuti lokaalse PostgreSQL andmebaasi sql skripti kujul varundamiseks sobib kasutada rida
backup_script /bin/su - postgres -c "pg_dump -Fc -U postgres \ -f ~postgres/postgres.dump postgres"; mv ~postgres/postgres.dump `pwd` \ moraal.auul/rsnapshot-created-backup
kus
- kasutajana postgres käivitatakse pg_dump
- salvestatakse väljund kasutaja postgres kodukataloogi faili postgres.dump
- liigutatakse salvestatud dump ajutisse kataloogi /var/cache/rsnapshot/tmp mille loomise, kasutamise ja kustutamisega rsnapshot ise automaatselt tegeleb
Teises arvutis töötava PostgreSQL andmebaasi dump faili abil varundamine
Teisest arvutist PostgreSQL andmebaasi sql skripti kujul varundamiseks sobib kasutada ridu
backup_script /usr/bin/ssh root@moraal.auul "su - postgres -c \"pg_dump -Fc \ -h /var/run/postgresql -U postgres -f /var/backups/postgresql/prelude.sql prelude\""\ placeholder_dir_name backup root@moraal.auul:/var/backups/ moraal.auul/ +rsync_long_args=--bwlimit=160,exclude=core
kus
- esmalt käivitatakse teises arvutis üle ssh pg_dump, mille väljund salvestataks faili /var/backups/postgresql/prelude.sql
- seejärel backup direktiiviga kopeeritakse /var/backups kataloog üle võrgu, sh andmebaasi backup varunduse arvutisse
Teises arvutis töötava PostgreSQL andmebaasi kõigi create database andmebaaside varundamine
# cat /root/system/db-bu-pgsql.sh #!/bin/bash renice 19 -p $$ 1>/dev/null rm /var/backups/postgresql/*.sql rm /var/backups/postgresql/*.dump su - postgres -c "pg_dumpall -r -f /var/backups/postgresql/roles.sql" baasid=`su - postgres -c "psql -A -t -U postgres postgres -c \"select datname from pg_database;\""` for baas in $baasid; do if test "$baas" != "template0" && test "$baas" != "template1"; then su - postgres -c "pg_dump -Fc -f /var/backups/postgresql/$baas.dump $baas" fi done
Teises arvutis töötava PostgreSQL andmebaasi wal logide abil varundamine
Teisest arvutist PostgreSQL andmebaasi wal logs kujul varundamiseks tuleb kasutada rsnaphosti kahe seadistusfailiga
- rsnapshot.conf - salvestatakse igapäevaselt va reedel kõik andmebaasi arvutist vajalik, sh wal logid, kuid mitte andmebaasiklastri kataloog /var/lib/postgresql
- rsnapshot.conf-pgbaasiga - salvestatakse reedel kõik andmebaasi arvutist vajalik, sh wal logid ja andmebaasiklastri kataloog /var/lib/postgresql; seejuures tuleb reedest päeva säilitada ka nädalateks ja kuudeks roteerimisel, et vanemad varundid oleksid baasi osas kasutatavad
reedese skripti sees on vajalik kasutada selliseid ridu
backup_script /usr/bin/ssh root@moraal.auul /root/bin/pg_start_backup.sh placeholder_dir_name_1 backup root@moraal.auul:/ moraal.auul/ +rsync_long_args=--exclude-from=/etc/rsnapshot/exclude-from-moraal.auul-baasiga backup_script /usr/bin/ssh root@moraal.auul /root/bin/pg_stop_backup.sh placeholder_dir_name_2 backup root@moraal.auul:/data/backup/postgresql/archive-logs/ moraal.auul/
kus
- esmalt öeldakse teises arvutis pg_start_backup('rsnapshot')
- seejärel kopeeritakse kõik vajalik sh andmeklastri kataloog
- seejärel öeldakse teises arvutis pg_stop_backup()
- kopeeritakse wal logid
Varundatavas arvutis asuvad nt kaks sellist skripti
# cat /root/bin/pg_start_backup.sh #!/bin/bash /bin/su - postgres -c "psql -h /var/run/postgresql -U postgres -c \"select pg_start_backup('rsnapshot');\""
# cat /root/bin/pg_stop_backup.sh #!/bin/bash /bin/su - postgres -c "psql -h /var/run/postgresql -U postgres -c \"select pg_stop_backup();\""
Kui kasutada selliseid intervalle
retain daily 7 retain weekly 3 retain monthly 2
ning esimene varundamine, millega ka kopeeritakse andmeklaster teha pühapäeval, siis sobib rsnapshot käivitada crontabist nii
30 2 1 * * root /usr/bin/rsnapshot monthly 0 3 * * 0 root /usr/bin/rsnapshot weekly 30 3 * * 1-6 root /usr/bin/rsnapshot sync && /usr/bin/rsnapshot daily 30 3 * * 0 root /usr/bin/rsnapshot sync && /usr/bin/rsnapshot -c /etc/rsnapshot-pgbaasiga.conf daily
kus
- esimene andmeklastriga kopeerimine toimub pühapäeval seadistusfailiga /etc/rsnapshot-pgbaasiga.conf; moodustatakse daily.0 kataloog
- järgmised kuus käivitust esmaspäevast laupäevani (kaasa arvatud) toimuvad seadistusfailiga /etc/rsnapshot-pgbaasiga.conf; daily.0 roteeritakse seejuurel kataloogiks daily.6
- järgmise pühapäeva rsnapshot weekly liigutab daily.6 nime alla weekly.0, see toimub 30 min enne pühapäevast järgmist full backup'i
- kuu esimesel päeval käivituv rsnapshot monthly liigutab weekly.11 nime alla montly.0
Kuna wal logidega salvestatud baasi koopiad võtavad kokku ruumi nii palju kui nende summa failisüsteemis algselt on, võib olla mõistlik kaaluda backupninja ja rdiff-backup kasutamist.
LVM snapshot kasutamine teises arvutis
Järgnev on nö vaese-mehe-mysql varundamise preexe-postexec skript. Backup töötab sama tõenäoliselt kui MySQL käivitub peale arvuti krahhi, st üpris tõenäoliselt. Wiki süntaksi tõttu on sisemiste if'ide [ märkide vahel lisa tühik
# cat lvm_ss.sh #!/bin/bash lvm_nimi="/dev/pve/mysql"; lvm_create_ss="mysql_ss" lvm_remove_ss="/dev/pve/mysql_ss" lvm_mp_ss="/mnt/mysql_ss" lvm_ss_size=5G if [ "$1" = "start" ]; then if [ [ "$lvm_remove_ss" == *_ss ] ]; then lvcreate -L$lvm_ss_size -s -n $lvm_create_ss $lvm_nimi mount $lvm_mp_ss fi elif [ "$1" = "stop" ]; then if [ [ "$lvm_remove_ss" == *_ss ] ]; then umount $lvm_mp_ss lvremove -f $lvm_remove_ss fi fi
Kasutamine toimub sedasi
# ./lvm_ss.sh start | stop
Teises arvutis töötava MySQL andmebaasi kõigi create database andmebaaside varundamine
Varundamiseks kõik teenusega seotud ja mysql sisemiste asjade pidamise baasid varundada mysqldump abil tavalisel viisl. Ja samuti taastada tavalisel viisil sh mysql enda asjade omad.
# zgrep "^DROP TABLE IF" /var/backups/mysql/localhost-mysql-mysql.sql.gz | nl 1 DROP TABLE IF EXISTS `columns_priv`; 2 DROP TABLE IF EXISTS `db`; 3 DROP TABLE IF EXISTS `event`; 4 DROP TABLE IF EXISTS `func`;
...
# zgrep "^CREATE " /var/backups/mysql/localhost-mysql-mysql.sql.gz | nl 1 CREATE TABLE `columns_priv` ( 2 CREATE TABLE `db` ( 3 CREATE TABLE `event` ( 4 CREATE TABLE `func` ( 5 CREATE TABLE `help_category` (
LVM snapshot kasutamine lokaalselt
LVM snapshoti saab kasutada ainult lokaalseks varundamiseks, st LVM ja rsnapshot töötavad ühes ja samas arvutis. Selleks tuleb seadistusfailis kasutada lisaks selliseid ridu
linux_lvm_cmd_lvcreate /sbin/lvcreate linux_lvm_cmd_lvremove /sbin/lvremove linux_lvm_cmd_mount /bin/mount linux_lvm_cmd_umount /bin/umount ... linux_lvm_snapshotsize 100M linux_lvm_snapshotname rsnapshot_temp_lvm linux_lvm_vgpath /dev linux_lvm_mountpath /mnt/rsnapshot_temp_lvm ... backup lvm://vgname/lvname/ vgname-lvname/
kus
- neli esimest rida näitavad LVM ja monteerimisega seotud programmide asukohad
- neli järgnevat näitavad snapshoti suuruse, nime, seadme asukoha failisüsteemis ning asukoha, kuhu snapshot ajutiselt monteerimitakse
Käivitamisel ilmuvad logisse sarnased teated
/sbin/lvcreate --snapshot --size 100M --name rsnapshot_temp_lvm /dev/vgname/lvname /bin/mount /dev/vgname/rsnapshot /mnt/rsnapshot_temp_lvm chdir(/mnt/rsnapshot_temp_lvm) /usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \ --link-dest=/var/cache/rsnapshot/daily.0/vgname-lvname/ . \ /var/cache/rsnapshot/.sync/vgname-lvname/ chdir(/root) /bin/umount /mnt/rsnapshot_temp_lvm /sbin/lvremove --force /dev/vgname/rsnapshot_temp_lvm Logical volume "rsnapshot_temp_lvm" successfully removed
rsnapshot töötamise ajal paistab selline pilt
# df ... /dev/mapper/vgname-lvname 485M 15M 446M 4% /mnt/vgname-lvname /dev/mapper/vgname-rsnapshot_temp_lvm 485M 15M 446M 4% /mnt/rsnapshot_temp_lvm
rsync serveri kasutamine
Anonüümsest rsync serverilt kopeerimiseks sobib kasutada nt rida
backup ftp.aso.ee::OpenBSD/patches/4.7/common/ ftp.aso.ee-OpenBSD-patches-4.7-patches /usr/bin/rsync -aH --delete --numeric-ids --relative --delete-excluded \ --link-dest=/var/cache/rsnapshot/daily.0/ftp.aso.ee-OpenBSD-patches-4.7-patches \ ftp.aso.ee::OpenBSD/patches/4.7/common \ /var/cache/rsnapshot/.sync/ftp.aso.ee-OpenBSD-patches-4.7-patches
Logimine
Logimise seadistamiseks sobib kasutada log-file rsync suvandit, mille tulemusena salvestatakse kõik rsync kasutamisel kopeeritud failide nimed ühte faili, kusjuures järgmistel käivitamistel lisatakse faili andmeid juurde mitte ei kirjutata faili üle
rsync_long_args --delete --numeric-ids --relative --delete-excluded --log-file=/var/log/rsnapshot-rsync.log
Selleks, et saada paremini aru, millise arvuti varundamisega on üks või teine selle faili rida seotud võiks öelda varundatavates arvutites croniga kord päevas
crontab -l 05 0 * * * rm -f /etc/000-mail.loomaaed.tartu.ee-* && touch "/etc/000"-"`hostname -f`"-"`date +%Y%m%d`"
Varundamine
Esmakordsel varundamisel maksab kasutada -t ehk test võtit
# rsnapshot -t sync
ja reaalseks esimese varundamise tegemiseks
# rsnapshot sync && rsnapshot daily
Seejuures võib sync järel näidata varundatava arvuti nime
# rsnapshot sync mortaal.auul
Tulemusena tekib varundus
# ls -ld /var/cache/rsnapshot/daily.*/* drwxr-xr-x 3 root root 4096 Aug 20 15:55 /var/cache/rsnapshot/daily.0/localhost drwxr-xr-x 4 root root 4096 Aug 20 16:03 /var/cache/rsnapshot/daily.0/moraal.auul
Käivitamine cronist
Tavaliselt käivitatakse varunduse tööd Cron abil, mida juhib nt selline crontab seadistusfail
# cat /etc/cron.d/rsnapshot MAILTO=priit@loomaaed.tartu.ee 30 2 1 * * root /usr/bin/rsnapshot monthly 0 3 * * 0 root /usr/bin/rsnapshot weekly 30 3 * * * root /usr/bin/rsnapshot sync && /usr/bin/rsnapshot daily
kus
- antud juhul töötab sync režiimis varundamine
- on näha, et harvem toimuvad protseduurid tehakse kellaajaliselt natuke varem
- igakuine backup käivitatakse iga kuu esimesel päeval kell 02:30 varahommikul
- iganädalane backup käivitatakse iga nädala puhapäevasel päeval 03:00
- igapäevane backup käivitatakse igal varahommikul kell 03:30
- MAILTO aadressile saadetakse kiri varundustöö logiga
Kui mõnel päeval toimub varundamine nö eriliselt, nt kord nädalas, pühapäeva varahommikul andmebaasi full backup, siis ilmselt peaks just see nädalapäev roteeruma weekly'ks ja edasi monthly'ks. Selleks tuleb jälgida, et esmaspäeva varahommikul oleks olemas selline viimane daily (interval/retain mõttes), et see sisaldaks andmebaasi full backup'i. Full backup päeva saab kohale nö liigutada pühapäeva õhtul öeldes käsitsi sobiva arvu kordi
# rsnapshot daily
ning seejärel
# cp -al daily.koige-väiksem-arv daily.0
ning moodustades puuduvad daily.x kataloogid
# mkdir daily.1 daily.2 ... daily.x
rsnapshot-diff
Varundatud andmete kohta kahe kataloogi erinevuste kohta sobib küsida rsnapshot-diff programmiga, nt
# rsnapshot-diff -v daily.0 daily.1 Comparing daily.1 to daily.0 + daily.0/moraal.auul/var/backups/postgresql/prelude.dump - daily.1/moraal.auul/var/backups/postgresql/prelude.dump + daily.0/moraal.auul/etc/resolv.conf - daily.1/moraal.auul/etc/resolv.conf Between daily.1 and daily.0: 2 were added, taking 1869281 bytes; 2 were removed, saving 1870744 bytes;
Varunduse arvutis failisüsteemi kasutamise kohta sobib küsida
rsnapshot du
rsnapshot argument du abil saab küsida varundatud andmete varunduse serveri ressurssikasutuse kohta
# rsnapshot du moraal.auul du -csh /var/cache/rsnapshot/daily.0/moraal.auul \ /var/cache/rsnapshot/daily.1/moraal.auul \ /var/cache/rsnapshot/daily.2/moraal.auul \ /var/cache/rsnapshot/weekly.0/moraal.auul \ /var/cache/rsnapshot/weekly.1/moraal.auul \ /var/cache/rsnapshot/monthly.0/moraal.auul 339M /var/cache/rsnapshot/daily.0/moraal.auul 2.2M /var/cache/rsnapshot/daily.1/moraal.auul 3.5M /var/cache/rsnapshot/daily.2/moraal.auul 1.7M /var/cache/rsnapshot/weekly.0/moraal.auul 1.7M /var/cache/rsnapshot/weekly.1/moraal.auul 1.7M /var/cache/rsnapshot/monthly.0/moraal.auul 349M total
kust on näha, et üks eksemplar võtab täis ruumi ning ülejäänud oluliselt vähem.
rsnapreport.pl
util kataloogis on rsnapreport, mille kasutamiseks tuleb /etc/rsnapshot.conf failis lisada rsync programmile juurde --stats suvand
# gunzip /usr/share/doc/rsnapshot/examples/utils/rsnapreport.pl.gz # chmod 0755 /usr/share/doc/rsnapshot/examples/utils/rsnapreport.pl # rsnapshot sync 2>&1 | /usr/share/doc/rsnapshot/examples/utils/rsnapreport.pl SOURCE TOTAL FILES FILES TRANS TOTAL MB MB TRANS LIST GEN TIME FILE XFER TIME -------------------------------------------------------------------------------------------------------------------- fs.auul:/etc 1424 0 2.54 0.00 0.001 seconds 0.000 seconds fs.auul:/lib 7490 0 275.12 0.00 0.001 seconds 0.000 seconds mon.auul:/etc 1796 0 2.64 0.00 0.001 seconds 0.000 seconds mon.auul:/lib 5717 0 174.06 0.00 0.001 seconds 0.000 seconds moraal.auul:/etc 3361 0 58.48 0.00 0.001 seconds 0.000 seconds
kus
- SOURCE - millist ressurssi varundati
- TOTAL FILES - kui palju oli varundatavaid faile
- FILES TRANS - kui palju faile reaalselt kopeeriti
- TOTAL MB - kui suur oli varundatavate andmete maht
- MB TRANS - kui suur maht varundatavaid andmeid kopeeriti
- LIST GEN TIME - kui kaua kulus varundatavas arvutis varundatavate failide nimekirja koostamiseks
- LIST XFER TIME - kui kaua kulus varundatavate failide nimekirja kopeerimiseks
rsnapreport.pl teate saatmiseks meilile sobib kasutada sellist cron töö väljakutset
30 3 * * 1-6 root /usr/bin/rsnapshot sync 2>&1 | /usr/share/doc/rsnapshot/examples/utils/rsnapreport.pl | \ mail -s "LOOMAAED varundamine `date`" priit@loomaaed.tartu.ee && /usr/bin/rsnapshot daily
- Kui on soov, et cron töö esitaks subjectis märkuse varundamise ebaõnnestumise kohta, siis selleks sobib muuta faili /usr/share/doc/rsnapshot/examples/utils/rsnapreport.pl lisades lõpupoole ühe rea system väljakutsega
if(scalar @errors > 0){ print "\nERRORS\n"; print join("\n",@errors); print "\n"; system ("/bin/date > /tmp/rsnapshot.error"); }
ning cron töö käivitada reaga
30 3 * * 1-6 root /root/bin/rsnapshot.sh && /usr/bin/rsnapshot daily
kus /root/bin/rsnapshot.sh on sellise sisuga skript
# cat /root/bin/rsnapshot.sh #!/bin/bash rm /tmp/rsnapshot.message rm /tmp/rsnapshot.error /usr/bin/rsnapshot sync 2>&1 | /usr/share/doc/rsnapshot/examples/utils/rsnapreport.pl > /tmp/rsnapshot.message; aeg=`date +%Y%m%d%H%M` echo $aeg > /srv/backup/rsnapshot/.sync/MAEG.txt if test -e /tmp/rsnapshot.error; then mail -s "VIGA: LOOMAAED varundamine `date`" priit@loomaaed.tartu.ee < /tmp/rsnapshot.message; echo "CRITICAL rsnapshot" > /tmp/backup_rsnapshot else mail -s "KORRAS: LOOMAAED varundamine `date`" priit@loomaaed.tartu.ee < /tmp/rsnapshot.message; echo "OK rsnapshot" > /tmp/backup_rsnapshot fi
Tulemusena tekitatakse vea korral ajutised failid /tmp/rsnapshot.*, mis cron töö lõppemisel eemaldatakse.
- Kui raportis on tulpade laiused ebasobivad, siis seda saab kontrollida rsnapreport.pl faili ridadega
format BREPORTHEAD = .. format BREPORTBODY =
- Mõnel juhul võib olla vajalik kommenteerida välja .pl skriptis rida
# push(@errors,"$source NO STATS DATA");
- echo käsud kummagi tingimuse poole juures moodustavad sobiva sisuga status faili, mida saab nt Zabbix agendi kaudu varundamise kontrollimiseks kasutada
- olulisema backupi osa seisu väljatoomiseks sobib kasutada nt sellist skripti lisaks
# cat /root/bin/ovmr.sh #!/bin/bash echo; echo "olemasoleva varunduse mahu raport" echo "fw.ims" echo for i in /srv/backup/rsnapshot/*/fw.ims/data/postgresql/*/main; do j=`cat $i/backup_label | grep "START TIME" | awk {'print $3 " " $4 " " $5'}` k=`date +%Y%m%d -d "$j"` varundid["$k"]="$i" done for key in `echo ${!varundid[@]} | tr " " "\n" | sort -r | tr "\n" " "`; do echo -n "$key " du -sh ${varundid[$key]} done
mille väljakutsumiseks lisada /usr/share/doc/rsnapshot/examples/utils/rsnapreport.pl lõppu rida
system ("/root/bin/ovmr.sh");
Tulemusena lisatakse rnspreport.pl lõppu
... olemasoleva varunduse mahu raport fw.ims 20130317 120G /srv/backup/rsnapshot/daily.0/fw.ims/data/postgresql/9.2/main 20130310 120G /srv/backup/rsnapshot/daily.7/fw.ims/data/postgresql/9.2/main 20130228 120G /srv/backup/rsnapshot/daily.14/fw.ims/data/postgresql/9.2/main 20130224 128G /srv/backup/rsnapshot/daily.18/fw.ims/data/postgresql/9.1/main
- Zabbix trapperiga ühendamiseks sobib kutsuda nö viimases if tingimuses välja
if(scalar @errors > 0){ print "\nERRORS\n"; print join("\n",@errors); print "\n"; system ("/bin/date > /tmp/rsnapshot.error"); system ("/usr/bin/zabbix_sender -c /etc/zabbix/zabbix_agentd.conf -s \"Zabbix server\" -k varundus_rsnapshot -o 0 1>/dev/null"); } else { system ("/usr/bin/zabbix_sender -c /etc/zabbix/zabbix_agentd.conf -s \"Zabbix server\" -k varundus_rsnapshot -o 1 1>/dev/null"); }
Taaste
Taasteks saab kasutada varunduse kataloogides asuvaid faile. Sõltuvalt sellest millise andmekao ja varundusega on tegu, kas taastada üksikud faile või käivitada kogu operatsioonisüsteemist taastatud eksemplar.
Lokaalselt varundatud andmete kättesaadavaks tegemine kasutajatele
Lokaalselt varundatud andmete kasutajatele kättesaadavaks tegemiseks sobib ühendada /var/cache/rsnaphost kataloog mount --bind abil read-only režiimis külge sobivasse ühenduspunkti
# mount --bind /var/cache/rsnapshot /home/.snapshot # mount -o remount,ro,bind /var/cache/rsnapshot /home/.snapshot
Seejuures peab arvestama, et
- /home/.snapshot alt muutuvat kättesaadavaks kõik selle rsnaphost kasutamisega varundatud andmed.
- /home/.snapshot kataloog tuleb /etc/rsnapshot.conf failis eemaldada varundatavate kataloogide seast, nt kasutades rida
backup /home/ localhost/ +rsync_long_args=--exclude=/home/.snapshot
Analoogilist lahendus NFS serveri abil kirjeldatakse aadressil http://www.rsnapshot.org/howto/1.2/rsnapshot-HOWTO.en.html#restoring_backups.
Teisse arvutisse varundatud andmete kättesaadavaks tegemine kasutajatele
Teisse arvutisse varundatud andmete kasutajatele kättesaadavaks tegemiseks sobib ühendada /var/cache/rsnaphost kataloog NFS abil read-only režiimis külge sobivasse ühenduspunkti.
Roteerimise testimine
Olgu kasutuses selline roteerimise seadistus
retain daily 30 retain weekly 12 retain monthly 9
Roteerimise testimiseks sobib kasutada nt sellist skripti, kuna rsnapshot ei salvesta mingeid metaandmeid oma töö kohta, siis ei ole oluline emuleerida date --set abil kellaaja edasi liigutamist
# cat /root/rsnapshot-test.sh #!/bin/bash for j in `seq 1 12`; do rsnapshot monthly for i in `seq 1 30`; do let modulus=i%7 if [ $modulus -eq 0 ]; then rsnapshot weekly fi ssh root@192.168.10.10 "rm /etc/kuupaev*"; echo "2011-$j-$i-23-50-00" | ssh root@192.168.10.10 \ "cat > /etc/kuupaev-$j-$i"; rsnapshot daily done done
mille tulemusena tekib
# find /var/cache/rsnapshot/*/moraal.auul/etc/kuupaev-* /var/cache/rsnapshot/daily.0/moraal.auul/etc/kuupaev-12-30 /var/cache/rsnapshot/daily.1/moraal.auul/etc/kuupaev-12-29 ... /var/cache/rsnapshot/daily.29/moraal.auul/etc/kuupaev-12-1 /var/cache/rsnapshot/monthly.0/moraal.auul/etc/kuupaev-8-7 /var/cache/rsnapshot/monthly.1/moraal.auul/etc/kuupaev-7-7 /var/cache/rsnapshot/monthly.2/moraal.auul/etc/kuupaev-6-7 /var/cache/rsnapshot/monthly.3/moraal.auul/etc/kuupaev-5-7 /var/cache/rsnapshot/monthly.4/moraal.auul/etc/kuupaev-4-7 /var/cache/rsnapshot/monthly.5/moraal.auul/etc/kuupaev-3-7 /var/cache/rsnapshot/monthly.6/moraal.auul/etc/kuupaev-2-7 /var/cache/rsnapshot/monthly.7/moraal.auul/etc/kuupaev-1-7 /var/cache/rsnapshot/weekly.0/moraal.auul/etc/kuupaev-11-28 /var/cache/rsnapshot/weekly.1/moraal.auul/etc/kuupaev-11-21 /var/cache/rsnapshot/weekly.10/moraal.auul/etc/kuupaev-9-14 /var/cache/rsnapshot/weekly.11/moraal.auul/etc/kuupaev-9-7 /var/cache/rsnapshot/weekly.2/moraal.auul/etc/kuupaev-11-14 /var/cache/rsnapshot/weekly.3/moraal.auul/etc/kuupaev-11-7 /var/cache/rsnapshot/weekly.4/moraal.auul/etc/kuupaev-10-28 /var/cache/rsnapshot/weekly.5/moraal.auul/etc/kuupaev-10-21 /var/cache/rsnapshot/weekly.6/moraal.auul/etc/kuupaev-10-14 /var/cache/rsnapshot/weekly.7/moraal.auul/etc/kuupaev-10-7 /var/cache/rsnapshot/weekly.8/moraal.auul/etc/kuupaev-9-28 /var/cache/rsnapshot/weekly.9/moraal.auul/etc/kuupaev-9-21
Rsnapshot andmete kopeerimine
Rsnapshot andmete kopeerimiseks sama arvuti sees või üle võrgu arvutite vahel tuleb arvestada, et rsnapshot kasutab hardlinkimist. Nt sobib kopeerida sellise skriptiga
#!/bin/bash for i in `seq 11 -1 1`; do j=$(($i-1)) echo "rsync -avH --numeric-ids --link-dest=/mnt/data/synology-rsnapshot/montly.$i \ root@192.168.2.10:/volume1/rsnapshot/rsnapshot/monthly.$j/ \ /mnt/data/synology-rsnapshot/monthly.$j/" done
kus
- eelnevalt on kopeeritud kataloog, mille suhtes tehakse hard link'e
rsync -avH --numeric-ids root@192.168.2.10:/volume1/rsnapshot/rsnapshot/monthly.11/ \ /mnt/data/synology-rsnapshot/monthly.11/
Märkused
- Selleks, et varundatud andmetes oleks kergem orienteeeruda võiks varundatavates arvutites kirjutada sobiva sagedusega crontabist faili
date > /etc/kellaaeg
- Selleks, et varundatud andmetes oleks kergem orienteeruda saab proovida tabada midagi, mis igal varunduskorral uueneb, nt
# ls -ld /srv/backup/rsnapshot/*/fs.moraal/var/cache/man drwxr-sr-x 23 man root 4096 Dec 9 04:25 /srv/backup/rsnapshot/daily.0/fs.moraal/var/cache/man drwxr-sr-x 23 man root 4096 Dec 8 04:25 /srv/backup/rsnapshot/daily.1/fs.moraal/var/cache/man drwxr-sr-x 23 man root 4096 Nov 29 04:25 /srv/backup/rsnapshot/daily.10/fs.moraal/var/cache/man drwxr-sr-x 23 man root 4096 Nov 28 04:25 /srv/backup/rsnapshot/daily.11/fs.moraal/var/cache/man drwxr-sr-x 23 man root 4096 Nov 27 04:25 /srv/backup/rsnapshot/daily.12/fs.moraal/var/cache/man drwxr-sr-x 23 man root 4096 Nov 26 04:47 /srv/backup/rsnapshot/daily.13/fs.moraal/var/cache/man ...
- Varudamise õnnestumise kohta ei saa otseselt saata teadet zabbix_sender vms programmiga, aga ilmselt saab seda teha kombineerides crontab MAILTO ja MTA alias võimalusi või töödelda rsnapshot logifaili.
- rsnapshot kasutamisel tuleb arvestada, et varunduse arvutisse tekib suurel hulgal nn inode'isid tänu hard linkide kasutamisele, mis tõenäoliselt mõjutavad nt fsck tööd edaspidi
- Debian Lenny v. 5 puhul sync_first ja link_dest koos kasutamine ei tööta, hardlinke ei moodustata roteeritud kataloogides olevate failide vahel
- Debian Lenny v. 5 puhul tuleks lisaks paigaldada Perli moodul http://search.cpan.org/~ncleaton/Lchown-1.01/lib/Lchown.pm
- rsnapshot sync arvutinimelise argumendiga ei oska kasutada seadistusfailist backup_script ridu
# rsnapshot -t -c /etc/rsnapshot-pgbaasiga.conf sync fw.ims
Selleks, et locate ei töötaks üleliia on mõistlik kasutada /etc/updatedb.conf failis nt rida
PRUNEPATHS="/tmp /var/spool /media /srv"
- Varunduses oleva arvuti nime muutmiseks sobib kõik vastavad kataloogid ümber nimetada, nt
root@varundus:/srv/backup/rsnapshot# for i in *; do mv $i/postkast.tlnkr $i/postkast.toodang.tlnkr; done
Standby veebikoha pidamine
Üks võimalik Rsnapshot tarkvara kasutusjuhtum võiks olla standby veebikoha pidamine, mis põhineb järgmistel asjaoludel
- standby veebikohata ei jõua kasutajate päringud enne kui mingi eraldi nö liigutusega kasutajad sinna suunatakse (nt nimesüsteemi muudatus)
- standby veebikoht koosneb tavaliselt failisüsteemist ja andmebaasist
- TODO
rsync v. 3.1.1 kasutamine
Tundub, et alates rsync v. 3.1.1, mida kasutab Debian v. 8 Jessie (ja nt erinevalt rsync v. 3.0.9, mida kasutab Debian v. 7 Wheezy) on rsync -v väljundi nö kokkuvõttev osa muutunud, nt kirjutatakse sektsioon vastavalt
2015/08/20 12:30:44 [11206] Number of files: 1322138
ja
2015/08/20 12:30:44 [11206] Number of files: 1,322,138 (reg: 1,267,362, dir: 51,209, link: 3,560, special: 7)
Paistab, et Debian v. 8 Jessie paketihalduses olev /usr/share/doc/rsnapshot/examples/utils/rsnapreport.pl fail uut rsync statistika formaati kasutada ei oska. Sobib kopeerida Debian Stretch (testing) juures rsnapshot pakett ja kasutada sealt vastavat faili, kusjuures teha muudatus
# Number of regular files transferred: 1,202 # elsif($line =~ /Number of (regular )?files transferred:\s+(\d+)/){ elsif($line =~ /Number of (regular )?files transferred:\s+(.+)/){ $bkdata{$source}{'files_tran'}=$2; $bkdata{$source}{'files_tran'}=~ s/,//g; }
Kahetasemeline varundamine
Kahetasemeline varundus tähendab praktiliselt seda, et varundatud andmed asuvad kahes erinevas kohas, nt
- samas füüsilises asukohas, aga erineval meedial (nt kõvaketas ja lint)
- kahes esinevas füüsilises asukohas kasutades sama tüüpi meediat (nt kõvaketas)
- kogu varundus on dubleeritud; või lühema säilitusajaga koopiad asuvad ühes kohas ja pikema säilitusajaga koopiad teises asukohas
Tööpõhimõte
Väited
- andmed kopeeritakse kasutades rsync abil hard linkimist
- kui daily.x, weekly.x või monthly.x kataloog on stage 2 arvutis olemas, siis eeldatakse, et selle sisu on korrektne (st vastab stage üks sama kuupäeva kataloogile); kui sisu on mittekorrektne, siis seda sisu ei parandata
Järgnevalt kirjeldatakse kuidas moodustada selliste omadustega kahetasemeline varunduslahendus
- esimene tase moodustatakse tavalisel viisil rsnapshot abil
- teine tase moodustatakse esimesest rsync programmi baasil tehtud skriptiga
- teine tase on esimese koopia
- esimese taseme varunduse riknemisel ei kustutata (või rikuta muul viisil) automaatselt kogu kogu teise taseme varundust
- varundatavatest arvutitest kopeeritakse andmed välja üks kord; teise taseme varukoopia moodustatakse ilma arvuteid koormamata esimese taseme varundusest
- 1st ja 2nd varunduse koostöö tagatakse lukustusega - 1st varundamise parasjagu töötamisel tagab lukustustus, et otsa ei käivitu 2nd varundus; 2nd varundamise parasjagu töötamisel tagab lukustustus, et otsa ei käivitu 1st varundus
Pildil kirjeldatakse varundatavaid arvuteid, esimese ja teise taseme varundust
Kopeerimise ajal toimub 2nd arvutis kaks muudatust, sellise lähtepunktiga
varundus-1st.moraal varundus-2nd.moraal # cat /srv/backup/rsnapshot/daily.0/MAEG # cat /srv/backup/rsnapshot/daily.0/MAEG 20180115 20180114 # cat /srv/backup/rsnapshot/daily.1/MAEG # cat /srv/backup/rsnapshot/daily.1/MAEG 20180114 20180113 ... ... # cat /srv/backup/rsnapshot/daily.4/MAEG # cat /srv/backup/rsnapshot/daily.4/MAEG 20180111 20180110
- esimene muudatus - 2nd arvutis nimetatakse MAEG failide alusel kataloogid ringi
/srv/backup/rsnapshot/daily.0 ---> /srv/backup/rsnapshot/daily.1 20180114 /srv/backup/rsnapshot/daily.1 ---> /srv/backup/rsnapshot/daily.2 20180113 ...
- teine muudatus - kopeeritakse hard-linkimise abil puuduvad daily.x, weekly.x jt kataloogid varundus-1st -> varundus-2nt
/srv/backup/rsnapshot/daily.0 ---> /srv/backup/rsnapshot/daily.0 20180115
Tarkvara
Tekitada mõlemasse arvutisse kataloogid
# mkdir -p /opt/rsnapshot-2nd/bin # mkdir -p /opt/rsnapshot-2nd/tmp
Teise taseme varunduse arvutis sobib käivitada (ja kindlasti kasutades /bin/bash interpretaatorit) selline skript
# cat /opt/rsnapshot-2nd/bin/rsnapshot-2nd.sh #!/bin/bash if test -f /tmp/varundus.lock; then echo -n `date` >> /srv/backup/varundus.log echo " varundamise protsess kaib, ei asu varundama" >> /srv/backup/varundus.log else touch /tmp/varundus.lock echo -n "ALGUS " >> /srv/backup/varundus.log echo `date` >> /srv/backup/varundus.log ssh root@192.168.123.18 "cd /opt/rsnapshot-2nd && bin/r-nimekiri.sh > tmp/r-nimekiri-s1.txt" scp -q root@192.168.123.18:/opt/rsnapshot-2nd/tmp/r-nimekiri-s1.txt /opt/rsnapshot-2nd/tmp cd /opt/rsnapshot-2nd bin/r-nimekiri.sh > tmp/r-nimekiri-s2.txt mkdir /srv/backup/rsnapshot-tmp mv /srv/backup/rsnapshot/* /srv/backup/rsnapshot-tmp declare -A s1 declare -A s2 nr=0 while read line do kp=`echo "$line" | cut -d " " -f 1` kn=`echo "$line" | cut -d " " -f 2` s1[$kp]="$kn" done < tmp/r-nimekiri-s1.txt while read line do kp=`echo "$line" | cut -d " " -f 1` kn=`echo "$line" | cut -d " " -f 2` s2[$kp]="$kn" done < tmp/r-nimekiri-s2.txt for key in `echo ${!s2[@]} | tr " " "\n" | sort | tr "\n" " "` ; do if [[ ! -z ${s1[$key]} ]]; then echo "mv /srv/backup/rsnapshot-tmp/${s2[$key]} /srv/backup/rsnapshot/${s1[$key]}" >> /srv/backup/varundus.log mv /srv/backup/rsnapshot-tmp/${s2[$key]} /srv/backup/rsnapshot/${s1[$key]} tehtud[$key]=${s1[$key]} s1[$key]="tehtud" fi done for key in `echo ${!s1[@]} | tr " " "\n" | sort | tr "\n" " "` ; do if [[ "${s1[$key]}" != "tehtud" ]]; then tegemata[$key]=${s1[$key]} echo "tegemata $key : ${tegemata[$key]}" >> /srv/backup/varundus.log else echo "tehtud $key : ${tehtud[$key]}" >> /srv/backup/varundus.log fi done for keytegemata in `echo ${!tegemata[@]} | tr " " "\n" | sort | tr "\n" " "` ; do for keytehtud in `echo ${!tehtud[@]} | tr " " "\n" | sort -r | tr "\n" " "` ; do if [[ $keytehtud -lt $keytegemata ]]; then linkdest=$keytehtud break fi done echo "rsync -avHAX --numeric-ids --link-dest=/srv/backup/rsnapshot/${tehtud[$keytehtud]} root@192.168.123.18:/srv/backup/rsnapshot/${tegemata[$keytegemata]}/ /srv/backup/rsnapshot/${tegemata[$keytegemata]}/" >> /srv/backup/varundus.log rsync -avHAX --numeric-ids --link-dest=/srv/backup/rsnapshot/${tehtud[$keytehtud]} root@192.168.123.18:/srv/backup/rsnapshot/${tegemata[$keytegemata]}/ /srv/backup/rsnapshot/${tegemata[$keytegemata]}/ >> /srv/backup/varundus.log 2>&1 tehtud[$keytegemata]=${tegemata[$keytegemata]} done AEG=`date +%Y%m%d` mv /srv/backup/rsnapshot-tmp /srv/backup/rsnapshot-kopeeritud-$AEG echo -n "LOPP " >> /srv/backup/varundus.log echo `date` >> /srv/backup/varundus.log rm /tmp/varundus.lock fi
kus
- skript töötab if-else-fi luku sees
- moodustatakse esimese ja teise stage arvutis varunduses olevate kataloogide daily.x, weekly.x ja monthly.x nimekirjade failid r-nimekiri-s1 ja r-nimekiri-s2; ja vastavad sõnastikud s1 ja s2
- liigutamiseks paigutatakse need teise stage varunduses olevad kataloogid, mida paigutada saab, samade nimede alla nagu esimeses stages; mida esimeses stages pole, need jäävad tmp kataloogi ja lähevad kustutamisele (eraldi protseduur)
- moodustatakse juba olemasolevate (ja kopeerimist mitte vajavate) ning kopeermist vajavate kataloogide nimedest sõnastikud tehtud ja tegemata
- tehtud ja tegemata sõnastikud käiakse selliselt läbi, et puuduvad kataloogid kopeeritakse ajaliselt eelmise olemasoleva suhtes rsync ja link-dest abil (sh vajadusel kopeeritakse daily weekly suhtes jne)
- logi salvestatakse faili /srv/backup/varundus.log
nimekirjade failid moodustab skript
# cat /opt/rsnapshot-2nd/bin/r-nimekiri.sh #!/bin/bash cd /srv/backup/rsnapshot for i in *; do aeg=`cat $i/MAEG.txt` echo $aeg $i; done
Kasutamine
- teise taseme moodustamise skripti ja esimese taseme moodustamise rsnapshot ei tohi töötada samaaegselt (seda võiks nt lukkudega kontrollida)
- teise taseme arvutist saab pöörduda esimese taseme arvuti poole root kasutajana ssh võtmega autentides
- teise taseme varundus tuleb lähtestada käsitsi ühe daily või mõne muu kataloogi kopeerimisega (ajaliselt kõige vanemaga)
# rsync -avHAX --numeric-ids ...
- esimese taseme varunduse kataloogides peab esinema sarnane fail, varunduse tegemise ajaga (kui rsnapshot esimeses etapis käivitatakse tihedamini kui kord ööpäevas, võib olla kellaaeg täpsem; MAEG ehk moodustamise aeg)
# cat /srv/backup/rsnapshot/weekly.4/MAEG.txt 20171127
- skripti töö tulemusena paigutatakse nö üle jäänud andmed kataloogidesse nimega /srv/backup/rsnapshot-kopeeritud-$AEG; taustal tuleb neid tõenäoliselt kustutada
- skripte tuleb käivitada root kasutaja privileegidega (vastasel korral kaob uid:gid info jms) ning ./skript.sh vms, et toimiks /bin/bash interpretaator (mitte /bin/sh)
Lukustamine
1st ja 2nd taseme varundamise protsessid peavad töötama vaheldumisi. Seda saab tagada lukk-failidega nt nii
- 2nd varundus kontrollib enne käivitumist, kas 1st varundus parasjagu varundab kasutades 1st varunduse rsnapshot enda lukku /var/run/rsnapshot.pid
- 1st varundus ei kontrollib enne käivitamist, kas 2nd taseme varundus parasjagu varundab kasutades 2nd varunduse rsnapshot-2nd.sh poolt moodustatud lukku /tmp/varundus.lock
2nd taseme varunduse episoodiline käivitamine
rsnapshot-2nd.sh skript toetab varunduse arvuti episoodilist käivitamist. Nt juhtumil kui 2nd taseme varunduse arvuti asub eluruumis ja enamuse ajast peaks ta olema väljalülitatud olekus. Kui kord nädalas arvuti sisse lülitatakse
- käivitub võrguühendus (nt ipsec vpn)
- käivitub rsnapshot-2nd.sh skript ja kopeerib ära vahepeal 1st varundusse lisandunud koopiad
- jätab arvuti käima lisaks 30 minutiks (vastasel korral on keeruline arvutisse üldse sisse saada
- lülitab arvuti välja
2023 aasta alguse tähelepanekud
Debian v. 11 süsteemi rnsapshot paigaldamiseks sobib kasutada backports repot, saab rsnapshot versioon 1.4.5
root@pbs:~# tail -n 2 /etc/apt/sources.list deb http://deb.debian.org/debian bullseye-backports main contrib non-free deb-src http://deb.debian.org/debian bullseye-backports main contrib non-free