Hemsida » hur » Den icke-nybörjare guide till att synkronisera data med Rsync

    Den icke-nybörjare guide till att synkronisera data med Rsync

    Rsync-protokollet kan vara ganska enkelt att använda för vanliga säkerhetskopierings- / synkroniseringsjobb, men några av dess mer avancerade funktioner kan överraska dig. I den här artikeln kommer vi att visa hur jätte de största datahackarna och backupentusiasterna kan använda rsync som en enda lösning för alla sina redundansbehov.

    Varning: Endast avancerade geeks

    Om du sitter där och tänker "Vad är det som heter rsync?" Eller "Jag använder bara rsync för riktigt enkla uppgifter", kanske du vill kolla in vår tidigare artikel om hur du använder rsync för att säkerhetskopiera dina data på Linux vilket ger en introduktion till rsync, guider dig genom installationen och visar sina grundläggande funktioner. När du har ett bestämt grepp om hur du använder rsync (ärligt, det är inte så komplicerat) och bekvämt med en Linux-terminal, är du redo att gå vidare till den här avancerade guiden.

    Running rsync på Windows

    Låt oss först få våra Windows-läsare på samma sida som våra Linuxguruer. Även om rsync är byggt för att köra på Unix-liknande system, finns det ingen anledning att du inte ska kunna använda den lika enkelt på Windows. Cygwin producerar ett underbart Linux API som vi kan använda för att köra rsync, så gå över till deras hemsida och ladda ner 32-bitars eller 64-bitarsversionen, beroende på din dator.

    Installation är okomplicerad; Du kan behålla alla alternativ till standardvärden tills du kommer till skärmen "Välj paket".

    Nu behöver du göra samma steg för Vim och SSH, men paketen kommer att se lite annorlunda ut när du väljer dem, så här är några skärmdumpar:

    Installera Vim:

    Installera SSH:

    När du har valt de tre paketen, fortsätt klicka på nästa tills du avslutar installationen. Då kan du öppna Cygwin genom att klicka på ikonen som installatören placerat på skrivbordet.

    rsync Kommandon: Enkel att Avancerad

    Nu när Windows-användare är på samma sida, låt oss ta en titt på ett enkelt rsync-kommando och visa hur användningen av några avancerade växlar snabbt kan göra det komplicerat.

    Låt oss säga att du har en massa filer som behöver säkerhetskopieras - vem gör det inte idag? Du kopplar in din bärbara hårddisk så att du kan säkerhetskopiera dina datafiler och utfärda följande kommando:

    rsync -a / home / geek / files / / mnt / usb / filer /

    Eller hur det skulle se ut på en Windows-dator med Cygwin:

    rsync-a / cygdrive / c / files / / cygdrive / e / files /

    Ganska enkelt, och vid det tillfället behöver du inte använda rsync, eftersom du bara kan dra och släppa filerna. Om din andra hårddisk redan har några filer och bara behöver de uppdaterade versionerna plus de filer som har skapats sedan den senaste synkroniseringen är det här kommandot användbart eftersom det bara skickar nya data till hårddisken. Med stora filer, och särskilt överföring av filer via internet, är det en stor sak.

    Säkerhetskopiera dina filer till en extern hårddisk och sedan hålla hårddisken på samma plats som din dator är en mycket dålig idé. Låt oss ta en titt på vad det skulle kräva för att börja skicka dina filer via Internet till en annan dator ( en du har hyrt, en familjemedlem, etc.).

    rsync -av --delete -e 'ssh -p 12345' / hem / nörd / filer / [email protected]: / home / geek2 / files /

    Ovanstående kommando skulle skicka dina filer till en annan dator med en IP-adress på 10.1.1.1. Det skulle ta bort främmande filer från den destination som inte längre finns i källkatalogen, mata ut de filnamn som överförs så att du har en uppfattning om vad som händer och tunnel rsync via SSH på port 12345.

    De -a -v -e - delete Omkopplare är några av de mest grundläggande och vanliga du borde redan veta en hel del om dem om du läser denna handledning. Låt oss gå över några andra omkopplare som ibland ignoreras men oerhört användbara:

    --framsteg - Med den här omkopplaren kan vi se överföringsförloppet för varje fil. Det är särskilt användbart när du överför stora filer via Internet, men kan ge en meningslös mängd information när du bara överför små filer över ett snabbt nätverk.

    Ett rsync-kommando med --framsteg byta som säkerhetskopiering pågår:

    --partiell - Detta är en annan strömbrytare som är särskilt användbar vid överföring av stora filer via Internet. Om rsync avbryts av någon anledning mitt i en filöverföring, hålls den delade överförda filen i målkatalogen och överföringen återupptas där den slutade när rsync-kommandot körts igen. När du överför stora filer via internet (säg ett par gigabyte), är det inget värre än att ha några andra internetbrott, blå skärm eller mänsklig fel resa upp din filöverföring och måste börja om igen.

    -P - den här omkopplaren kombinerar --framsteg och --partiell, så använd det istället och det kommer att göra ditt rsync-kommando lite snyggare.

    -z eller --komprimera - Denna omkopplare kommer att göra rsync komprimera fildata som den överförs, vilket minskar mängden data som måste skickas till destinationen. Det är faktiskt en ganska vanlig omkopplare men är långt ifrån väsentlig, bara till stor nytta för dig på överföringar mellan långsamma anslutningar, och det gör ingenting för följande typer av filer: 7z, avi, bz2, deb, g, z iso, jpeg, jpg, mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.

    -h eller --läsbar - Om du använder --framsteg byta, du vill definitivt använda den här också. Det vill säga, om du inte gillar att konvertera byte till megabyte på flugan. De -h Omkopplare konverterar alla utmatade nummer till läsbar format, så att du faktiskt kan förstå hur mycket data som överförs.

    -n eller --torrkörning - Denna omkopplare är viktig för att veta när du först skriver ditt rsync-script och testar det. Det utför en provkörning men gör inte några förändringar - de ändringar som ändras utmatas som vanligt, så du kan läsa över allt och se till att det ser bra ut innan du rullar ditt manus till produktion.

    -R eller --släkting - Denna omkopplare måste användas om destinationskatalogen inte existerar redan. Vi använder det här alternativet senare i den här guiden så att vi kan göra kataloger på målmaskinen med tidsstämplar i mappnamnen.

    --utesluta-från - Denna omkopplare används för att länka till en exkluderingslista som innehåller katalogvägar som du inte vill säkerhetskopiera. Det behöver bara en vanlig textfil med en katalog eller filväg på varje rad.

    --inkluderar-från - Liknande --utesluta-från, men det länkar till en fil som innehåller kataloger och filvägar med data som du vill säkerhetskopiera.

    --statistik - Inte riktigt en viktig omkopplare på något sätt, men om du är en sysadmin kan det vara bra att veta detaljerad statistik för varje backup, så att du kan övervaka hur mycket trafik som skickas över ditt nätverk och så.

    --loggfil - Detta låter dig skicka rsync-utgången till en loggfil. Vi rekommenderar definitivt detta för automatiserade säkerhetskopior där du inte finns där för att läsa igenom produktionen själv. Ge alltid loggfiler en gång över på fritiden för att se till att allt fungerar ordentligt. Det är också en avgörande omkopplare för en sysadmin att använda, så du är inte kvar undrar hur dina säkerhetskopieringar misslyckades medan du lämnade praktikanten.

    Låt oss ta en titt på vårt rsync-kommando nu när vi har lagt till några fler omkopplare:

    rsync -avzhP --delete --stats --log-file = / home / geek / rsynclogs / backup.log --exclude-from '/home/geek/exclude.txt' -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / files /

    Kommandot är fortfarande ganska enkelt, men vi har fortfarande inte skapat en anständig backup-lösning. Även om våra filer nu finns på två olika fysiska platser, gör denna säkerhet inte något för att skydda oss från en av huvudorsakerna till dataförlust: mänskligt fel.

    Snapshot Backups

    Om du oavsiktligt tar bort en fil, skadar ett virus någon av dina filer, eller något annat händer varigenom dina filer oönskade ändras, och sedan kör du ditt rsync-backup script, din säkerhetskopierad data skrivs över med de oönskade ändringarna. När en sådan sak inträffar (inte om, men när) gjorde din backuplösning inget för att skydda dig mot din dataförlust.

    Skaparen av rsync insåg detta och lade till --säkerhetskopiering och --backup-dir argument så att användare kan köra differentiella säkerhetskopior. Det allra första exemplet på rsyncs hemsida visar ett skript där en fullständig säkerhetskopiering körs var sjunde dag, och sedan säkerhetskopieras ändringarna till dessa filer i separata kataloger dagligen. Problemet med den här metoden är att återställa dina filer, du måste effektivt återställa dem sju olika tider. Dessutom kör de flesta geeks flera gånger om dagen, så du kan enkelt ha 20 olika backupkataloger vid varje given tillfälle. Det är inte bara att återställa dina filer nu, men även om du bara tittar på dina säkerhetskopierade data kan det vara extremt tidskrävande - du måste känna till sista gången en fil ändrades för att hitta den senaste säkerhetskopian. Utöver allt det är det ineffektivt att springa endast en gång i veckan (eller ännu mindre i vissa fall) inkrementella säkerhetskopior.

    Snapshot-säkerhetskopior till räddningen! Snapshot-säkerhetskopieringar är inget mer än inkrementella säkerhetskopior, men de använder hårdlänkar för att behålla filstrukturen för den ursprungliga källan. Det kan vara svårt att förstöra huvudet först, så låt oss ta en titt på ett exempel.

    Låt oss ha ett backup-skript som automatiskt säkerhetskopierar våra data varannan timme. När rsync gör det heter det varje backup i formatet: Backup-månad-dag-år-tid.

    Så, i slutet av en typisk dag, skulle vi ha en lista över mappar i vår målkatalog så här:

    När du går igenom någon av dessa kataloger ser du alla filer från källkatalogen exakt som vid den tiden. Ändå skulle det inte finnas några dubbleringar över några två kataloger. rsync åstadkommer detta med hjälp av hårdkoppling genom --länk-dest = DIR argument.

    Naturligtvis, för att kunna ha dessa snyggt och snyggt daterade katalognamn, måste vi böja upp vårt rsync script lite. Låt oss ta en titt på vad det skulle kräva för att utföra en backup-lösning så här, och då kommer vi att förklara skriptet i större detalj:

    #! / Bin / bash

    #copy old time.txt till time2.txt

    ja | cp ~ / backup / time.txt ~ / backup / time2.txt

    #överskriv gammal time.txt-fil med ny tid

    eko-datum + "% F-% I% p" '> ~ / backup / time.txt

    # gör loggfilen

    echo ""> ~ / backup / rsync-hadate + "% F-% I% p" ". logg

    #rsync-kommandot

    rsync -avzhPR -chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r --delete --statistik - loggfil = ~ / backup / rsync-hadate + "% F-% I% p "'.log.exclude-from' ~ / exclude.txt '--link-dest = / home / geek2 / files /' cat ~ / backup / time2.txt '-e' ssh -p 12345 '/ home / geek / filer / [email protected]: / home / geek2 / files / 'date + "% F-% I% p"' /

    # glöm inte att scp loggfilen och sätt den med säkerhetskopian

    scp -P 12345 ~ / backup / rsync-'cat ~ / backup / time.txt'.log [email protected]: / home / geek2 / files / 'cat ~ / backup / time.txt' / rsync-'cat ~ / backup / time.txt'.log

    Det skulle vara en typisk snapshot rsync script. Om vi ​​förlorade dig någonstans, låt oss dissekera det bit för bit:

    Den första raden i vårt skript kopierar innehållet time.txt till time2.txt. Ja-röret är att bekräfta att vi vill skriva över filen. Därefter tar vi den aktuella tiden och lägger den in i time.txt. Dessa filer kommer att komma till nytta senare.

    Nästa rad gör rsync-loggfilen, namnger den rsync-date.log (var datum är det aktuella datumet och tiden).

    Nu, det komplexa rsync-kommandot som vi har varnat för dig om:

    -avzhPR, -e, --delete, --stats, --log-file, --exclude-from, -link-dest - Bara de växlar vi pratade om tidigare; rulla upp om du behöver en uppfriskning.

    --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r - Dessa är behörigheterna för målkatalogen. Eftersom vi gör denna katalog i mitten av vårt rsync-skript måste vi ange behörigheterna så att vår användare kan skriva filer till den.

    Användningen av datum- och kattkommandon

    Vi ska gå över varje användning av datum- och kattkommandon inuti rsync-kommandot, i den ordning de uppstår. Obs! Vi är medvetna om att det finns andra sätt att uppnå denna funktionalitet, särskilt med användningen av deklarerande variabler, men i den här handboken har vi bestämt oss för att använda denna metod.

    Loggfilen anges som:

    ~ / backup / rsync-hat + "% F-% I% p" ". logg

    Alternativt kan vi ha angett det som:

    ~ / backup / rsync-'cat ~ / backup / time.txt'.log

    Hur som helst, den --loggfil kommandot ska kunna hitta den tidigare skapade daterade loggfilen och skriva till den.

    Länkens destinationsfil anges som:

    --link-dest = / home / geek2 / files / 'cat ~ / backup / time2.txt'

    Det betyder att --länk-dest Kommando ges katalogen för den tidigare säkerhetskopian. Om vi ​​kör säkerhetskopior varannan timme, och det är 16:00 när vi sprang det här skriptet, då --länk-dest Kommando letar efter katalogen skapad klockan 14:00 och överför endast de data som har ändrats sedan dess (om någon).

    För att upprepa är det därför time.txt kopieras till time2.txt i början av manuset, så att --länk-dest kommandot kan referera den tiden senare.

    Destinationskatalogen anges som:

    [email protected]: / home / geek2 / files / 'date + "% F-% I% p"'

    Detta kommando lägger helt enkelt källfilerna i en katalog som har en titel på det aktuella datumet och tiden.

    Slutligen ser vi till att en kopia av loggfilen placeras i säkerhetskopian.

    scp -P 12345 ~ / backup / rsync-'cat ~ / backup / time.txt'.log [email protected]: / home / geek2 / files / 'cat ~ / backup / time.txt' / rsync-'cat ~ / backup / time.txt'.log

    Vi använder säker kopia på port 12345 för att ta rsync loggen och placera den i rätt katalog. För att välja rätt loggfil och se till att den slutar på rätt plats, måste filen time.txt refereras via kattkommandot. Om du undrar varför vi bestämde oss för att kata time.txt istället för att bara använda datumkommandot, beror det på att mycket tid kunde ha skett när rsync-kommandot körde, så för att se till att vi har rätt tid, vi bara katt det textdokument vi skapade tidigare.

    Automatisering

    Använd Cron på Linux eller Task Scheduler på Windows för att automatisera ditt rsync script. En sak du måste vara försiktig med är att se till att du avslutar alla pågående rsync-processer innan du fortsätter en ny. Task Scheduler verkar stänga alla redan körda instanser automatiskt, men för Linux behöver du vara lite mer kreativ.

    De flesta Linux-distributioner kan använda kommandot pkill, så var noga med att lägga till följande i början av ditt rsync-skript:

    pkill -9 rsync

    kryptering

    Nej, vi är inte färdiga än. Vi har äntligen en fantastisk (och gratis!) Backup-lösning på plats, men alla våra filer är fortfarande mottagliga för stöld. Förhoppningsvis säkerhetskopierar du dina filer till någon plats hundratals miles bort. Oavsett hur säker den bortre platsen är, stöld och hacking kan alltid vara problem.

    I våra exempel har vi tunnat hela vår rsync-trafik via SSH, så det betyder att alla våra filer krypteras under transitering till deras destination. Vi måste dock se till att destinationen är lika säker. Tänk på att rsync endast krypterar dina data när det överförs, men filerna är öppna när de når deras destination.

    En av rsyncs bästa funktioner är att den bara överför ändringarna i varje fil. Om du har alla dina filer krypterade och gör en mindre ändring, måste hela filen vidarebefordras till följd av att krypteringen helt randomiserar all data efter eventuell förändring.

    Av den anledningen är det bäst / enklast att använda någon typ av diskkryptering, till exempel BitLocker for Windows eller dm-crypt för Linux. På så sätt skyddas dina data vid stöld, men filer kan överföras med rsync och din kryptering hindrar inte dess prestanda. Det finns andra alternativ som fungerar på samma sätt som rsync eller ens implementerar någon form av det, t.ex. Duplicity, men de saknar några av de funktioner som rsync har att erbjuda.

    När du har konfigurerat dina stillbilder på ett offsite-läge och krypterat dina hårddiskar och destinationer, ge dig själv en klapp på baksidan för att behärska rsync och implementera den mest dåliga lösningen för säkerhetskopiering av data.