Rsync

Allikas: Kuutõrvaja
Redaktsioon seisuga 1. märts 2011, kell 16:31 kasutajalt Drakan (arutelu | kaastöö) (Sissejuhatus)

Sissejuhatus

Rsync on vaba tarkvara unixi laadsetele süsteemidele, mis sünkroniseerib faile ja kaustu ühest arvutite vahel. Rsync kasutab kodeerimist ja ei tekita varundamisel duplikaate, vaid tekitab viiteid failide vahel, vähendades sedaviisi infomahte ja kettakasutust.

Veebisait http://rsync.samba.org/ ja dokumentatsioon http://www.samba.org/rsync/documentation.html

Lihtne näide rsync kasutamisest:

1. sünkroniseerime faili lokaalsest masinast teise nimega host.ee

rsync fail kasutaja@host.ee:

2. sünkroniseerime kausta lokaalsest masinast ümber

rsync -a kaust kasutaja@host.ee:

Sellise näite järgi on kõige lihtsam failide sünkroniseerimine. Toimib see samuti üle ssh ning on koormust tekitav viis.

Olulisemad võtmed

  • --archive -a arhiivi võti mida kasutades kindlustatakse kuupäevade õiguste omanike ja linkide säilumine, soovituslik lisada igasuguste sünkroniseerimiste puhul.
  • --verbose -v protsessi kohta põhjalikuma info näitamine nt failinimekiri
  • --progress ülekande progressi kohta info
  • --stats ülevaatlikum statistika kulunud ajast ja failide hulgast
  • --compress -z toimub pakkimine enne ülekandmist
  • --delete -d sihtkohast kustutatakse algallikas enam mitte eksisteerivad failid
  • --exclude "*bak" mingite faililaiendite, failinimede ignoreerimine näiteks avi, mp3 võib määrata ka võtmega --exclude-from faili milles failides või kaustades asjadest mida ei varundata
  • --numeric-ids ei üritata failide UID/GID muuta sünkroniseeritava süsteemi kasutajate järgi ja jäetakse need puutumatuna

Veel mõned erandjuhtudel vajaminevad parameetrid

  • -n Mille korral rsync lihtsalt ütleb mida ta teeks ilma reaalselt faile üle kandmata
  • -W Teatab rsyncile kanda üle terve fail selle asemel, et kasutada oma block leveli võrdlemise vahendeid. Kui kasutada on väga kiire võrguühendus võib see võti muuta tööd kiiremaks kuna rsync ei pea faile kontrollima, kasutades rsynci üle interneti on tõenäoliselt seda võtit kasutada ebapraktiline
  • -c Käseb genereerida kõigi failide kontrollsummad. Kasutades seda võtit võib rsync muutuda üsnagi aeglaselt seega kasutada vaid tõsise vajaduse korral, näiteks kui kahtlus, et failide info on kuidagi rikutud.
  • -z suunab rsynci kasutama zlib pakkimist
  • -H, --hard-links Säilita hard lingid, vajalik nt kui ülekantavad andmed varundatud link-dest võtmega


Lisaks kui rsync teatab file has vanished tähendab seda, et failisüsteemis on sünkroniseerimise ajal tekkinud muudatusi

Exclude kohta veel,

--exclude "/foo" eraldab faili nimega foo kaustas kus hetkel asutakse mida näeb pwd käsuga
--exclude "foo/" eraldab kõik kaustad nimega foo

rsync server

Varundusserverit luues on mõistlik startida seal rsynci deemon mis võimaldab parooliga ligipääsu lugemiseks/kirjutamiseks teatud kaustadele

Seadistusfailiks rsyncd.conf mis Linuxis /etc/rsyncd.conf ja FreeBSDs /usr/local/etc/rsyncd.conf

Näidis rsyncd.conf

uid = root
gid = root
use chroot = no
max connections = 25
log file=/var/log/rsyncd.log

[failid]
       path = /kus/failid/on
       comment = failid

[pildid]
       path = /kus/pildid/on
       comment = failid
       dont  compress = *

FreeBSD's tuleb rida gid = root asendada reaga gid = wheel

selle seadistusfailiga tekitame olukorra kus on kaks jaotist: failid ja pildid. Piltidele keelame direktiiviga "dont compress = *" andmevoo pakkimise kuna piltide pakkimine annab vähe eelist sama võib teha ka videosid sisaldavate kaustadega.

vaikimisi juba ei teha seda failidele laiendiga *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

Logimist võib korraldada ka läbi syslogi'i kasutades rida

syslog facility = local5

Või siis lihtsalt lisade syslog.confi rea

daemon.info                                     /var/log/daemon.log

täpsemalt on seletatud asja logimise palas lahti http://kuutorvaja.eenet.ee/wiki/Logi. Võimalik seada local0 kuni locan7ni

Soovides lubada varundamisele kliente ligi vaid kindla parooliga tuleks share teha selliselt

[failid]
  path = /kus/failid/on
  comment = failid
  auth users = kasutaja
  secrets file = /etc/rsyncd.pass

tekitame faili /etc/rsyncd.pass paroolid hoitakse selles plaintextina. Tuleks jälgida ,et fail poleks world readable milleüle hakkaks rsync kurtma faili võime kirjutada näiteks

kasutaja:kasutaja

käsk paroolifailiga sünkroniseerimiseks ,et saada kaust /etc varundatud võiks olla siis näiteks

rsync --password-file /etc/rsyncd.pass -a /etc kasutaja@192.168.1.10::backup

Tulemüüri seadistamine

rsync töötades deemonina kasutab porti tcp 873

linux iptablesis saame müüri teha pordi lahti käsuga

iptables -I INPUT -p tcp -s 192.168.1.10 --dport 873 -j ACCEPT 

FreeBSD packet filteris

pass in on $ext_if proto tcp from { 192.168.1.10 } to port 873 

Muidugi võib seadistusfaili kirjutada kohe

hosts allow = *.host.ee
hosts deny = * 

nüüd võime anda käsu

rsync -a kaust root@host::failid

üleslaetud failide nimistut saab

rsync -v --list-only -a root@host.ee::pildid

kui pole öeldud muidugi list = false

Soovides limiteerida aeglasema kiirusega kohtades rsync kiirust tuleks kasutada rsync omadust --bwlimit=KBPS

Paroolita rsync kasutades ssh kopeerimist

Paroolifaili etteandmine ilma rsync serverit kasutamata ei toimi, sellisel juhul tuleks toimida järgnevalt

Genereerime privaatse ja avaliku võtme, kui parooli ei soovi vajutame lihtsalt enteri

# ssh-keygen -t rsa -b 4096 -f rsync-key
Generating public/private rsa key pair.
rsync-key already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in rsync-key.
Your public key has been saved in rsync-key.pub.
The key fingerprint is:
e8:c7:f2:f1:da:2a:0f:a4:4f:63:89:9f:3e:9d:b9:87 root@loomaaed.zoo.ee

Kopeerime rsync.key.pub sisu sihtkoht masina faili authorized_keys

/root/.ssh/authorized_keys

Testime

ssh -i rsync-key root@192.168.1.10

ja rsync käsk näeb välja järgnev, ette tuleb anda rsync privaatne võti

rsync -av --delete  -e "ssh -i /home/kasutaja/rsync-key"  /srv/kauyst root@192.168.1.10:/srv/

Soovituslik oleks üldiselt kasutada sellistel juhtudel juba rsync serverit.

Snapshot stiilis backup

Rsync omab võtit --link-dest mis võimaldab full backupide tegemisel hoida kokku ruumi. Nimelt võtab rsync siis näiteks eelmise päeva backupi aluseks ja loob jooksva päeva backup kausta hardlingid failidest mis on juba olemas ning syncib ainult muutunud failid. Nii on kaustas full backup kuid selle suuruseks on vaid muutunud failide summa. Nii on võimalik teha paarkümmend full backupi kuid nende mahuks jääb kokkuvõtteks 1-2 maht.

Summary educ4 html 61d7cbef.png

Illustreeriv skeem, võetud lehelt http://web.cs.mun.ca/infrastructure/labnet/summary_educ4.html

Hardlink on symlingi sarnane. Nad on tavaliselt loodud ln käsuga kuid ilma -s võtmeta. Hard link kujutab endast seda kui 2 faili viitavad samale inodele ja kettablokile. Erinevalt symlingist pole tegemist eraldi failiga vaid lihtsalt kahe lingiga samale faili.e Kui kustutada ükskõik kumb viide jääb teine alles ning sisaldab infot.

Käsu süntaksiks on:

rsync -avH --link-dest=/backup/eile /root/kaust_mida_varundame /backup/tänane_backup

Anname rsyncile ette eilse backupi kausta, siis kausta mida soovime varundada ja kausta kuhu varundada.

Töö lihtsustamiseks võib luua skripti

#!/bin/sh
t2na=`date "+%Y%m%d"`
eile=`date -v-1d "+%Y%m%d"`
mkdir /backup/$t2na
rsync -avH --link-dest=/backup/$eile /root/kaust_mida_varundame /backup/$t2na

Loomulikult ei või aga kustutada ühtegi backup kausta kuna sellisel juhul lähevad hardlingid failide vahel katki.

Siin on näide skriptist mis salvestab 7 incremental varukoopiat http://www.syrlug.org/contrib/rsync.html

Veel juttu rsynciga snapshotide tegemisest aadressidel

Kiiruse limiteerimine

Kasutuse all olevates süsteemides võib sünkroniseerides juhtuda ,et rsync hakkab liiga ohtralt io/protsessoriaega kulutama ja server muutub selle käigus aeglaseks, selpuhul on kasulik limiteerida kiirust näiteks järgnevalt

rsync --bwlimit=1000 fail1 fail2

kiirus tuleb märkida kilobaitides, number näitab täpsemalt mitu kilobaiti sekundus lubatakse saata. Teine hea võimalus on kasutada nice käsku

Lingid