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 även de största datahämtarna och säkerhetskopieringsentusiasterna kan använda rsync som en enda lösning för alla deras behov av dataredundans.
Varning: Endast avancerade nördar
Om du sitter där och tänker "Vad är det för rsync?" eller "Jag använder bara rsync för riktigt enkla uppgifter", kanske du vill kolla in vår tidigare artikel om hur man använder rsync för att säkerhetskopiera dina data på Linux , som ger en introduktion till rsync, guidar dig genom installationen och visar dess mer grundläggande funktioner. När du förstår hur du använder rsync (ärligt talat är det inte så komplicerat) och är bekväm med en Linux-terminal, är du redo att gå vidare till den här avancerade guiden.
Kör rsync på Windows
Låt oss först få våra Windows-läsare på samma sida som våra Linux-guruer. Ä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 i Windows. Cygwin producerar en underbar Linux API som vi kan använda för att köra rsync, så gå till deras webbplats och ladda ner 32-bitars eller 64-bitars beroende på din dator.
Installationen är enkel; du kan behålla alla alternativ till standardvärdena tills du kommer till skärmen "Välj paket".
Nu måste 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 dessa tre paket fortsätter du att klicka på nästa tills du är klar med installationen. Sedan kan du öppna Cygwin genom att klicka på ikonen som installationsprogrammet placerade på skrivbordet.
rsync-kommandon: Enkelt till avancerat
Nu när Windows-användare är på samma sida, låt oss titta på ett enkelt rsync-kommando och visa hur användningen av vissa 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 ansluter din bärbara hårddisk så att du kan säkerhetskopiera dina dators filer och utfärda följande kommando:
rsync -a / home / geek / files / / mnt / usb / files /
Eller så som det skulle se ut på en Windows-dator med Cygwin:
rsync -a / cygdrive / c / files / / cygdrive / e / files /
Ganska enkelt, och vid den tidpunkten finns det verkligen inget behov av att använda rsync, eftersom du bara kan dra och släppa filerna. Men 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 den senaste synkroniseringen, är det här kommandot praktiskt eftersom det bara skickar de nya uppgifterna till hårddisken. Med stora filer, och särskilt överföring av filer över internet, är det en stor sak.
Att 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é, så låt oss ta en titt på vad det skulle kräva för att börja skicka dina filer över internet till en annan dator ( en du har hyrt, en familjemedlem osv.).
rsync -av --delete -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / files /
Ovanstående kommando skickar dina filer till en annan dator med en IP-adress 10.1.1.1. Det skulle ta bort externa filer från destinationen som inte längre finns i källkatalogen, mata ut filnamnen som överförs så att du får en uppfattning om vad som händer och tunnel rsync genom SSH på port 12345.
De
-а -в -е --делете
switchar är några av de mest grundläggande och vanligt förekommande; du borde redan veta mycket om dem om du läser den här handledningen. Låt oss gå igenom några andra växlar som ibland ignoreras men otroligt 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 över internet, men kan skicka en meningslös mängd information när du bara överför små filer över ett snabbt nätverk.
Ett rsync-kommando med
--framsteg
växla när en säkerhetskopia pågår:
--partiell
- Det här är en annan switch som är särskilt användbar vid överföring av stora filer över internet. Om rsync av någon anledning avbryts mitt i en filöverföring sparas den delvis överförda filen i målkatalogen och överföringen återupptas där den slutade när rsync-kommandot körs igen. När du överför stora filer över internet (säg ett par gigabyte), finns det inget värre än att ha några sekunders internetavbrott, blå skärm eller mänskliga fel, snubblar upp din filöverföring och måste starta om igen.
-P
- den här växeln kombinerar
--framsteg
och
--partiell
, så använd det istället så gör ditt rsync-kommando lite snyggare.
-med
eller
--komprimera
- Denna omkopplare gör att rsync komprimerar fildata när 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 nödvändig, bara gynnar dig verkligen vid ö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
--mänsklig läsbar
- Om du använder
--framsteg
växla, du vill definitivt använda den här också. Det vill säga om du inte vill konvertera byte till megabyte direkt. De
-h
switch konverterar alla utmatade nummer till läsbart format, så att du faktiskt kan förstå mängden data som överförs.
-n
eller
--torrkörning
- Den här omkopplaren är viktig att veta när du först skriver ditt rsync-skript och testar det. Den utför en provkörning men gör faktiskt inga ändringar - de förväntade ändringarna matas fortfarande ut som vanligt, så att du kan läsa över allt och se till att det ser bra ut innan du rullar in ditt manus till produktion.
-R
eller
--relativ
- Den här omkopplaren måste användas om målkatalogen inte redan finns. Vi kommer att använda detta alternativ senare i den här guiden så att vi kan skapa kataloger på målmaskinen med tidsstämplar i mappnamnen.
--exclude-from
- Den här växeln används för att länka till en uteslutningslista som innehåller katalogvägar som du inte vill säkerhetskopiera. Det behöver bara en vanlig textfil med en katalog eller filsökväg på varje rad.
- inkludera-från
- Liknande
--exclude-from
, men den länkar till en fil som innehåller kataloger och filvägar för data du vill säkerhetskopiera.
--statistik
- Inte riktigt en viktig omkopplare på något sätt, men om du är sysadmin kan det vara praktiskt att känna till den detaljerade statistiken för varje säkerhetskopia, så att du kan övervaka mängden trafik som skickas över ditt nätverk och sådant.
--loggfil
- Detta låter dig skicka rsync-utdata till en loggfil. Vi rekommenderar definitivt detta för automatiserade säkerhetskopior där du inte är där för att läsa igenom utdata själv. Ge alltid loggfilerna en gång över på din fritid för att se till att allt fungerar som det ska. Det är också en viktig switch för en sysadmin att använda, så du behöver inte undra hur dina säkerhetskopior 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 växlar:
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 säkerhetskopieringslösning. Även om våra filer nu finns på två olika fysiska platser, gör denna säkerhetskopia inget för att skydda oss från en av huvudorsakerna till dataförlust: mänskliga fel.
Snapshot-säkerhetskopior
Om du av misstag raderar en fil, skadar ett virus någon av dina filer, eller något annat händer där dina filer ändras oönskat, och sedan kör du ditt rsync backup-skript, dina säkerhetskopierade data skrivs över med de oönskade ändringarna. När en sådan sak inträffar (inte om, men när), gjorde din säkerhetskopieringslösning inget för att skydda dig från 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 olika säkerhetskopior. Den mycket
första exemplet på rsyncs webbplats
visar ett skript där en fullständig säkerhetskopiering körs var sjunde dag, och sedan säkerhetskopieras ändringarna av dessa filer i separata kataloger dagligen. Problemet med den här metoden är att för att återställa dina filer måste du effektivt återställa dem sju olika tider. Dessutom kör de flesta nördar sina säkerhetskopior flera gånger om dagen, så du kan enkelt ha 20+ olika säkerhetskopieringsförteckningar vid varje given tidpunkt. Det är inte bara svårt att återställa dina filer nu, men det kan vara mycket tidskrävande att bara titta igenom dina säkerhetskopierade data - du måste veta senast en fil ändrades för att hitta den senaste säkerhetskopian. Utöver allt är det ineffektivt att bara köra inkrementella säkerhetskopior varje vecka (eller till och med mindre ofta).
Snapshot-säkerhetskopior till undsättning! Snapshot-säkerhetskopior är inget annat än inkrementella säkerhetskopior, men de använder hårda länkar för att behålla filstrukturen för den ursprungliga källan. Det kan vara svårt att slå ihop huvudet först, så låt oss titta på ett exempel.
Låtsas att vi har ett säkerhetskopieringsskript som säkerhetskopierar våra data automatiskt varannan timme. När rsync gör detta namnger den varje säkerhetskopia i formatet: Backup-månad-dag-år-tid.
Så i slutet av en typisk dag skulle vi ha en lista med mappar i vår målkatalog så här:
När du korsar någon av dessa kataloger ser du alla filer från källkatalogen precis som de var vid den tiden. Ändå skulle det inte finnas några dubbletter över två kataloger. rsync åstadkommer detta med hjälp av hårdlänkning genom
--link-dest = DIR
argument.
För att ha dessa snyggt och snyggt daterade katalognamn måste vi naturligtvis förstärka vårt rsync-skript lite. Låt oss ta en titt på vad som krävs för att åstadkomma en sådan säkerhetskopieringslösning, och sedan förklarar vi skriptet mer detaljerat:
#! / Bin / Bash
#kopiera gammal tid.txt till tid2.txt
ja | cp ~ / backup / time.txt ~ / backup / time2.txt
#overwrite old time.txt-fil med ny tid
echo `date +”% F-% I% p ”`> ~ / backup / time.txt
#Gör loggfilen
eko “”> ~ / backup / rsync-`date + ”% F-% I% p” `.log
#rsync-kommando
rsync -avzhPR --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r --radete --stats --log-file = ~ / backup / rsync-`date + ”% F-% I% p ”` .log --exclude-from '~ / exclude.txt' --link-dest = / home / geek2 / files / `cat ~ / backup / time2.txt` -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / files / `date +”% F-% I% p ”/
# glöm inte att scp loggfilen och lägga 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 ett typiskt ögonblicksbild rsync-skript. Om vi förlorade dig någonstans, låt oss dissekera den bit för bit:
Den första raden i vårt manus kopierar innehållet i time.txt till time2.txt. Ja-röret är för att bekräfta att vi vill skriva över filen. Därefter tar vi den aktuella tiden och lägger in den i time.txt. Dessa filer kommer att vara till nytta senare.
Nästa rad gör rsync-loggfilen och ger den namnet rsync-date.log (där datumet är det faktiska datumet och tiden).
Nu är det komplexa rsync-kommandot som vi har varnat dig för:
-avzhPR, -e, --delete, --stats, --log-fil, --exclude-from, --link-dest
- Bara brytarna vi pratade om tidigare; rulla upp om du behöver en uppdatering.
--- ch är också d = zu = rwx, D go = rx, fu = rw, F go = r
- Det här är behörigheterna för målkatalogen. Eftersom vi gör den här katalogen mitt i vårt rsync-skript måste vi ange behörigheterna så att vår användare kan skriva filer till den.
Användning av datum- och kattkommandon
Vi kommer att gå igenom varje användning av datum och kattkommandon i rsync-kommandot, i den ordning de inträffar. Obs! Vi är medvetna om att det finns andra sätt att uppnå denna funktionalitet, särskilt med användning av deklarationsvariabler, men för den här guiden har vi beslutat att använda den här metoden.
Loggfilen anges som:
~ / backup / rsync-`date + ”% F-% I% p” `.log
Alternativt kunde vi ha specificerat 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`
Detta innebär att
--länk-dest
kommandot ges katalogen över 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, då
--länk-dest
kommandot letar efter katalogen som skapades klockan 14:00 och överför endast data som har ändrats sedan dess (om någon).
För att upprepa, det är därför time.txt kopieras till time2.txt i början av skriptet, så
--länk-dest
kommandot kan referera till den tiden senare.
Destinationskatalogen anges som:
[email protected]: / home / geek2 / files / `date +”% F-% I% p ”`
Detta kommando placerar 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 / `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 hamnar på rätt plats måste time.txt-filen hänvisas via cat-kommandot. Om du undrar varför vi bestämde oss för att katta time.txt istället för att bara använda datumkommandot, beror det på att mycket tid kunde ha hänt medan rsync-kommandot kördes, så för att se till att vi har rätt tid, kattar vi bara textdokumentet vi skapade tidigare.
Automatisering
Använda sig av Cron på Linux eller Aktivitetsschemaläggare i Windows för att automatisera ditt rsync-skript. En sak du måste vara försiktig med är att se till att du avslutar alla för närvarande rsync-processer innan du fortsätter med en ny. Aktivitetsschemaläggaren verkar stänga alla instanser som redan körs automatiskt, men för Linux måste du vara lite mer kreativ.
De flesta Linux-distributioner kan använda pkill-kommandot, 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!) Reservlö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 avlägsna platsen är, kan stöld och hacking alltid vara problem.
I våra exempel har vi tunnlat all vår rsync-trafik genom SSH, så det betyder att alla våra filer är krypterade medan de är på väg till deras destination. Vi måste dock se till att destinationen är lika säker. Tänk på att rsync bara krypterar dina data när de överförs, men filerna är vidöppna när de når sin 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 överföras på nytt som ett resultat av krypteringen som slumpmässigt slumpmässigt släpper ut all information efter varje ändring.
Av denna anledning är det bäst / enklast att använda någon typ av skivkryptering, t.ex. BitLocker för Windows eller dm-crypt för Linux. På det sättet är dina data skyddade 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 till och med implementerar någon form av det, till exempel Duplicity, men de saknar några av de funktioner som rsync har att erbjuda.
När du har ställt in dina ögonblicksbilds säkerhetskopior på en plats utanför platsen och krypterat dina käll- och destinationshårddiskar, ge dig själv ett klapp på baksidan för att bemästra rsync och implementera den mest idiotsäkra lösningen för säkerhetskopiering av data.