Rsnapshot

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti

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
  • 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

Rsnapshot-1.gif

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

Kasulikud lisamaterjalid