Traduction(s) : Català - English - Francais

duplicity és una eina molt útip per crear còpies de seguretat remotes sense assistència. Le còpies de seguretets poden ser inclrementals, xifrades, i en diversos transports. Aquí hi ha un exemple de la configuració per fer còpies de seguretat a diversos directoris de forma remota. Altres utilitzar eines com ara backupninja amb el mateix propòsit.

És convenient dividir les còpies de seguretat per directoris, com ara /etc, /var/lib/dpkg or /var/spool. Aquests script generara petites còpies de seguretat per uns directoris que es definiran després en BACKDIRS. La màquina remota contindrà el següent arbre de directory en LPATH:

localmachine/etc/
localmachine/var/lib/dpkg
localmachine/var/spool
...

and the commands we will run from localmachine will look like this: el els comandaments que eixiran a la màquina local tindran aquest aspecte:

duplicity --encrypt-key AE45AE12 --sign-key AE45AE12 \
  remove-older-than 2W /var/spool \
  scp://babar@remotehostname//home/babar/duplic/localmachine/var/spool

and then to remove the old backups:

duplicity --encrypt-key AE45AE12 --sign-key AE45AE12 \
  remove-older-than 2W \
  scp://babar@remotehostname//home/babar/duplic/localmachine/var/spool

Primer necessites saber de quins directoris faràs la còpia de seguretat a la teua màqina. Un mínim reduït per reconstruir la instalació podria ser /etc i /var/lib/dpkg, llavors la el volum pot canviar molt. Pensa sobre això dues vegades, comproveu dos vegades la mida que cap i la mida que tingueu al vostre servidor. Com variarà la mida al llarg del temps? Quant de temps voleu conservar les còpies de seguretat més antigues?

Ací nosaltres mantindrem una antiguitat de dues setmanes, amb una còpia de seguretat sensera cada setmana i una còpia de seguretat incremental de forma diària.

Crea les claus ssh i gpg

$ su
# apt-get install duplicity keychain
 [...]
# ssh-keygen -t dsa
 [...]
# gpg --gen-key
 [...]
# umask 077
# touch /root/backup.sh /root/.duplicity.conf
# chmod u+x /root/backup.sh
# ls -la /root/backup.sh /root/.duplicity.conf
-rwx------  1 root root 0 2006-01-16 06:47 /root/backup.sh
-rw-------  1 root root 0 2006-01-16 06:47 /root/.duplicity.conf

Ara tindràs:

localmachine:~# gpg --list-secret-keys
/root/.gnupg/secring.gpg
------------------------
sec   1024D/AE45AE12 2005-08-26 [expires: 2016-08-26]
uid                  Backup signature (localmachine) <root@localmachine>
ssb   2048g/AE45AE12 2005-08-26

# ls -la /root/.ssh
total 16
drwx------  2 root root   54 2006-01-14 01:30 .
drwxr-xr-x 13 root root 4096 2006-01-16 07:48 ..
-rw-------  1 root root 1264 2006-01-13 21:30 id_dsa
-rw-r--r--  1 root root 1113 2006-01-13 21:30 id_dsa.pub

A la màquina remota, l'usuari que fem servir podrà rebre les còpies de seguretat creades així:

# apt-get install scponly
# adduser --disabled-password --shell /usr/bin/scponly babar
# getent passwd babar
babar:x:1002:1002:,,,:/home/babar:/usr/bin/scponly

Exemple d'arxiu d'script de duplicity

Pimer, l'arxiu script corre les còpies de seguretat: /root/backup.sh

# uncomment for debug
#set -x

. /root/.duplicity.conf

# duplicity command
DUPEXEC="duplicity --encrypt-key $ENCRKEY --sign-key $SIGNKEY $DUPOPTS $*"
# loop on directories
echo -n "---- Incremental backup of $HOSTNAME ---- "; date
for i in $BACKDIRS
do
  echo Starting backup of directory /$i
  # create directory, then backup, then erase old backups
  $MKDIR $LPATH/$i && $DUPEXEC /$i $RPATH/$i && $DUPEXEC $DUPOPTS_CLEANUP $RPATH/$i
  # verify backup integrity
  #$DUPEXEC --verify $RPATH/$i /$i
done
#  if local, fix permissions
if [ -z $HOST ]; then chown -R $NAME.$NAME $LPATH; fi
echo -n "---- Finished backup on $HOSTNAME ---- "; date

Exemple de configuració

Edita i completa l'arxiu /root/.duplicity.conf (XXXX haurà de ser reemplaçat):

# path to backup to
LPATH=/home/babar/XXX/$HOSTNAME

## 1. remote settings
# remote host
HOST=remotehostnameXXX
# remote login (user for backup on server)
NAME=babarXXX
# send over ssh
RPATH=scp://$NAME@$HOST/$LPATH

## 2. local settings (use another disk!)
# remote host *empty*
#HOST=
# user name to change ownership too to
#NAME=babar
# RPATH now uses file://
#RPATH=file://$LPATH

# complete with root gpg signature and encryption key
SIGNKEY=XXXXXXXX
ENCRKEY=$SIGNKEY
# yes, we need to store the gpg pass phrase in clear somewhere
export PASSPHRASE='XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

# local list of directories to backup
BACKDIRS='etc var/lib/dpkg var/log var/mail usr/local/XXX'

# full '/' backup setting
#BACKDIRS=/
#DUPOPTS='--exclude /proc --exclude /mnt --exclude /tmp'

# duplicity options (backup.sh also accepts command line arguments)
DUPOPTS=
# cleanup (really needs --force)
DUPOPTS_CLEANUP="remove-older-than 2W"
# exclude patterns
#DUPOPTS="$DUPOPTS --exclude **/pictures/XXX"

# load ssh agent info using keychain
[[ -f /root/.keychain/$HOSTNAME-sh ]] && \
       source /root/.keychain/$HOSTNAME-sh

export GNUPGHOME=/root/.gnupg

if [ -z $HOST ]; then
  MKDIR="mkdir -p"
else
  MKDIR="ssh $NAME@$HOST mkdir -p"
fi

Testejant l'script

Afegiu el seguiment de la vostra localmachine:/root/.bashrc

keychain --nogui --clear id_dsa
. ~/.keychain/$HOSTNAME-sh

i torna a iniciar la sessió com a root. Hauràs de escriure la contrasenya ssh.

Les noves claus ssh necessiten ser instal·lades al server (és a dir, afegiu el contingut de localmachine:/root/.ssh/id_dsa.pub dins remotemachine:/home/babar/.ssh/authorized_keys (-rw-------) ), i el directori LPATH creat.

Llavors intenta correr l'script:

# /root/backup.sh
---- Incremental backup of localmachine ---- Mon Jan 16 06:49:25 GMT 2006
Starting backup of directory /home/barfoo
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1137394351.70 (Mon Jan 16 06:52:31 2006)
EndTime 1137394838.14 (Mon Jan 16 07:00:38 2006)
ElapsedTime 486.44 (8 minutes 6.44 seconds)
SourceFiles 26330
SourceFileSize 677134571 (646 MB)
NewFiles 4185
NewFileSize 125189830 (119 MB)
DeletedFiles 0
ChangedFiles 1
ChangedFileSize 2190 (2.14 KB)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 4186
RawDeltaSize 99926952 (95.3 MB)
TotalDestinationSizeChange 45211649 (43.1 MB)
Errors 0
-------------------------------------------------

No old backup sets found, nothing deleted.
---- Finished backup on localmachine ---- Mon Jan 16 07:00:57 GMT 2006

El set -x línia potser descomentada per recuperar l'script.

Guardant les claus

Ara que el teniu funcionant, hauràs de fer una còpia de seguretat de la clau, fora de la màquina a còpia de seguretat i des de l’emmagatzematge de còpia de seguretat remota. En algn lloc segur, com ara una pendrive USB.

Now you have it working, you will need to backup the key, away from the machine to backup and from the remote backup storage. Somewhere safe, such as a usb key:

$ cd /media/usbdisk
$ sudo tar zcvf root-$HOSTNAME.tar.gz /root

És possible que també haureu d’emmagatzemar la frase de contrasenya ssh a prop d’ella.

Perquè la màquina remota sigui més segura, també haureu de configurar l'script de l'usuari de còpia de seguretat de manera explícita.

Fent-ho automàticament

Podeu ara córrer l'script manualment amb:

$ sudo /root/backup.sh

(you will need to add the ssh key to keychain after a reboot).

Per a crear una còpia de seguretat sensera, afegir l'assenyalador --full. Per suprimir les còpies de seguretat antigues, usa --force.

Afegeig-ho a cron:

$ sudo crontab -e

i posa algun nom:

# m h  dom mon dow command
33 23  *   *   1-6   /root/backup.sh
# full backup every sunday, deleting old ones
33 23  *   *   7     /root/backup.sh --full --force

Més informació

Més saber més, man duplicity, o llegeix manual online a duplicity webpage

Mira també el paquet duply.


CategorySoftware | CategorySystemAdministration | ?CategoryBackup