Backup med rdiff-backup

Här kan du dela med dig av dina bästa tips och knep.
Kategoriregler
Här ligger de utförliga instruktionerna vi kan tänkas behöva. Leta här om du tex behöver installera nåt program eller sätta upp någon funktion. Starta inte trådar utan att ha ett svar.
zoombywoof
Inlägg: 202
Blev medlem: 27 nov 2006, 16:14
OS: Kubuntu
Ort: Stockholm

Backup med rdiff-backup

Inlägg av zoombywoof »

Denna guide visar hur man kan få igång ett smidigt sätt att ta backup med hjälp av rdiff-backup.
Rdiff-backup "speglar" en eller flera kataloger till en "spegel" katalog. Denna spegel uppdateras inkrementellt för varje backup man tar. Rättigheter, länkar, timestamps i filerna bevaras.
Rdiff spar alla förändringar man gör, dvs man kan få tillbaka grejer från forntiden om man önskar. Man kan se på rdiff-spegeln som en hink man öser sina grejer i, men också förändringarna sparas undan.
Fördelen med att ta backup på detta sätt är att restore blir så himla enkelt, backupen ligger där som filer i ett helt vanligt filsystem. Nackdelen (om man tycker det är en nackdel) är att spegeln tar minst lika mycket plats som den katalog som backas av. Om du har inte har plats, utan måste komprimera hårt,eller bara har t.ex bandstation som enda alternativ som backup media, då kan du sluta läsa nu, rdiff är inget för dig. Om du däremot har plats på någon disk i ditt nätverk, och vill enkelt kunna göra restore, ja då är rdiff det smidigaste jag hittat hitills.
Denna guide visar rdiff-backup på 2 sätt. En klient-maskin använder sig av ssh, den andra av NFS.

Servern

Min server kör Ubuntu-server (dapper) och den har en disk i sig som jag i princip bara använder för backup. Servern NFS exporterar backup katalogen, och jag har följande struktur där:
    rdiff/hostA
    rdiff/hostB
   
En gång i månaden bränner jag ut backupen på en DVD.

Ok, nog snackat, hur gör man då ?

Först, se till att rdiff-backup är installerat på både server och klienter.
root@burk> apt-get update
root@burk> apt-get install rdiff-backup
   
hostA
Denna maskin använder sig av NFS och kör rdiff i ett cronjobb som root, vilket innebär att servern måste nfs exportera backup katalogen med 'no_root_squash'. 3 kataloger backas av, /home, /etc + /var/www. På servern kommer dessa 3 att dyka upp som :
    rdiff/hostA/home
    rdiff/hostA/etc
    rdiff/hostA/var_www

script:

Kod: Markera allt

#!/bin/bash
TARGETS="/home /etc /var/www"
REMOTEBASE=/backup/rdiff/hostA
VERBOSITY="5"
TERMINAL_VERBOSITY="3"
VERBOSE="--verbosity ${VERBOSITY} --terminal-verbosity ${TERMINAL_VERBOSITY}"
OPTS="--print-statistics"

for target in $TARGETS
do
  echo "rdiff ${target}..."
  filtered_target=`echo $target | sed -r -e 's,(^/)(.*),\2,g' | sed -e s,/,_,g`
  rdiff-backup ${VERBOSE} ${OPTS} ${target} ${REMOTEBASE}/${filtered_target}
done

echo "Rdiff Backup done"
Klart!

hostB
Denna exempel använder sig av ssh, och visar hur man kan få till automatisk backup med ssh-inloggning.
Samma sak här, scriptet kör som ett cronjobb av root, men backupen kommer att hamna på servern med användaren 'user' som ägare till spegeln. Först måste vi fixa några saker.
   
på hostB:
    1. Skapa en ssh-nyckel för root utan passphrase
      # ssh-keygen -t rsa (tryck enter på alla frågor inklusive passphrase)
    2. Kopiera över den publika nyckeln till servern
   
På servern:
    1. Om inte användaren 'user' finns, skapa. Skapa sen följande katalog:
    rdiff/hostB/user, med user som ägare
    2. Se till att användaren 'user' tillåts logga in via ssh
    3. Lägg in root's publika nyckel från hostB i 'user' authorized_keys
      root#> su - user
      user$> cd ~/.ssh (skapa om inte finns)
      user$> cat 'hostB-root-publika nyckelfilen' >> authorized_keys
   
Nu är vi redo att testa. Om allt går bra kommer backupen att dyka upp på servern som :
    rdiff/hostB/user/home_user
    rdiff/hostB/user/opt_mitt_stuff
   
script:

Kod: Markera allt

#!/bin/bash
TARGETS="/home/user /opt/mitt/stuff"
SSHKEY="/root/.ssh/id_rsa"
REMOTEHOST=server
REMOTEUSER=user
REMOTEBASE=/backup/rdiff/hostB/user
VERBOSITY="5"
TERMINAL_VERBOSITY="3"
SCHEMA="ssh -i ${SSHKEY} -C %s rdiff-backup --server"
VERBOSE="--verbosity ${VERBOSITY} --terminal-verbosity ${TERMINAL_VERBOSITY}"
OPTS="--print-statistics"

for target in $TARGETS
do
  echo "rdiff ${target}..."
  filtered_target=`echo $target | sed -r -e 's,(^/)(.*),\2,g' | sed -e s,/,_,g`

  rdiff-backup --remote-schema "${SCHEMA}" ${VERBOSE} ${OPTS} ${target} ${REMOTEUSER}@${REMOTEHOST}::${REMOTEBASE}/${filtered_target}
done

echo "Rdiff Backup done"
Klart! Observera att alla parametrar till rdiff-backup kommandot ska vara på samma rad...

Det här var 2 exempel på hur man kan använda rdiff-backup. Finns säkert fler...:-)

Återgå till "Guider"