Rsync használata (Windows rendszereken - cwRsync ) backup célokra

Az Rsync alkalmazás a Linux rendszereken bevált módszer arra, hogy Távoli gépekre backupoljunk könyvtárstruktúrákat. az eljárás alapja az, hogy a két gép között mindig csak a fájlok közötti különbségek mennek át. Sajnos értelmes leírás magyarul, csak a Linuxos Rsync-re létezik, de elkészítették az RSync windowsos verzióját cwRsync, aminek itt van a honlapja: http://www.itefix.no

Néhány tudnivaló a cwRsync-ről:

  • A Linuxos Cygwin könyvtáron alapul
  • Kliens-szerver üzemmódban működik (kliens modul és szerver modul)
  • OPEN SSH segítségével biztonságos kapcsolaton keresztül is működik
  • célszerű a CopSSH modult használni hozzá.

Itt van egy angol nyelvű video tutorial. Ennek alapján itt írom le a telepítés menetét

Én a 4.0.4-es verziót teszteltem le, de később természetesen az újabb modulokat célszerű használni:

le kell tölteni a három modult:

CopSSH (3,3 MB) - letöltés innen - igazi letöltési hely a SourceForge-ról: Copssh_3.1.1_Installer.zip

cwRsyncServer - letöltés innen - igazi letöltési hely a Sourceforge-ról: cwRsyncServer_4.0.4_Installer.zip

cwRsync (Kliens) - letöltés innen - igazi letöltési hely a Sourceforge-ró: cwRsync_4.0.4_Installer.zip

Az alábbiakban a leírás szerint járj el. A vastagított részeket a saját környezetedre kell alkalmaznod! 64 bites rendszeren a C:\Program Files helyett a C:\Program Files (x86) könyvtár az alapértelmezett telepítési könyvtár.

A szerver telepítése (Host)

  • Hozz létre egy usert vagy használj egy meglévő usert, aki a szerveren a továbbiakban kezeli a szervízeket. A példában ez lesz a szerviz user (A default telepítési user az SVCWRSYNC, amit célszerű mind a szerveren, mind a kiensen használni)
  • Ha hálózati megosztást akarsz használni majd a backupolásra, akkor adj a megosztásra jogot a szerviz user részére. Általában adjál megfelelő írási és olvasási jogokat a backup tárolóhelyekre.
  • Telepítsd a CopSSH klienst default módon. Ez létrehoz majd egy szolgáltatást a Windowson OpenSSH SSHD néven. A telepítés közben feltett érdésre add meg a korábban felvett usert, mint futtató klienst. Ennek a usernek el kell tudnia indítania ezt a szolgáltatást. C:\Program Files\ICW
    • A szervíz usernek adj teljes jogot a telepítési könyvtárra. (C:\Program Files\ICW) Az alkönyvtárakra ne örökl?djön a jog.
    • A telepÍtés végén állítsd le az OpenSSH SSHD szolgáltatást.
  • Telepítsd a cwRsynServer-t default módon. Ugyanabba a könyvtárba fog települni, mint az előző alkalmazás, és felülírja az előzőleg telepített könyvtárak némelyikét.Default könyvtár: C:\Program Files\ICW, futtató user a fenti szerviz
  • A szerviz usernek adj teljes jogot a "C:\Program Files\ICW\Bin" könyvtárra. Ne örökl?djenek a jogok az alkönyvtárakra.
  • Indítsd el az OPENSSH SSHD szervízt és az RsyncServer szervízeket.
    • Megjegyzések:
      • A konfig fájlok módosítása után mind a két szolgáltatást újra kell indítani
      • Érdemes automatikusan indulóra állítani a szolgáltatásokat
  • Szerkesszük a konfigurációs fájlokat:
    • C:\Program Files\ICW\etc\sshd_config fájl tartalmában az alábbi paramétereket állítsd át:
      • Logleel INFO
      • StrictModes no6. Indítsd el az OpenSSH szervízt és állítsd automatikusan indulóra.
    • Módosítsd az alábbi fájlt: "C:\Program Files\ICWI\rsyncd.conf". Itt adhatod meg, hogy melyik fájlrendszerbeli meghajtóra backupoljon majd a kliens.Több backup célpontot is be lehet állítani. minden backup célpont egy [területnév] bejegyzéssel kezdődik, majd a terület leírásával folytatódik. A cygwin könyvtár sajátosságai miatt a C:\teszt könyvtárat így kell bejegyezni: /cygwin/c/teszt. Az alábbiakban lássunk egy példát egy konfig fájlra:
use chroot = false
strict modes = false
hosts allow = *
log file = rsyncd.log

# module definitions
# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
#
[test]
path = /cygdrive/h/Backup/teszt
read only = false
transfer logging = yes

Megjegyzések:

Ha szerver megosztást használsz a backup könyvtárnak akkor az rsyncd.conf-ban az alábbi módot használd: 

path = //FS/megosztásnév/könyvtárnév/projekt

Ha lokális gépre mented a backupokat, akkor a cygwin csomagnál szokásos módon add meg az elérési utat:

path = /cygwin/D/könyvtárnév/projekt/. 

ahol a D jelenti a D: meghajtót!!!!

A könyvtár végén lévő / jel számít, hogy ott van-e vagy nem! Ne legyen ott!

Példa: rsyncd.conf

use chroot = false
strict modes = false
hosts allow = *
log file = rsyncd.log
pid file = rsyncd.pid
 
# module definitions
# Remember cygwin naming conventions: c:\work becomes /cygwin/c/work
#
# this section matches to the "client" that will sync it's files

[teszt]
path = /cygwin/d/backup/teszt
read only = false
transfer logging = yes

[teszt2]
path = //FS/megosztás/teszt2
read only = false
transfer logging = yes

Az rsyncd.conf teljes paraméterlistája

  • Indítsuk el a Start Menü / Programok /COPSSH /Activate a user menüpontot
    • Válasszuk ki a szerviz usert, majd tovább
    • Írjuk be a passphrase-t kétszer. Ez egy hosszabb szöveg, ami lehetőleg ne legyen kitalálható, mint egy jól védett jelszó, ugyanakkor nincsenek rá megszorítások. Ennek segítségével létrejön majd a 2048 bit RSA nyilvános és a privát kulcs.

      A kulcsok a C:\Program files\ICW\home\szerviz könyvtárakban jönnek létre. szerviz.key.pub a publikus és szerviz.key a privát.

Megjegyzések

  • A szerverre később lehet hivatkozni IP címmel, lokális hálózaton NETBIOS névvel - ha működik a névfeloldás - , vagy domain névvel is. A domain név lehet akár dynamikus DNS-ből származó, mint például valami.homeip.net, vagy valós, mint például www.europr.hu
  • A szerverre távolról csatlakozó képeknek el kell tudnia érni a szervert véd? tűzfalon keresztül bizonyos portokat, mint például a TCP 22, 837 (default esetben)
  • Ha a szerver router mögött van, akko rbe kell állítani a megfelelő portforwardolást is a bElső hálón lévő gép IP címére is, tehát a routeren valószín?leg legalább két portot kell forwardolni.

A kliens telepítése (Client):

A kliens egy másik számítógépet jeletni, ahonnan indítjuk a feltöltést a szerverre. Itt is telepíteni kell először a kliens alkalmazást. cwRsync

  • A telepítésnél default módot (SSH-val együtt) használva a C:\Program Files\cwRsync nevű könyvtár jön létre.
  • Hozd létre a C:\Program Files\cwRsync\.ssh nevű könyvtárat.
  • Nyiss egy parancssort és a PATH környezeti változóba tedd be a C:\Program Files\cwRsync\bin könyvtárat ideiglenesen.
path=%PATH%;"C:\Program Files\cwRsync\bin
  • Lépj be az .ssh könyvtárba
cd .ssh
  • Írd be az alábbi parancsot a parancssorba:
ssh-keygen -t rsa -b 2048 -N ''
A feltett kérdésre add a választ: id_rsa
  • Létrejött egy publikus és egy privát kulcsokból álló kulcspár. Az id_rsa nevű fájl a privát és az id_rsa.pub a publikus kulcs.
  • A kliens id_rsa.pub fájljának tartalmát másold be a szerver C:\Program Files\ICW\home\fz\.ssh\authorized_keys nevű fájljába az ott lévő alá. (Ez a fájl akkor jött létre, amikor a szerveren aktiváltuk a usert!). Valami ilyesmit kell látnodezután a fájl tartalmában:
ssh-rsa AAAAB3NzaC1yc.... Administrator@Szervergep
ssh-rsa AAAAB3NzaC1yc.... Rendszergazda@kliensgep

Természetesen ezek a bejegyzések nem az igaziak és 2048 karakter egy-egy sora!

Ha több klienst akarsz használni backupra, akkor minden egyes kliensnek létre kell hozni a publikus rsa kulcsát és ide bemásolni!

  • Visszamegyünk a kliensre, és létrehozzuk a C:\Program Files\cwRsync\CheckSSH.cmd szövegfájlt. Ezzel teszteljük le a kapcsolatot és az Első kapcsolódáskor ekkor próbáljuk / küldjük át a jelszót a szervernek. Figyeljed meg, hogy az ssh paraméterénél a szerviz usert adtam meg, ami a szerveren futtatja a cwrsync szervert!
rem set homepath values
SET HOMEDRIVE=%CD:~0,2%
SET HOMEPATH=%CD:-3%
SET CWRSYNCHOME=%CD%
SET CWOLDPATH=%PATH%
SET PATH=%CWRSYNCHOME%\BIN;%PATH;
SET HOME=%CWRSYNCHOME%\%HOMEPATH%
ssh -vvv szerviz@valami.homeip.net
  • Ha tűzfalunk van, akkor a kapcsolódáskor felugorhat egy figyelmeztetés a kapcsolat létrejöttére és azt engedélyezni kell. Mivel ez SSH kapcsolat a szerveren a bejövő TCP 22-es porton kell engedélyezni a forgalmat!
SET PATH=%CWOLDPATH%

A futtatás közben felteszi a kérdést, hogy milyen passwordot adjunk meg. Azt a passwordot, amit a szerveren korábban beállítottunk, amikor létrehoztuk a szerviz usert! A  parancs lefutása után a cygwin parancskörnyezetben marad a program.

  • Kilépünk a logout paranccsal
  • Ugyanebben a könyvtárban létrehozzuk a copyrsync.cmd nevű fájlt, amivel teszteljük, az rsync működését:
rem set homepath values
SET HOMEDRIVE=%CD:~0,2%
SET HOMEPATH=%CD:-3%
SET CWRSYNCHOME=%CD%
SET CWOLDPATH=%PATH%
SET PATH=%CWRSYNCHOME%\BIN;%PATH;
SET HOME=%CWRSYNCHOME%\%HOMEPATH%
rsync -avrz --delete "/cygdrive/C/Program Files/cwRsync/doc" szerviz@valami.homeip.net::teszt
SET PATH=%CWOLDPATH%
  • Megjegyzés
    • Figyelni kell arra, hogy a ::teszt szó ugyanaz legyen, mint a szerveren az rsyncd.conf-ban lévő [teszt]!
    • A jelenlegi beállításoknál a doc könyvtár létrejön a szerver oldalon és a könyvtár tartalma átmegy!
    • Ha minden ok, akkor pár másodperc után átmegy a szerverre a néhány fájl!
    • Minden olyan backup könyvtárra, amit távolról hozunk létre a szerver ssh userének (aki futtatja az OPEN SSH-t és a rsync szervert) megfelelő create, írás és olvasási jogokat kell kiosztani.
    • Olyan könyvtárakra ne adjunk jogokat a usernek, amihez nincsen köze, ugyanis ha a fenti sort az alábbira cseréljük és a könyvtár létezik a szervern, akkor bizony írni tudunk bele!
    • célszerű a továbbiakban inkább pontos elérési utat megadni a futtatható programoknál, illetve a megadott könyvtárba léptetni a parancsfeldolgozót
rsync -avrz --delete "/cygdrive/C/Program Files/cwRsync/doc" szerviz@valami.homeip.net:/cygwin/c/teszt2
  • Harmadik lépésként bebújtatjuk a forgalmunkat SSH tunnelbe, ezáltal biztonságos lesz és a kapcsolatfelvétel is megfelelő. A protokollbújtatást a sechaw.exe hajtja végre, amelynek a működéséhez néhány környezeti változót be kell állítani. A script neve mondjuk legyen backup.cmd
SET SECHAW_IDENTITY="C:\Program Files\cwRsync\.ssh\id_rsa"
SET SECHAW_TYPE=ssh
SET SECHAW_LOCALPORT=9119
SET SECHAW_SERVER=valami.homeip.net
SET SECHAW_SERVERPORT=873
SET SECHAW_USER=SvcwRsync
SET SECHAW_CMD="C:\Program Files\cwRsync\bin\rsync.exe" -arz --progress --stats --exclude-from=exclude.txt --log-file=SyncLog.txt --ignore-errors --force "/cygdrive/c/doc" %SECHAW_SERVER%::teszt
SET SECHAW_TUNNEL=ssh -i "C:\Program Files\cwRsync\.ssh\id_rsa" -L 9119:%SECHAW_SERVER%:873 %SECHAW_USER%@%SECHAW_SERVER% -T -N
"C:\Program Files\cwRsync\bin\sechaw.exe" --verbose

Az rsync paraméterezése

A sechaw paraméterezése

A backup során előfordulhat, bizonyos fájlokat nem szeretnénk átmásolni (pl. ISO, mp3, AVI, stb...). A kihagyandó fájlok leírását az--exclude-from=exclude.txt paraméterrel adhatjuk meg. A fájlnevet persze módosíthatjuk.

Példa exclude.txt fájlra

*.avi,
*.ISO
*.bak
*.~*
*.err
*.gho
*.tmp
*.temp

Megjegyzések

  • Tesztelj, mielőtt élesben mennél. A szerveren létrejött fájlok tulajdonosa a szerviz user lesz.
  • A kliens oldalon készíts egy Ütemezett feladatot, ami rendszeresen indítja a backupot
    Start menü / Vezérlőpult / Ütemezett feladatok
  • Ha nincs elég sávszélességed, akkor használj a sávszélesség limitet(pl. -bwlimit=30).
  • A szerver oldali törlés kínos lehet, ezért a --delete kapcsolót csak akkor használd, ha biztos vagy a dolgodban

Az Rsync főbb paraméterei. A teljes lista itt található

-v, --verbose               Üzenetek olvashatók
-q, --quiet                 A hibaüzeneteken kívül nem jelenik meg semmi
-c, --checksum              checksum alapján lépi át a fájlokat
-a, --archive               Archive mód
-r, --recursive             rekurzívan a könyvtárakat másolja
-R, --relative              Relatív útvonalakat használ
-b, --backup                Bakcupot készít a régi fájlokról
-u, --update                Csak az újabb fájlokat másolja át
    --append                Hozáf?zi az adatokat a rövidebb fájlokhoz
-p, --perms                 jogosultságokkal együtt másol
-t, --times                 A módosítás időpontját meg?rzi 
-O, --omit-dir-times        a könyvtárak idejét nem módosítja
-n, --dry-run               Teszt futtatás
    --remove-source-files   A másolt fájlok törlése kliens oldaon
    --delete                A szerver oldalon törli a kliens oldalról hiányzó fájlokat (tükrözés!)
    --ignore-errors         IO error esetén is töröl a szerver oldalon
    --force                 Üres könyvtárt is töröl
    --partial               A részben átmásolt fájlokat megtartja
-z, --compress              tömörítés az adatátvitel közben
    --exclude-from=FIle     másolás alli kizárások listája egy fájlból
                            A fájl szerkezete: egy sor egy definíció.
    --files-from=FIle       read list of source-file names from FIle
    --stats                 Statisztika
    --progress              Olvasható kimenet az átvitel alatt
    --log-file=FIle         A log fájl helye
    --password-file=FIle    A szerver démon jelszó fájlja
    --bwlimit=KBPS          Sávszélesség limit: KBytes /sec, pl -bwlimit=20 (ez 20 kb/sec -et jelent)

Az Rsync működése vázlatosan

1. Az RSync klines oldala felveszi a kapcsolatot a szerver oldallal, létrejön a kapcsolat.

2. A kliens oldal összeállítja a küldendő fájlok listáját. Az összeállítás során menet közben ezt a listát átküldi a szervernek.

3. Miután készen van a lista, a klines és a szerver is rendezi a listában lévő elemeket, majd a szerver megállapítja, hogy melyek a módosítandó, törlendő és hozzáadandó fájlok.

4. A fájlokat méretük alapján alapján csomagokra bonja a szerver és a kliens is, és a különbségi csomagokat küldi csak át a kliens a szervernek. (Ez persze leggyakrabban a teljes fájlt jelenti)

A működés teljes leírását itt olvashatjuk.

A cwrsync szerver használata router/tűzfal mögött

Ha a szerver tűzfal mögött van, akkor a tűzfalon meg kell nyitni a 873-as TCP portot és át kell irányítani a megfelelő bElső hálózati gépre.

Ha a kliens van tűzfal mögött, akkor a kimen? forgalmat kell engedélyezni a külső 873-as címre. A fenti példában a 9119-es portot használja a kliens gép, tehát ezt kell a tűzfalon a kifelé men? forgalomra engedélyezni.

A Sechaw (=Security Chanel Wrapper) paraméterezése és környezeti változói

(Én és minden épesz? rendszergazda a környezeti változókat használja)

-i, -identity     Annak a fájlnak a neve, és elérési útja, ahol az rsa privát kulcsa található
                  Környezeti változó: SECHAW_IDENTITY

-t, -type         Az adatátvitel típusa, lehet ssh vagy plink
                  Környezeti változó: SECHAW_TYPE

-l, -localpor     A helyi port címe. A mi esetünkben 9119, de a default 8730
                  Környezeti változó: SECHAW_LOCALPORT

-h, -host         A távoli szerver neve, IP címe
                  Környezeti változó: SECHAW_SERVER

-r, -remoteport   A távoli szerver port címe (rsync esetén a default 873)
                  Környezeti változó: SECHAW_SERVERPORT

-u, -user         A távoli gépen alkalmazott user (cwrsync esetén az SvcRSync)
                  Környezeti változó: SECHAW_USER

-c, -command      A lokális gépen futtatandó parancs. (Mi az rSync-et futtatjuk a lokális gépen)
                  Környezeti változó: SECHAW_CMD

-t, -tunnel       A biztonságos csatornához kiadandó parancs
                  Környezeti változó: SECHAW_TUNNEL