"Time Machine" backup via. rSync (mac/linux)

KUN GUIDER OG TUTORIALS HER! - Har du en teknik du ønsker at indvie andre i? Selve billedtagningsprocessen, efterbehandlingen - eller begge dele? Så post din guide her, og inspirér andre ved at vise os hvordan du gjorde!
Besvar
Brugeravatar
Esben Sørensen
Rang: ELITEBRUGER
Rang: ELITEBRUGER
Indlæg: 3035
Tilmeldt: 07 nov 2011 20:21 pm
Kamera: Analog + digital Nikon SLR og Yashica Electro
Kontakt:
Galleri: Se brugergalleri

"Time Machine" backup via. rSync (mac/linux)

Indlæg af Esben Sørensen » 06 jan 2017 00:09 am

Hej

Jeg har lovet i en anden tråd at fortælle lidt om hvordan man laver en Mac OS eller Linux baseret backup server, som alternativ til Apple Time Capsule og Time Machine. Bemærk, dette er ikke en guide til at sætte en Linux server op som en slags time capsule (selvom dette ikke er umuligt) og metoden virker ikke hvis computeren du arbejder på kører Windows. Hvis du kører Windows, så kan du lige så godt springe denne guide over… :)

Jeg bruger selv metoden på en Mac, men hvis arbejdsstationen er en Linux baseret PC vil det også fungere.

Guiden er skrevet ud fra hukommelsen og jeg har forsøgt at skære det lidt ud i pap for at flest muligt kan have glæde af den. Hvis det viser sig jeg har glemt noget vil jeg naturligvis gerne hjælpe til senere… :)

Klargøring af serveren:
Mac:
Hvis din server kører Mac OS behøver du ikke klargøre andet end at lave mappen hvori der skal tages backup til og sikre dig at brugeren der skal tage backup har skriveadgang til den pågældende mappe. Dvs. serveren skal have oprettet en lokalbruger der har adgang til mappen. Ikke noget med netværksdeling. Du kan dog med fordel oprette en bruger der er identisk med brugeren på din arbejdsstation.

Linux:
Jeg vil ikke gå meget i dybden med selve installationen af Linux. Der findes allerede talrige guides til dette på nettet. Jeg anbefaler en lille installation af Debian uden grafisk brugerflade, eller andet gejl.

Under installationen vil du formegentligt blive bedt om at oprette en bruger og jeg anbefaler brugeren har samme login navn (det korte navn) som det du bruger på din arbejdsstation. På den måde behøver du ikke specificere dit brugernavn hver gang du logger ind (med ssh elle rsync). Hvis du ikke kender dit korte brugernavn, så gå til Terminal.app og skriv “whoami”.

Kode: Vælg alt

es@MacBookPro:~$ whoami
es
Mit login er altså “es”.

Guide
Det anbefales altid at starte med en helt friskinstalleret og opdateret pc eller mac første gang denne guide følges. Du skal bruge root login på Debian for at det virker:

1. Opdatering (gælder kun Debian)
2. Installation af rsync (gælder kun Debian).
3. Oprettelse af backup sti og instilling af brugerrettigheder (gælder kun Debian).
4. Installation af netatalk (Apple fildeling) og Samba (Windows fildeling) (gælder kun Debian).
5. Generering af ssh nøgle og installation af denne på arbejdsstation.
6. Opsætning af script til backup.
7. Specificere hvad der ikke skal tages backup af.
8. Test
9. Opstart af script via. genvejstast.
10. Online backup over internettet.

Al aktivitet på serveren (Debian) foregår som root.

1. Opdatering
Skriv følgende:

Kode: Vælg alt

apt-get update

Kode: Vælg alt

apt-get upgrade
2. Installation af rsync:
Jeg ved ikke om rsync som standard er installeret sammen med Debian. Ellers er det ret nemt at installere:

Kode: Vælg alt

apt-get install rsync
Hvis rsync allerede er installeret får du bare det at vide…

3. Oprettelse af backup sti og instilling af brugerrettigheder.
Det er nu tid til at bestemme hvor din backup skal være gemt. Hvis backup skal foretages på en bestemt harddisk skal du først lige sikre dig hvilken sti den er “mounted” i. Du ser de ved brug af df kommandoen. Hos mig ser det således ud:

Kode: Vælg alt

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       7.2G  792M  6.1G  12% /
devtmpfs        483M     0  483M   0% /dev
tmpfs            98M  392K   97M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           195M     0  195M   0% /run/shm
/dev/mmcblk0p1   48M   21M   28M  43% /boot
tmpfs           195M     0  195M   0% /tmp
/dev/sdb1       1.8T  1.5T  304G  83% /Volumes/Backup1
/dev/sda1       1.8T  1.4T  398G  78% /Volumes/Backup2
Som det ses har jeg to stk. harddiske tilsluttet min Raspberry Pi, som hhv. er mounted i /Volumes/Backup1 (og 2).

Hvis din harddisk ikke er på listen er det fordi de ikke er inkluderet i fstab. I så fald bliver du nødt til at sætte det op selv. Der ligger en fin guide til dette her: https://community.linuxmint.com/tutorial/view/1513
Stien harddisken skal mountes i skal oprettes på forhånd ved brug af mkdir kommandoen. I mit tilfælde:

Kode: Vælg alt

mkdir -p /Volumes/Backup1
Du bestemmer selv hvor harddisk skal mountes, jeg har valgt rodmappen /Volumes, da det er hvor alle harddisk mountes i Mac OS.

Vi laver også lige en undermappe til selve backuppen:

Kode: Vælg alt

mkdir /Volumes/Backup1/backup
Det er den sidste mappe du skal sikre dig brugeren har skrive adgang til. Den nemmeste måde er at ændre mappens ejerskab så den tilhører den pågældende bruger. Dette gøres med chown kommandoen. I mit tilfælde:

Kode: Vælg alt

chown es:es /Volumes/Backup1/backup
Nu er mappen klar til brug.

4. Installation af netatalk (Apple fildeling) og Samba (Windows fildeling).
For let adgang til backuppen bruger jeg almindelig fildeling. Jeg har sat min server op så den uden problemer kan tilgås fra både mac og windows.
Dette skulle være ret lige til. Igen skal vi have fat i apt-get kommandoen:

Kode: Vælg alt

apt-get install netatalk samba
Derefter kommer opsætningen, som er lidt mere kompliceret.

Netatalk:
Netatalk konfigurationen ligger i mappen /etc/netatalk. Tag først lige en sikkerhedkopi af denne mappe.

Kode: Vælg alt

 cp -r /etc/netatalk /etc/netatalk.backup
Nu, da du har sikret dig din standardkonfiguration kan du gå igang med at sætte netatalk op efter dit behov. Dette gøres med en standard teksteditor.

Kode: Vælg alt

nano /etc/netatalk/AppleVolumes.defaults
Brug piletasterne til at flytte markøren helt nederst i filen. På den nederste linje tilføres stien til backup mappen og nogen flag. Hos mig:

Kode: Vælg alt

/Volumes/Backup1/backup “backup" allow:es dperm:0550 fperm:0440 umask:7007 options:ro
Ret brugeren efter “allow”, så den passer til dig.
Det sidste flag “options:ro” gør mappen skrivebeskyttet via. Apple fildeling. Dette er med vilje, da jeg mener det er sikrest. Da backuppen ikke foregår over fildeling er det ikke noget problem.
Gem filen med CTRL+o og afslut nano med CTRL+x
Genstart nu netatalk:

Kode: Vælg alt

/etc/init.d/netatalk restart
Kontroller på din Mac at det virker ved at checke om serveren dukker op i Finder. Du skulle være i stand til at tilgå din backup mappe, men lige i øjeblikket er den tom.

Samba:
Samba konfigurationen tager vi også lige en kopi af:

Kode: Vælg alt

cp -r /etc/samba /etc/samba.backup
Derefter åbner vi smb.conf med nano:

Kode: Vælg alt

nano /etc/samba/smb.conf
Igen skal vi nederst i filen lave vores tilføjelser. Hos mig:

Kode: Vælg alt

[backup]
	comment= backup
	path=/Volumes/Backup1/backup
	browseable=Yes
	read only=yes
	only guest=no
	create mask=0777
	directory mask=0777
	public=no
Gem filen med CTRL+o og afslut nano med CTRL+x
Genstart Samba:

Kode: Vælg alt

/etc/init.d/samba restart
Forsøg om du kan se serveren og tilgå mappen, evt. fra en windows computer.


Serveren skulle nu være klar til brug og vi fortsætter med

5. Generering af ssh nøgle og installation af denne på arbejdsstation.
For at backup kan forløbe automatisk skal der bruges en ssh nøgle. Desværre har jeg lidt svært ved at huske dette, men jeg har fundet en lille guide til det på nettet der burde fungere: https://www.digitalocean.com/community/ ... sh-keys--2
Jeg anbefaler dog “step four” springes over, da det root login uden password ikke er ret smart.
I Debian genstartes ssh ikke som i guiden, men således:

Kode: Vælg alt

/etc/init.d/ssh restart
Afprøv om nøglen fungerer ved at logge på serveren fra din arbejdsstation:

Kode: Vælg alt

ssh 192.168.1.37
192.168.1.37 er den lokale ip til min server. Hvis du kan logge dig på uden at skulle skrive adgangskode fungerer nøglen som den skal. Log derefter af ved at trykke ctrl+d

6. Opsætning af script til backup
Jeg ønsker personligt at min backup kører i baggrunden, men jeg vil gerne selv være herre over hvornår den skal starte via. en global genvejstast. På Mac ordnes dette nemmest ved brug af Automator.app.
Billede
a. Opret en ny Tjeneste.
b. Ændre “Tjeneste modtager” drop ned menuen til “ingen input” i “alle programmer”.
c. Søg efter “Start shell-instruks” og træk den over i højre side af vinduet.
d. Indstil “Shell” til “/bin/sh” i den kasse der kommer frem.
e. Fjern teksten “cat” fra skriveruden.
f. Indsæt følgende script i skriveruden:

Kode: Vælg alt

date=`date "+%Y-%m-%dT%H_%M_%S"`
HOME=/Users/es      # stien til den lokale bruger
HOST=backup.domæne.dk     # intast server adresse eller IP her
PORT=22    # standard ssh port er 22. Hvis der benyttes en anden port skal tallet her ændres

# Alt nedenfor skal ikke ændres. Scriptet vil køre i ring indtil backup er afsluttet korrekt.

echo `date "+%Y-%m-%d %H:%M:%S"` - Starting backup $date. >> ~/logs/backup_short.log

for ((STATUS=1;STATUS>0;))
do
		 
	        rsync -azP \
                --delete \
                --delete-excluded \
                --exclude-from=$HOME/.rsync/exclude \
                --link-dest=../current \
                -e "ssh -p $PORT" $HOME $HOST:backup/incomplete_back-$date \
                >> ~/logs/backup_long.log \
                && ssh -p $PORT $HOST "mv backup/incomplete_back-$date backup/back-$date \
                && rm -f backup/current \
                && ln -s back-$date backup/current"
        if [ $? -eq 0 ]; then
                STATUS=0
		echo `date "+%Y-%m-%d %H:%M:%S"` - Backup $date complete. >> ~/logs/backup_short.log 
        else
                STATUS=1
                echo `date "+%Y-%m-%d %H:%M:%S"` - Backup $date failed. Waiting 60 seconds before trying again... >> ~/logs/backup_short.log
                sleep 60
                echo `date "+%Y-%m-%d %H:%M:%S"` - Resuming backup $date. >> ~/logs/backup_short.log
        fi
STATUS=0  ### MIDLERTIDIG!!!
done
Billede
g. Tilret linje 2, 3 og 4, så de passer med din opsætning.
h. Gem tjenesten som “Backup” og lad Automator stå åben. Vi skal bruge det om lidt til den første test.

Automators arbejdsgange genererer desværre ikke anden feedback end et lille tandhjul der drejer i menu linjen indtil scriptet er kørt til ende. Derfor har jeg lavet scriptet så det spytter nogen logfiler ud som lagres i mappen “logs” i brugerens hjemmebibliotek. Den mappe skal vi lige oprette. Gør det med Finder.

7. Specificere hvad der ikke skal tages backup af.
Scriptet tager backup af brugerens hjemmebibliotek. Nogen ting kan eksluderes og det skal vi lige fortælle rsync. Derfor skal vi have gang i Terminal.app en gang til.
Opret mappen .rsync (. foran navnet gør filen eller mappen skjult):

Kode: Vælg alt

mkdir ~/.rsync
naviger ind i mappen:

Kode: Vælg alt

cd ~/.rsync
Opret filen “exclude”:

Kode: Vælg alt

touch exclude
Rediger exclude:

Kode: Vælg alt

nano exclude
Skriv nu en liste over de mapper der skal springes over. Min vil ser således ud:

Kode: Vælg alt

dropbox
Downloads
Google*
Dropbox
.Trash
Desktop
Library
Kort sagt eksluderer jeg alle mapper hvor jeg ikke gemmer vigtig data. Jeg har oplevet at rsync ikke er glad for mellemrum, men det klares ved at sætte “wildcard” efter det første ord i mappens navn. Eksempelvis Google* (Google Drive). Evt. kan du til en start ekskludere de største mapper, så testen i næste trin hurtigere løber til ende.

8. Test
Så er det tid til at teste, men før der trykkes på play i Automator skal vi lige sørge for at vi kan følge med i log filen. Da scriptet endnu ikke har kørt skal vi dog oprette logfilen manuelt via. Terminal.app:

Kode: Vælg alt

touch ~/logs/backup_long.log
Vi bruger nu programmet tail til at følge med i hvad der skrives til filen.

Kode: Vælg alt

tail -f ~/logs/backup_long.log
Markøren springer nu helt ud til venstre og alt hvad der skrives til log filen vises nu løbende i terminalen. Vi er klar til at trykke på play knappen i Automator. Følg med i Terminalen imens den første backup tages. Kryds fingre!

Når backupen er ført til ende skulle du gerne kunne se resultatet i den delte mappe. Mapperne er daterede og hver mappe repræssenterer hvordan dit hjemmebibliotek så ud på det tidspunkt backup løg til korrekt til ende. Ufuldstendige eller fejlslagne sikkerhedskopier begynder med “incomplete” og disse ignoreres ved fremtidig backup. Du kan gå “tilbage i tiden” nøjagtigt som med Time Machine, men uden den flotte brugerflade (til gengæld går det meget hurtigere”.

Hvis testen forløb korrekt, så sæt en havelåge foran næst nederste linje i scriptet ovre i Automator.

Kode: Vælg alt

# STATUS=0  ### MIDLERTIDIG!!!
Gem igen.

9. Opstart af script via. genvejstast.
Forhåbentligt forløb testen korrekt og vi er nu klar til sidste trin.
Din nye tjeneste finder du i programmenuen (til højre for æblet på menu bjælken) under “Tjenester”. Du kan starte din backup herfra, men vi vil gerne have den til at starte via. en genvejstast. Derfor skal du nu åbne “Systemindstillinger”.
Gå ind i “Tastatur” og vælg så fanen “Genveje”. Under kategorien “Tjenester” skulle du finde dit nye script og så er det ellers bare at tilføje en tastaturgenvej til den.
Billede
Genvejstasten er global, men jeg mener den sættes ud af drift hvis den forreste app bruger samme genvejstast til noget andet.

10. Online backup over internettet.
Det sidste vi skal gøre er at sætte routeren op til at forwarde port 22 (ssh porten) til serveren. Dette gøres i routerens konfiguration og det kan jeg naturligvis ikke forklare ret meget om, da alle routere er forskellige. Læs routerens manual, hvor det bør stå beskrevet.
Hvis du er heldig at have en fast IP, så kan du angive den i dit script, men ellers skal du bruge en dynamisk dns udbyder. Der findes flere gratis udbydere og jeg bruger selv duckdns: https://www.duckdns.org

Held og lykke og god fornøjelse! Jeg hjælper gerne til hvis det (når) ikke virker! :)

Mvh. Esben

Edit: Jeg retter løbende guiden til hvis jeg finder fejl.
Saving money is expensive...
http://500px.com/esopix

Besvar