Sikkerhedskopiering med rsync
rsync er et værktøj til at sikkerhedskopiere og synkronisere dine filer (rsync kan køre på en vifte af *nix porte).
En begrænsning i rsync er at programmet ikke er i stand til at kopiere fra remote- til remote-system!. Hvis du vil gøre dette med rsync skal du kopiere et af remote-systemerne til et lokalt system, og så kopiere fra det lokale til det andet remote-system.
Med aptosid har du 2 forskellige muligheder for at starte processen, Gør-det-selv eller via deb pakke i Debian sid:
For deb pakken:
apt-get install luckybackup
Her følger gør-det-selv versionen
Det følgende vil give dig noget praktisk anvendelig information om hvad rsync kan gøre, samt give dig nogle eksempler på kode som du kan bruge i dit eget sikkerhedskopierings-script.
rsync er et letanvendeligt sikkerhedskopierings program, det kan osse sikkerhedskopiere filer og mapper meget hurtigt. rsync opnår dette ved at anvende en meget smart rutine hvor den kontrollerer hvilke filer der er blevet ændret, således at kun filer med ændringer selekteres til kopiering. rsync anvender også et kompressions værktøj til at øge hastigheden på kopierings processen (når denne mulighed er valgt eksplicit med -z parametren). Dette kan forklares meget simpelt:
rsync programmet detekterer filer og mapper der skal kopieres fordi en eller flere af deres attributter er blevet ændret (for eksempel dato/tid for sidste ændring, eller størrelsen af filen), i begge tilfælde en ændring siden sidste sikkerhedskopiering. Denne selektionsproces er meget hurtig at udføre.
Når rsync først har bygget listen over det den vil kopiere, går selve kopieringen meget hurtigt idet kompressions værktøjet anvendes herunder. rsync komprimerer før filerne afsendes til bestemmelsesstedet, derefter afkomprimeres de “on the fly”.
rsync kan kopiere filer fra:
* lokal system til lokal system,
* lokal system til remote system,
* remote system til lokal system.
Der envendes enten en standard ssh klient, eller en rsync daemon på både kilde- og mål-systemet. Man siderne for rsync slår fast at hvis du er i stand til at ssh til et system, så kan rsync også ssh til det.
En begrænsning i rsync er at programmet ikke er i stand til at kopiere fra remote- til remote-system!. Hvis du vil gøre dette med rsync skal du kopiere et af remote-systemerne til et lokalt system, og så kopiere fra det lokale til det andet remote-system.
For at vise dette med et eksempel, forestiller vi os tre systemer;
neo – et lokalt system morpheus – et remote system trinity – et remote system
Hvis du vil anvende rsync til at kopiere, eller sync, mapperne /home/[user]/Data fra lle systemer ne til hinanden. Hvert system "ejes" af en specifik bruger, med andre ord, hvert specifikke system har en specifik bruger, og derfor bør ethvert af systemerne bruges som "kilden" til de andre to systemer. Du kan udelukkende køre kommandoen rsync fra den lokale maskine (det er neo):
brugeren af neo hedder cuddles, brugeren af morpheus hedder tartie, og brugeren af trinity hedder taylar.
Det du altså vil gøre er at sikkerhedskopiere (synkronisere) følgende:
neo's /home/cuddles/Data area til morpheus og trinity, morpheus's /home/tartie/Data area til neo og trinity, trinity's /home/taylar/Data area til neo og morpheus.
Problemet med at rsync ikke kan kopiere fra remote til remote betyder nu at i dette eksempel støder vi ind i problemer med at kopiere fra trinity til morpheus, og fra morpheus til trinity (både kilde og mål er remote) i.e.
neo --> morpheus – fint, local til remote neo --> trinity – fint, local til remote morpheus --> neo – fint, remote til local trinity --> neo – fint, remote til local morpheus --> trinity – remote til remote – virker ikke trinity --> morpheus – remote til remote – virker ikke
For at arbejde dig rundt om denne begrænsning kan du ændre din metode til det følgende;
morpheus --> trinity – gøres ved: morpheus --> neo & neo --> trinity trinity --> morpheus – gøres ved: trinity --> neo & neo --> morpheus
Det kræver altså lidt ekstra arbejde at gøre dette, men eftersom du også ønsker at kopiere filerne til neo er det i realiteten bare en ændring af kilden du foretager, resultatet bliver det ønskede. Forudsat dine sikkerhedskopieringer er vellykkede og intet mangler.
Denne begrænsning i rsync skal du tage med i dine overvejelser når du designer dine sikkerhedskopierings procedurer.
Anvendelse af hostnames med hostnames i rsync
Anvendelse af IP-adresser på neo, morpheus og trinity kan gøre kopieringsprocessen mere gennemskuelig og dermed nemmere.
Du skal redigere filen /etc/hosts, og tilføje dine hostnames og IP-addresserne som de skal oversættes til. Her er en lille snip af en /etc/hosts fil, så du kan se hvordan det skal se ud:
192.168.1.15 neo 192.168.1.16 morpheus 192.168.1.17 trinity
Den føste linie oversætter IP-adressen 192.168.1.15 til navnet “neo”, den anden 192.168.1.16 til “morpheus”, og den sidste IP-Addressen 192.168.1.17 til navnet “trinity”. Efter tilføjelse af dine skal du gemme /etc/hosts filen, og du kan så anvende navnet i stedet for IP-adressen, eller du kan fortsætte med at anvende IP-addressen. Dette er specielt nyttigt når/ hvis systemer ændrer deres IP-adresse, du skal så bare ændre din /etc/hosts fil, og ikke alle dine scripts. For eksempel hvis neo ændrer IP-addresse fra 192.168.1.15 til 192.168.1.25:
Hvis du har skrevet alle dine scripts med ip-adresser i skal du finde dem alle og redigere dem til den nye adresse. Men hvis du anvender hostnames, så er det eneste du skal redigere /etc/hosts filen, og så virker alle dine scripts igen. Metoden med at anvende hostnames gør også hele processen mere gennemskuelig idet genkendelige navne sikkert vil sige dig mere end ip-adresser om hvilken maskine det er du arbejder med.
rsync, og de to måder du kan anvende det på.
En måde er at “skubbe” filer til et givent mål, og den anden måde er at “trække” filerne fra en given kilden. Hver metode har deres fordele, og nogle ulemper. Lad os se på dem hver især (for denne del lad os antage at en af dine systemer er lokal og det andet er remote. På den måde er det nemmere at få fat i terminologien).
“skubbe” - lokal systemet har kilde filerne og mapperne liggende, og målet er en remote maskine. rsync kommandoen afvikles på lokal systemet, og “skubber” filerne til mål systemet (remote systemet).
Fordele:
* Du kan have mere end et system der sikkerhedskopierer sig selv til et enkelt mål system.
* Sikkerhedskopieringsprocessen fordeles over dit totale computer system, og tynger ikke blot en enkelt maskine.
* Hvis et system er hurtigere end de andre kan det afslutte før de andre og bruges til andre formål.
Ulemper:
* Hvis du anvender et script, og planlægger dem med cron, så kræver det opdatering og ændring af adskillige crontabs på hvert system, ligesom opdatering af adskillige versioner af dit script.
* Din sikkerhedskopi kan ikke kontrollere om mål systemets har mål-partitionen monteret, og du kan derfor risikere at du laver en sikkerhedskopi til ingenting på mål systemet.
“trække” - fjernsystemet har kilde filerne og mapperne liggende, og målet er lokal systemet. rsync kommandoen afvikles på lokal systemet, og “trækker” filerne over fra kilde systemet (remote systemet).
Fordele:
* Et system er serveren der kontrollerer alle sikkerhedskopieringer for alle de andre systemer. Centraliseret sikkerhedskopiering.
* Anvender du scripts findes disse udelukkende på et enkelt system. Og du har kun brug for et enkelt script hvad der gør opdatering og ændringer meget nemt at udføre. Det tillader dig også at have bare en crontab fil til at planlægge script'et.
* Dit script kan kontrollere, og montere (om nødvendigt) mål partitionen.
Syntaksen for rsync, som du finder den i man siderne:
rsync [OPTION]... SRC [SRC]... DEST rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST rsync [OPTION]... SRC rsync [OPTION]... [USER@]HOST:SRC [DEST] rsync [OPTION]... [USER@]HOST::SRC [DEST] rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
Eksempler på rsync kommandoer:
rsync -agEvz --delete-after --exclude=”*~” morpheus:/home/tartie /media/sda7/SysBackups/morpheus/home
Lad os kigge nærmere på dele af denne kommando:
kilde stien/ filen er: morpheus:/home/tartie og målet er: /media/sda7/SysBackups/morpheus/home
alt fra /home/tartie... vil blive sikkerhedskopieret til /media/sda7/SysBackups/morpheus/home som vil se ud som følger:
/media/sda7/SysBackups/morpheus/home/tartie...
Det skal bemærkes at den eneste grund til at /tartie er under /home er på grund af MÅL-designationen (TARGET designation), og IKKE kilden (SOURCE). Kilden (source) selekterer kun hvor filerne kommer fra, ikke hvorhen de bliver sendt. "Målet" (target) er det der fortæller rsync hvor filerne, som kommer fra kilden, skal placeres. Se det følgende eksempel:
rsync [...] /home/user/data/files /media/sda7/SysBackups/neo
I den ovenstående kommando bliver kun kilde mappen /files, og alt hvad der ligger under dette, blive kopieret til mål mappen /neo – og altså ikke denne del /media/sda7/SysBackups/neo/home/user/data/files
Husk at tage dette med i dine overvejelser når du designer dine kommandoer til sikkerhedskopiering med rsync.
Forklaring af parametrene:
-a is used for archive mode. From the man page, it explains this option as “in simple terms, a way to backup recursively, and to preserve 'almost' everything”. It does mention that t his format does not preserve hardlinks due to the complexity of processing. The -a option is stated as being equivalent to the following: -rlptgoD which means this: -r = recursive – process sub-folders and files found in our “source” location. -l = links – when symlinks are encountered, recreate them on the target location. -p = permissions – tells rsync to set target permissions the same as source. -t = times – tells rsync to set target times the same as source. -q = quiet – tells rsync to keep its output minimal, though we add a level of verbose with the command -v right after this. To make the process complete “quiet”, remove the “v” in the above command. -o = owner – tells rsync that if it's run as root, set the target files owner the same as source. -D = this is equivalent to using these two commands: --devices --specials --devices = causes rsync to transfer character and block device files to the remote system to recreate these devices. Unfortunately, if you do not also include --super in the same command, this has no effect. --specials = causes rsync to transfer special files such as named sockets and fifos. -g is used to preserve “group” of the source file to the target. -E is used to preserve “executable” of the source file to the target. -v is used to increase the verbosity that is displayed. After we are sure we are backing up what we want, the “v” can be removed. I have left it in, because I run this process from a cron job, and prefer to “see” what it did. I leave it up to the individual to decide. -z is used to compress the data it needs to “transfer” or copy, this makes the copy process take less time, because the data being transferred is smaller in size than its real size. --delete-after = target files/folders that are no longer on the source are deleted after transfer, not before. This “after” is used in case of problems or a crash, and the “delete” is used to keep target files that no longer exist on source system from hanging around and not cleaned up on our target location. --exclude = a pattern used to exclude files or folders with. In the example, --exclude=“*~” would exclude ANY and ALL files or folders ending with the “~” character from being backed up. Only one pattern can be supplied with the --exclude option, so if more than one is needed, you need to supply additional exclude lines on the command line.
I tillæg findes disse parametre du kan anvende:
-c – which will add another level of checks into the source being compared to the target after the copy process, but it adds more time to the copy process, and rsync already does comparisons of the source and target files during its processing, so this option was not included for the simple fact it slows the complete process down, and is only a form of redundancy, which is not needed. --super – which, as the man page describes it, the receiver, or target system, will attempt super-user activities --dry-run – which will show what would have been transferred. This is kind of like using the -s option with apt-get install, or apt-get dist-upgrade.
Resten af vores kommandoe er kilde-filen/mappen, og dernæst den mappe der er vores mål.
Kommando eksempler:
rsync -agEvz --delete-after --exclude=”*~” morpheus:/home/tartie /media/sda7/SysBackups/morpheus/home
Denne kommando kopierer all filerne og mapperne under /home/tartie på systemet der oversættes af navnet “morpheus”, og placere dem i /media/sda7/SysBackups/morpheus/home mappen – bevarende mappestrukturen fra tartie mappen og udad.
rsync -agEvz --delete-after --exclude=”*~” /home/tartie neo:/media/sda7/SysBackups/morpheus/home
Denne kommando er den modsatte af den forrige, den vil “skubbe” /home/tartie mappen, dets indhold og undermapper over i systemet med navnet neo ind i den samme mappe – bemærk at et system opfattes som remote når det har “:” (kolon) foran navnet.
rsync -agEvz --delete-after --exclude=”*~” /home/cuddles /media/sda7/SysBackups/neo/home
Denne kommando laver en lokal til lokal kopiering, bemærk fraværet af kolon i både kilde og mål destinationerne. Denne kommando kopierer lokalt /home/cuddles delen til det samme systems /media/sda7/SysBackups/neo/home destination.
Lad os kigge på en multiple exclude rsync kommando:
rsync -agEvz --delete-after --exclude=”*~” --exclude=”*.c” --exclude=”*.o” "/*" /media/sda7/SysBackups/neo
Ovenstående kommando vil sikkerhedskopiere ALT fra root på lokal systemet, og alle filerne og mapperne, placere dem i mål destinationen /media/sda7/SysBackups/neo – men nu vil kommandoen ekskluderer alle filer eller mapperr der ender med et “~”, eller et “.c”, eller et “.o”
Nedenunder er et eksempel på en rsync kommando der bør undgås; En kommando der beskriver en remote-til-remote kopiering:
rsync -agEvz --delete-after --exclude=”*~” morpheus:/home/tartie trinity:/home
Som tidligere nævnt er dette en begrænsning i rsync.
En sidste kommando som eksempel. Lad os se på en remote til lokal rsync som den vil se ud hvis vi anvender ip-adresser istedet for hostnames.
Den første kommando er med navne, den næste er den samme kommando, blot med ip-adressen istedet
rsync -agEvz --delete-after --exclude=”*~” morpheus:/home/tartie /media/sda7/SysBackups/morpheus/home
rsync -agEvz --delete-after --exclude=”*~” 192.168.1.16:/home/tartie /media/sda7/SysBackups/morpheus/home
Som sagt skal du ikke bruge hostnames, men som du ser kan det øge dit overblik over hvad du foretager dig.
Du bør nu være i stand til at designe dine egne simple kommandoer, enten ud fra eksemplerne vi her har givet, eller ved at sammensætte dine helt egne ud fra de anvendelige parametre.