Enkel backup med rsync lokalt och över SSH
Introduktion till rsync
Av alla tusentals verktyg för backup är rsync det kanske mest kraftfulla. Som namnet antyder används rsync (”remote sync”) för att synkronisera filer mellan en lokal dator och en fjärrdator/server. Det går dock utmärkt att synkronisera även lokala filer och kataloger. Programmet kan synkronisera filer i båda riktningarna, alltså både från en fjärrdator och till en fjärrdator. Då rsync körs över SSH skickas också datan krypterat över nätet, en extra trygghet om det rör sig om känslig data.
För att rsync ska fungera krävs att programmet är installerat på båda datorerna som ska synkroniseras. rsync finns tillgängligt till de flesta operativsystem och plattformar:
- Linux – installerat som standard i mer eller mindre alla distributioner (Debian, Red Hat, Ubuntu, Fedora, etc..)
- Mac OS X – installerat som standard. Dock till synes en äldre/begränsad version. Mer info och senare version här.
- BSD – FreeBSD/OpenBSD/NetBSD – tillgängligt i portsträdet: net/rsync
- Windows – Installeras antingen genom Cygwin eller programmen cwrsync och DeltaCopy
Vad skiljer då rsync från vanlig kopiering mellan två kataloger? Jo, rsync skickar endast differensen mellan de två katalogerna! Det innebär att första gången rsync körs kommer programmet kopiera filerna precis som vanligt. Nästa gång rsync körs mellan samma kataloger kommer rsync att söka igenom båda katalogerna, analysera skillnaderna, komprimera datan och sedan skicka endast det som skiljer. På så vis minimeras trafiken över nätverket, vilket är helt avgörande när stora mängder data behöver synkroniseras.
I följande exempel använder vi rsync för att kommunicera med en server över en säker SSH-förbindelse. Programmet rsync kan också kommunicera med en särskild rsync-server (rsync daemon). Det är i regel dock inte nödvändigt annat än i undantagsfall, varför detta lämnas utanför den här introduktionen. För den som vill veta mer finns mer informtion här och här.
Trots att programmet är är fyllt av valmöjligheter är det inte särskilt svårt att göra en enkel backup. Många av de grafiska program som finns för att hantera backuper i Linux använder också rsync bakom kulisserna.
Använda rsync
Syntaxen för rsync-kommandot ser förenklat ut som följer:
rsync /originalkatalog /målkatalog
Om ena katalogen ligger på en server/fjärrdator anger vi också det
rsync /originalkatalog mittanvändarnamn@minserver:/målkatalog
/originalkatalog innehåller förstås de filer vi vill ta en backup på och /målkatalog den katalog som vi vill ska synkroniseras med originalkatalogen. Användarnamn ”mittanvändarnamn” och servern ”minserver” byts förstås ut mot de uppgifter du har för att logga in på din server med SSH. Du kommer sedan att tilfrågas om lösenordet för ditt användarnamn.
Användbara växlar
För att ställa in exakt hur rsync ska sköta synkroniseringen mellan katalogerna använder vi några av de många växlar (parametrar) som programmet accepterar som argument. Listan över tillgängliga växlar är för lång för att listas här men finns förstås i rsyncs manual. Några av de mest användbara är:
-a
Anger att rsync ska arkivera katalogen. Det innebär kortfattat att rsync dels arbetar rekursivt, d.v.s. i alla underkataloger (kan också anges med -r) och att även metadata sparas i målkatalogen. Det innebär att inte endast filerna kopieras utan även information kring dem, så som när de senast ändrades, ägar- och grupp-information samt tillstånd (permissions) för filerna. Använd alltid denna växel om du vill bevara kataloger och filer precis så som de såg ut i originalkatalogen.
-z
Anger att rsync ska skicka datan i komprimerad form.
-vv
Anger att rsync ska skriva ut detaljer (verbose) för varje fil som kopieras. Användbart om du vill följa utveckligen steg för steg. Ta bort om du använder rsync från ett skript.
--progress
Anger att rsync ska visa exakt vilka framsteg som görs vid filkopiering. Användbart främst då mycket stora filer ska flyttas och du behöver en visuell bekräftelse på framsteg (visas i %) och hastighet (kB/MB/s). Ta bort om du använder rsync från ett skript.
--delete
Anger att rsync ska ta bort filer i målkatalogen som inte finns i originalkatalogen. Detta för att de båda katalogerna ska spegla varandra exakt.
--log-file=loggfil.txt
Anger att rsync ska spara detaljerna för överföringen i loggfilen ”loggfil.txt”. Användbart om rsync körs från skript och du senare vill kontrollera resultatet.
rsync för lokal backup
Med ovanstående växlar färskt i minnet är vi redo att göra en första backup med rsync, i det här exemplet mellan två kataloger på den lokala datorn:
rsync -azvv --progress /var/www /home/andy/wwwbackup
Ovanstående kopierar innehållet i katalogen /var/www till katalogen /home/andy/wwwbackup
Första gången rsync körs kommer alla filer att kopieras. Nästa gång kommer endast nya filer och de ändringar som gjorts på befintliga filer att kopieras.
rsync för backup över SSH
I det här exemplet gör vi en backup från en fjärrdator/server med rsync över en säker SSH-förbindelse. Kommandot är i princip identiskt med det vi använde för att kopiera lokalt med den skillnaden att vi lägger till en extra växel:
-e ssh
Med växeln -e anger vi vilket skal vi vill använda. I vårt fall förstås SSH. Utöver det behöver vi berätta vilken server vi vill kopiera till/från samt vilket användarnamn vi ska använda för inloggning.
rsync -azvv --progress -e ssh /var/www andy@lonewolfmedia.se:/var/www
Ovanstående kopierar innehållet i den lokala katalogen /var/www till katalogen /var/www på servern lonewolfmedia.se som vi loggar in på med den fiktiva användaren ”andy”. Det går förstås lika bra att synka i motsatt riktning, alltså från servern till en lokal katalog:
rsync -azvv --progress -e ssh andy@lonewolfmedia.se:/var/www /var/www
Sammanfattning
Ovanstående är tänkt som en snabb introduktion till rsync. Viktigast med alla former av backup är förstås dock inte hur man gör det utan att man gör det! I ett kommande inlägg kommer vi kolla på hur vi använder oss av crontab för att automatiskt köra rsync vid valda tidpunkter. Hade du användning för guiden eller frågor på ovanstående, använd kommentarsfältet nedanför!



