Säkerhetskopiering över nätverk

Från Unix.se, den fria unixresursen.

När man installerat och konfigurerat sitt system och samlat på sig viktiga filer i sin hemkatalog vill man inte gärna råka ut för en diskkrasch eller att av "misstag" skriva rm -rf /. Därför bör man ha ett fungerande säkerhetskopieringssystem. Den här artikeln kommer att handla om olika sätt att säkerhetskopiera till en server på nätverket. Eftersom stora hårddiskar är så billiga jämfört med bandstationer är det ett bra alternativ för säkerhetskopiering.

Innehåll

Metoder

tar/cpio/afio/pax

Tara ner filerna och skicka dem till en annan dator. Väldigt enkelt men inte särskilt praktiskt. Man kan också tara ner filerna, skicka dem genom en pipe till ssh och tara upp dem på servern.

$ tar -c /home/erkki |ssh erkki@spock tar -x

NFS

Använd cp eller cpio i passthru-läge. Tyvärr är förbindelsen inte krypterad.

Samba

Liknar NFS men använder Microsofts protokoll SMB.

rsync

Använder rsh/ssh eller ett eget protokoll för överföring av filer. Om en fil redan finns så överför rsync bara skillnaderna mellan den nya och gamla versionen, därför är rsync väldigt bandbreddssnålt. Med ssh som transportlager är rsync väldigt säkert.

rdiff-backup

Använder ssh som transportlager. Rdiff-backup liknar rsync väldigt mycket men använder sig av inkrementella säkerhetskopior, vilket innebär att man kan återskapa gamla versioner av filerna.

En viktig sak när det gäller säkerhetskopiering är att det ska vara automatiserat. Därför har jag skrivit två enkla skript som säkerhetskopierar en hemkatalog över nätverket till en server.

Skripten

Jag har skrivit två skript som i huvudsak gör samma sak men på lite olika sätt. Det ena skriptet använder rsync och ssh för att överföra filerna, det andra använder sig av rdiff-backup. Fördelen med rdiff-backup är att det sparar diffar för att kunna återskapa äldre versioner av filerna, men det gör också rdiff-backup långsammare. Ibland är snabbheten viktigast och för sådana tillfällen använder jag mig av rsync-skriptet.

Servern

Som lagringsplats för säkerhetskopiorna kan vilken dator som helst användas, bara den uppfyller följande krav:

  • Servern måste ha tillräckligt med lagringsutrymme för att kunna lagra säkerhetskopiorna. Tänk också på att eftersom rdiff-backup sparar diffar för att kunna återställa äldre versioner av filer så kommer säkerhetskopiorna att ta större plats.
  • sshd (Secure shell deamon) måste vara installerat och igång.
  • Rsync, rdiff-backup eller båda installerat.

Både rsync och rdiff-backup använder en hel del cputid när de beräknar skillnaderna mellan filerna, därför beror överföringshastigheten på processorn.

Rdiff-backup

Skriptet kallas backup.home.rdiff och är ganska självförklarande. Det man måste tänka på är att rdiff-backup alltid kopierar innehållet i en katalog även om namnet inte slutar på /.

$ rdiff-backup foo bar
$ rdiff-backup foo/ bar/

Båda raderna kopierar innehållet i foo till bar.

$ rdiff-backup foo bar/foo/

Ovanstående rad kopierar innehållet i foo till katalogen bar/foo/, alltså den kopierar hela katalogen, vilket är lämpligt i säkerhetskopieringssammanhang.

#!/bin/sh
# backup.home.rdiff
# -
# Script that uses rdiff-backup to backup a directory to a backup server,
# but can also be used to back up to a local disk if $dest is a local pathname
# -
# Copyright(c) 2002, Erik Rigtorp All rights reserved.
# Licensed under the BSD license
# Erik Rigtorp <erkki@linux.nu>

# Directory to back up
src=$HOME

# Destination directory
dest=erkki@spock::backup/workstation/$USER

# List of files to exclude
# The format of this file differs between rsync and rdiff-backup
excludes=$HOME/.backupexcludes

opts="--exclude-filelist=${excludes} -v5"
rdiff-backup ${opts} ${src} ${dest}

Rsync

Skriptet kallas för backup.home.rsync och är också det ganska självförklarande. Rsync har en lite annorlunda syntax med sökvägar.

$ rsync -av src/bar /data/tmp

Kopierar hela mappen src/bar till /data/tmp.

$ rsync -av src/bar/ /data/tmp

Kopierar innehållet i src/bar till /data/tmp.

#!/bin/sh
# backup.home.rsync
# -
# Script that uses rsync to backup a directory to a backup server, but can
# also be used to back up to a local disk if $dest is a local pathname
# -
# Copyright(c) 2002, Erik Rigtorp All rights reserved.
# Licensed under the BSD license
# Erik Rigtorp <erkki@linux.nu>

# Directory to back up
src=$HOME

# Destination directory
dest=erkki@spock:backup/workstation/

# List of files to exclude
# The format of this file differs between rsync and rdiff-backup
excludes=$HOME/.backupexcludes

opts="--rsh ssh --force --ignore-errors --delete-excluded
      --exclude-from=${excludes} --delete --archive --verbose"

rsync ${opts} ${src} ${dest}

Exkludera oönskade filer

En del filer är onödiga att säkerhetskopiera, t.ex. temporära filer och låsfiler. Rsync och rdiff-backup har lite olika syntax för den här filen. Rsync tillåter att man har olika mönster och reguljära uttryck i den här filen men rdiff-backup tillåter bara vanliga sökvägar.

Filen ~/.backupexcludes:

$HOME/tmp
$HOME/.Xauthority
$HOME/.xsession-errors
$HOME/.galeon/mozilla/galeon/Cache
$HOME/.gconfd
$HOME/.ssh-agent
$HOME/.ssh-agent-csh
$HOME/.bash_history
$HOME/.nautilus/thumbnails/

Andra förslag

$HOME/.thumbnails
$HOME/.mozilla/firefox/*/Cache

Kommentarer

Självklart bör man läsa man-sidorna för rsync och rdiff-backup samt modifiera skripten efter sina egna behov. Om man vet att man har datorn på vissa tider eller hela dygnet så kan man skapa ett enkelt cronjobb som sköter säkerhetskopieringen. För att maximalt säkra säkerhetskopiorna så bör servern vara avstängd den mesta tiden. Det är också trevligt om serverns disk sitter i ett hårddiskrack så att man enkelt kan ta med sig disken och låsa in den i ett kassaskåp/valv.

Personliga verktyg