17Aug

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 Endast

Om du sitter där och tänker "Vad är heck är 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äkerhetskopieraDina data på Linux, som ger en introduktion till rsync, guidar 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öras 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 harvalda de tre paketen, fortsätt att 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 omkopplare 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/files/

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

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

Ganska enkelt, och vidden punkten är det verkligen inget behov av att använda rsync, eftersom du bara kan dra och släppa filerna. Om din andra hårddisk redan har några av filerna och bara behöver de uppdaterade versionerna plus de filer som har skapats sedan senaste synkroniseringen är det här kommandot praktiskt 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' /home/geek/files/ [email protected]: /home/geek2/files/

Kommandot ovan 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 existerar i källkatalogen, mata ut de filnamn som överförs så att du har en uppfattning om vad som händer och tunnel rsync genom SSH på port 12345.

Den -a -v -e --delete switchar är några av de mest grundläggande och vanligadu 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 otroligt användbara:

- Progress - Denna omkopplare låter oss 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 -progress-omkopplaren som säkerhetskopiering pågår:

- partiell - Detta är en annan växel 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 exekveras 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 -progress och -partial, så använd den istället och det kommer att göra ditt rsync-kommando lite snyggare.

-z eller --compress - Denna omkopplare kommer att göra rsync komprimera fildata som den överförs, vilket minskar mängden data som ska 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 - humanläsbar - Om du använder --progress-knappen, vill du definitivt använda den här också.Det vill säga, om du inte gillar att konvertera byte till megabyte på flugan.-h-omkopplaren omvandlar alla utmatade nummer till ett personligt läsbart format, så att du faktiskt kan förstå hur mycket data som överförs.

-n eller --dry-run - Denna omkopplare är viktig för att veta när du först skriver ditt rsync-script och testar det. Det utförs 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 --relativ - 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.

--exclude-from - 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.

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

-statistik - Det är inte riktigt en viktig växel på något sätt, men om du är en sysadmin kan det vara praktiskt 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 - Här kan du 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 i 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 backup misslyckades när du lämnade den praktikant som ansvarade.

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

rsync -avzhP --delete --statistik --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, ett virus förstör någon av dina filer eller något annat händer där dina filer skadas oönskat, 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 realiserade detta och lade till --backup och --backup-dir-argumenten så att användarna kunde köra differentialbackups. 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äkerhetskopior ä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 script 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 på 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 -link-dest = DIR-argumentet.

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

#!/bin/ bash

#copy old time.txt to time2.txt

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

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

echo `date +"% F-% I% p "` & gt;~ /backup/ time.txt

# gör loggfilen

echo "" & gt;~ /backup/ rsync-`date + "% F-% I% p" `.log

#rsync kommando

rsync -avzhPR --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r - delete --statistik - log-file = ~ /backup/ rsync-`date + "% F-% I% p" `.log --exclude-from '~ / exclude.txt' - länk-dest = /home/geek2/files/` katt ~ /backup/time2.txt` -e 'ssh -p 12345' /home/geek/files/ [email protected]: /home/geek2/files/ `datum +"% F-% I% p "` /

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

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

Attskulle vara ett typiskt 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 dig om:

-avzhPR, -e, --delete, --statistik, --loggfil, --exclude-from, --link-dest - Justde växlar vi pratade om tidigarerulla upp om du behöver en uppdatering.

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

Användandet av datum- och kattkommandon

Vi går över varje användning av datum- och kattkommandon i 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ändandet av deklarerande variabler, men i den här guiden har vi bestämt oss för att använda den här metoden.

Loggfilen är specificerad som:

~ /backup/ rsync-`date + "% F-% I% p" `.log

Alternativt kan vi ha angivit det som:

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

Hur som helst ska kommandot --log-file 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`

Detta innebär att kommandot -link-dest ges katalogen för den tidigare säkerhetskopian. Om vi ​​kör säkerhetskopior varannan timme och klockan 16:00 när vi körde det här skriptet letar kommandot -link-dest 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å kommandot -link-dest kan referera den tiden senare.

Destinationskatalogen är specificerad som:

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

Detta kommando sätter helt enkelt källfilerna i en katalog som har en titel på aktuellt datum och tid.

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/ `katt ~ /backup/ time.txt` / rsync-`cat ~ /backup/ time.txt`.log

Vi användersäkra 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 kattdet textdokument vi skapade tidigare.

Automation

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 känsliga för stöld. Förhoppningsvis säkerhetskopierar du dina filer till någon plats hundratals mil bort. Oavsett hur säker den bortre platsen är, stöld och hacking kan alltid vara problem.

I våra exempel har vi tunneliserat 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 den överförs, men filerna är öppna när de når sin destination.

En av rsyncs bästa egenskaper är att den bara överför ändringarna i varje fil. Om du har alla dina filer krypterade och gör en liten ändring, måste hela filen vidarebefordras till följd av att krypteringen helt randomiserar all data efter någon ä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.

Efter att du har konfigurerat dina stillbilder på ett offsite-läge och krypterat dina hårddiskar för käll och hårddisk, ge dig själv en klapp på baksidan för att behärska rsync och implementera den mest dåliga data backup-lösningen.