Save/Amanda

De TartareFR
Aller à la navigation Aller à la recherche

Introduction

Amanda est un système de sauvegarde de vos systèmes et vos données, sur disque, sur DVD, sur bandes et sur tout autres périphérique qu'il vous est possible de déclarer, tout en utilisant des formats largement reconnus et des mécanismes et outils standards. Les premières sources datent de Mai 2006.

Le premier point fort d'Amanda est d'utiliser des outils natifs Linux, disponibles depuis n'importe quel kernel, pour effectuer ses sauvegardes. Cela permet d'une part de pouvoir utiliser rapidement des données restaurées depuis un Linux, mais surtout d'être complètement indépendant de la plateforme Amanda, de sorte que, si un jour vous souhaitez changer de système, vous n'êtes absolument pas tenu par les formats sous lesquelles vos données ont été sauvegardées, et donc vos sauvegardes restent valides. Amanda a porté son client pour Windows, pour MacOS X et pour les purs Unix, OpenSolaris compris.

Il est également à noter que, puisqu'Amanda utilise des mécanismes de compression et de stockage standards, nous ne sommes pas tenu à un type de stockage, tant que l'on peut définir précisément ses caractéristiques telles que, par exemple, sa vitesse et sa capacité. Cette souplesse permet d'une part de pouvoir se passer d'Amanda lors de l'exploitation des données sauvegardées.

La planification d'une sauvegarde passe par un cron, lancé depuis le serveur, qui mentionne une périodicité et la commande de sauvegarde spécifique à une configuration. C'est au sein du fichier de configuration du profil que sont définis les cycles de bande, le nombre des bandes disponibles, leur type et le script associé à leur changement. La définition de ces paramètres influent sur la manière dont le serveur Amanda va décider du type des sauvegardes à faire (full, incremental, differential,...). La planification de la sauvegarde est automatiquement ajustée selon la charge du serveur.

D'habitude, les politiques de sauvegardes sont spécifiées explicitement par l'administrateur, ce qui implique notamment de dimensionner correctement les espaces de sauvegardes. Avec Amanda, la fonctionnalité existe, néanmoins, Amanda a été conçue pour pouvoir prendre automatiquement ce genre de décision. Le choix du type de backup est alors fait en fonction de plusieurs critères :

  • la taille estimée des sauvegardes en full et en incrémental
  • la date du dernier full backup
  • les règles du profil, spécifiées pour chaque partition ou sous-répertoire du système sauvegardé.

Il est également possible de définir, jusqu'au niveau fichier, une politique d'encryption, d'exclusion, de compression et de stockage.

Comme beaucoup de systèmes évolués, Amanda utilise un espace de stockage temporaire des données, le holding disk, afin de pouvoir supporter les sauvegardes parallèles et d'éviter tout problème lié à la nature même des tapes (sequential, shoe-shining). Ainsi, si, pour une raison ou pour une autre, la sauvegarde ne peut être écrite sur la tape, Amanda gardera le tout disponible sur cet espace en attendant un rétablissement de la situation. C'est pour cette raison notamment que le holding disk doit supporter au moins 2 fois la plus grosse sauvegarde en terme d'espace consommé.

Installation et configuration

Amanda ( en version 3.3.0 ) nécessite que le paquet swig soit un peu plus à jour. On doit donc avoir le dernier paquet disponible en version1 ( 1.3.40 ) pour la compilation. cette étape est obsolète car les RPM existent sur le repository b2pweb.

Test avec des vtapes ( bandes virtuelles ) en local

On va d'abord s'octroyer une partition dédiée.

# lvcreate -n amanda -L 50G vg1
# mkfs -t ext4 /dev/mapper/vg1-amanda
# mkdir /var/lib/amanda
# mount /dev/mapper/vg1-amanda /var/lib/amanda
# vim /etc/fstab
...
/dev/mapper/VolGroup00-amanda /var/lib/amanda   ext3    defaults,noatime 0 0

Comme Amanda peut travailler avec plusieurs instance, on va donc choisir d'appeler la notre nfu. Ici on ne sauvegarde que les répertoires /etc.

Sur le serveur NFU, On installe les RPM correspondant à Amanda.

# yum install amanda amanda-client amanda-server

On met l'utilisateur amandabackup dans le groupe disk et on fixe les permissions du répertoire de travail d'Amanda.

# usermod -G disk amandabackup
# chown amandabackup:disk /var/lib/amanda

On va créer les différent répertoires nécessaires, les vtapes et le holding sont communs à toutes les instances :

  • Les bandes virtuelles ( des répertoires en fait ).
  • L'emplacement de stockage temporaire ( buffer nommé holding ).
  • Le répertoire de notre instance ( nfu ) avec ses sous-répertoire :
    • curinfo : les data d'amanda à propos de chaque sauvegarde (date, statut, etc...).
    • log : les journaux de chaque sauvegarde.
    • index : les metadata des fichiers sauvegardés ( nom, dernière modification, etc …).
# su - amandabackup -c "mkdir -p /var/lib/amanda/vtapes/slot{1..6}"
# su - amandabackup -c "mkdir /var/lib/amanda/holding"
# su - amandabackup -c "mkdir -p /var/lib/amanda/nfu/{curinfo,log,index}"

Création de la configuration de notre instance en copiant celle par défaut.

cp -rp /etc/amanda/DailySet1/ /etc/amanda/nfu

On édite ensuite le fichier /etc/amanda/nfu/amanda.conf.

Nom du paramètre Valeur Commentaire
org nfu Le nom de notre instance
mailto srs@b2pweb.com L'email pour status
dumpuser amandabackup L'utilisateur qui va effectué le dump. il doit aussi être le propriétaire du répertoire /var/lib/amanda et de ses fils.
inparallel 4 Nombre de tâches effectuées en parallèle.
displayunit m Les tailles sont en Mo
netusage 8000Kbps Bande passante maximum
dumpcycle 1 weeks Durée pendant laquelle conserver les données ( on peut donc facilement retrouver un fichier datant de moins 1 semaine )
runspercycle 5 Nombre de sauvegarde durant le cycle.
tapecycle 6 tapes Nombre de bandes disponibles. doit être supérieur ou égal à (dumpcycle * runspercycle)
runtapes 1 Nombre de bande active pour la même sauvegarde.
tapedev "chg-disk:/var/lib/amanda/vtapes" Le lecteur de bande ou le répertoire des vtapes.
autolabel "NFU-%%%" empty Mettre un nom automatiquement à la bande si elle est vide.
maxdumpsize -1 Taille max de la sauvegarde (pas de max ici)
tapetype "VTAPES-NFU" Définition du type de sauvegarde.
labelstr "^NFU-[0-9][0-9]*$" Le nom de la bande doit correspondre à cette expression régulière.
holdingdisk hd1 {

    comment "main holding disk"
    directory "/var/lib/amanda/holding"
    use -100 Mb
    chunksize 1Gb
}

Définition du buffer:
  • Répertoire.
  • Taille ( taille restante sur la partition - 100Mb )
  • Taille max des morceaux de la sauvegarde.
infofile "/var/lib/amanda/nfu/curinfo" rowspan="4" C'est les répertoires qui ont été créés précédemment.
logdir "/var/lib/amanda/nfu/log"
indexdir "/var/lib/amanda/nfu/index"
tapelist "/var/lib/amanda/nfu/tapelist"
define tapetype VTAPES-NFU {

    length 3G
    filemark 100 kbytes
}

Définition des bandes virtuelles :
  • 3Go par bande.
  • Espace libre après sauvegarde doit être de 100 ko.

Extrait seulement du fichier /etc/amanda/nfu/amanda.conf

org      "nfu"
mailto   "srs@b2pweb.com"
dumpuser "amandabackup"
inparallel 4
displayunit "m"

netusage  8000 Kbps
dumpcycle 1 weeks
runspercycle 5
tapecycle 6 tapes

runtapes 1
tapedev "chg-disk:/var/lib/amanda/vtapes"
autolabel "NFU-%%%" empty
maxdumpsize -1
tapetype "VTAPES-NFU"
labelstr "^NFU-[0-9][0-9]*$"
amrecover_changer "changer"
holdingdisk hd1 {
comment "main holding disk"
directory "/var/lib/amanda/holding"
use -100 Mb
chunksize 1Gb
}
infofile "/var/lib/amanda/nfu/curinfo"
logdir   "/var/lib/amanda/nfu/log"
indexdir "/var/lib/amanda/nfu/index"
tapelist "/var/lib/amanda/nfu/tapelist"

define tapetype VTAPES-NFU {
    length 3G
    filemark 100 kbytes
}

Puis on édite le fichier /etc/amanda/nfu/disklist. C'est celui qui contient la liste des répertoires à sauvegarder par serveur.

localhost /etc comp-user-tar

On redémarre xinetd après avoir modifié le fichier /etc/xinetd.d/amanda en passant le paramètre « disable » à « no » (entre autre) :

server_args             = -auth=bsdtcp amdump amindexd amidxtaped
disable                 = no

Enfin il faut autoriser le couple utilisateur/serveur à faire des sauvegardes ( donc utiliser l'outil amdump) en éditant le fichier <path>/var/lib/amanda/.amandahosts</path>

localhost amandabackup amdump

On va maintenant tester notre configuration, mais on va d'abord permettre à l'utilisateur amandabackup d’accéder aux commandes amanda en créant le fichier /var/lib/amanda/.bash_profile:

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:/usr/sbin

export PATH

On peut donc maintenant tester la configuration :

# su - amandabackup -c "amcheck nfu"
Amanda Tape Server Host Check
-----------------------------
Holding disk /var/lib/amanda/holding: 47648 MB disk space available, using 47548 MB
slot 1: contains an empty volume
Will write label 'NFU-001' to new volume in slot 1.
NOTE: skipping tape-writable test
Server check took 0.819 seconds

Amanda Backup Client Hosts Check
--------------------------------
Client check: 1 host checked in 2.298 seconds.  0 problems found.

(brought to you by Amanda 3.3.0)

Ajout d'un client distant

Opérations sur le client

On installe le client amanda sur … un client Face-smile.png

# yum -y install amanda-client

On autorise les communications avec le serveur en éditant le fichier /var/lib/amanda/.amandahosts

nfu.b2pweb.com amandabackup
Important.png
Activation
Par défaut, Amanda n'est pas activé par défaut. Pour l'activer avec xinetd, il faut l'activer en modifiant le fichier <path>/etc/xinetd.d/amanda</path> en passant le paramètre « disable » à « no ».

On redémarre xinetd.

On teste ( on installe le paquet lsof si la commande est inconnue )

# lsof | grep amanda
xinetd     9300      root    5u     IPv4            2503423        TCP *:amanda (LISTEN)

Opérations sur le serveur

Edition du fichier <path>/etc/amanda/nfu/disklist. </path>

localhost /etc comp-user-tar
int-pub.b2pweb.com /etc comp-user-tar

On re-teste la configuration

# su - amandabackup -c "amcheck nfu"
Amanda Tape Server Host Check
-----------------------------
Holding disk /var/lib/amanda/holding: 47648 MB disk space available, using 47548 MB
slot 3: contains an empty volume
Will write label 'NFU-003' to new volume in slot 3.
NOTE: skipping tape-writable test
NOTE: host info dir /var/lib/amanda/nfu/curinfo/int-pub.b2pweb.com does not exist
NOTE: it will be created on the next run.
NOTE: index dir /var/lib/amanda/nfu/index/int-pub.b2pweb.com does not exist
NOTE: it will be created on the next run.
Server check took 0.641 seconds

Amanda Backup Client Hosts Check
--------------------------------
Client check: 2 hosts checked in 2.280 seconds.  0 problems found.

(brought to you by Amanda 3.3.0)

On lance une sauvegarde à la main ( pas nécessaire mais utile pour tester le recovery )

# su - amandabackup -c "amdump nfu"

Configuration pour le recovery

Sur le serveur, on édite le fichier /etc/amanda/nfu/amanda-client.conf

conf "nfu"
index_server "localhost"
tape_server  "localhost"
tapedev      ""
auth "bsdtcp"
unreserved-tcp-port 1025,65535

On modifie le fichier /etc/init.d/xinetd.d/amanda

fichier /etc/xinetd.d/amanda

server_args             = -auth=bsdtcp amdump amindexd amidxtaped

On redémarre le service

# /etc/init.d/xinetd restart

On autorise l'hôte distant à faire des recovery en ajoutant une ligne au fichier /var/lib/amanda/.amandahosts

didier.b2pweb.com root amindexd amidxtaped

On teste sur le client

# mkdir /tmp/recovery
# cd /tmp/recovery
# amrecover nfu -s nfu.b2pweb.com -t nfu.b2pweb.com -d ''
AMRECOVER Version 3.3.0. Contacting server on nfu.b2pweb.com ...
220 nfu AMANDA index server (3.3.0) ready.
Setting restore date to today (2012-02-16)
200 Working date set to 2012-02-16.
200 Config set to nfu.
200 Dump host set to didier.b2pweb.com.
Use the setdisk command to choose dump disk to recover
amrecover> setdisk /etc
200 Disk set to /etc.
amrecover> add aliases.db
Added file /aliases.db
amrecover> add sudoers
Added file /sudoers
amrecover> extract

Extracting files using tape drive changer on host nfu.b2pweb.com.
The following tapes are needed: NFU-003

Extracting files using tape drive changer on host nfu.b2pweb.com.
Load tape NFU-003 now
Continue [?/Y/n/s/d]? y
Restoring files into directory /tmp/test-recovery
All existing files in /tmp/test-recovery can be deleted
Continue [?/Y/n]? y

./aliases.db
./sudoers
amrecover> exit
200 Good bye.
# ll
total 20
-rw-r----- 1 root smmsp 12288 fév 13 09:53 aliases.db
-r--r----- 1 root root 4138 aoû  2  2011 sudoers

Le fichier sudoers a bien été restauré ( avec les bon droits ) ainsi que le fichier aliases.db ( bon group ).

Il est possible de déclarer le serveur d'index ( option -s ) et le serveur de bande ( option -t ), ainsi que le périphérique ( option -d ) dans le fichier /etc/amanda/nfu/amanda-client.conf ( vu que l'on se sert de l'instance nfu ).

#
# amanda-client.conf - sample Amanda client configuration file.
#
# This file normally goes in /etc/amanda/amanda-client.conf.
#

conf "ontape"           # your config name

index_server "nfu.b2pweb.com"        # your amindexd server
tape_server  "nfu.b2pweb.com"        # your amidxtaped server
tapedev      ""                 # your tape device
                        # if not set, Use configure or ask server.
                        # if set to empty string "", ask server
                        # amrecover will use the changer if set to the value
                        # of 'amrecover_changer' in the server amanda.conf.

#   auth        - authentication scheme to use between server and client.
#                 Valid values are "bsd", "bsdudp", "bsdtcp", "krb5", "local",
#                 "rsh" and "ssh".  
#                 Default: [auth "bsdtcp"]
auth "bsdtcp"

ssh_keys ""                     # your ssh keys file if you use ssh auth

#resolves "resource temporarily unavailable" bug
unreserved-tcp-port 1025,65535

Configuration avec lecteur de bandes et vtapes ( deux instances ).

En faisant tourner deux instances d'Amanda, on va cumuler les avantages des deux types de sauvegarde :

  • restauration rapide grâce à la sauvegarde sur disque
  • protection en cas de crash du serveur de sauvegarde ou du LAN.

On teste le lecteur de bande pour pouvoir le déclarer dans la configuration d'Amanda. Cette commande peut-être un peu ( beaucoup en fait ) longue.

# amtapetype -f /dev/nst0
Checking for FSF_AFTER_FILEMARK requirement
Applying heuristic check for compression.
Wrote random (uncompressible) data at 25454922.3225806 bytes/sec
Wrote fixed (compressible) data at 63128207.36 bytes/sec    
Compression: enabled
Writing one file to fill the volume.
Wrote 187062157312 bytes at 21431 kb/sec                    
Got LEOM indication, so drive and kernel together support LEOM
Writing smaller files (1870594048 bytes) to determine filemark.
define tapetype unknown-tapetype {                          
    comment "Created by amtapetype; compression enabled"
    length 182677888 kbytes
    filemark 1296022 kbytes
    speed 21431 kps
    blocksize 32 kbytes
}
# for this drive and kernel, LEOM is supported; add
#   device-property "LEOM" "TRUE"
# for this device.

Note : Il est important de relever les valeurs de 'length' et 'filemark'. C'est avec ces valeurs que nous allons définir le lecteur de bande dans le fichier amanda.conf (DELL-LT2/LT3).

On va cette fois supprimer le répertoire /var/lib/amanda/DailySet1 et ainsi obtenir cet arbre

/var/lib/amanda
├── .amandahosts
├── amandates
├── gnutar-lists
├── holding
├── ondisk
│   ├── curinfo
│   ├── index
│   └── log
├── ontape
│   ├── curinfo
│   ├── index
│   └── log
├── template.d
│   ├── advanced.conf
│   ├── amanda-harddisk.conf
│   ├── amanda-S3.conf
│   ├── amanda-single-tape.conf
│   ├── amanda-tape-changer.conf
│   ├── chg-manual.conf
│   ├── dumptypes
│   ├── README
│   └── tapetypes
└── vtapes
    ├── slot1
    └── slot2

On va donc lancer les commandes suivantes :

# su - amandabackup -c "mkdir -p /var/lib/amanda/on{tape,disk}/{curinfo,log,index}"
# su - amandabackup -c "mkdir -p /var/lib/amanda/vtapes/slot{1..2}"
# su - amandabackup -c "mkdir /var/lib/amanda/holding"
# rm -rf /var/lib/amanda/DailySet1/

Pour /etc/amanda, on va renommer « DailySet1 » en « ondisk » afin d'obtenir cet arbre :

/etc/amanda
├── crontab.sample
├── DailySet1 -> ondisk/
├── ondisk
│   ├── amanda-client.conf
│   ├── amanda-client-postgresql.conf
│   ├── amanda.conf
│   ├── chg-multi.conf
│   ├── chg-scsi.conf
│   ├── disklist
│   └── label-templates
│       ├── 3hole.ps
│       ├── 8.5x11.ps
│       ├── DIN-A4.ps
│       ├── DLT-A4.ps
│       ├── DLT.ps
│       ├── EXB-8500.ps
│       └── HP-DAT.ps
└── ontape
    ├── amanda-client.conf
    ├── amanda-client-postgresql.conf
    ├── amanda.conf
    ├── chg-multi.conf
    ├── chg-scsi.conf
    ├── disklist
    └── label-templates
        ├── 3hole.ps
        ├── 8.5x11.ps
        ├── DIN-A4.ps
        ├── DLT-A4.ps
        ├── DLT.ps
        ├── EXB-8500.ps
        └── HP-DAT.ps

Ce qui se traduit par la commande suivante :

# mv /etc/amanda/DailySet1/ /etc/amanda/ondisk

Fichier /etc/amanda/ontape/amanda.conf

org "ontape"
mailto "admin@b2pweb.com"
dumpuser "amandabackup"
inparallel 4
dumporder "sssS"
taperalgo first
displayunit "m"
netusage 8000 Kbps
dumpcycle 2 weeks
runspercycle 2
tapecycle 2 tapes
bumpsize 20 Mb
bumppercent 20
bumpdays 1
bumpmult 4
etimeout 300
dtimeout 1800
ctimeout 30
device_output_buffer_size 1280k
usetimestamps yes
flush-threshold-dumped 0
flush-threshold-scheduled 0
taperflush 0
autoflush no
runtapes 1
tapedev "tape:/dev/nst0"
autolabel "WEEKLY-NFU-%%%" empty
maxdumpsize -1
tapetype DELL-LT2
labelstr "^WEEKLY-NFU-[0-9][0-9]*$"
amrecover_changer "changer"
holdingdisk hd1 {
  comment "main holding disk"
  directory "/var/lib/amanda/holding"
  use -100 Mb
  chunksize 1Gb
}
infofile "/var/lib/amanda/ontape/curinfo"
logdir "/var/lib/amanda/ontape/log"
indexdir "/var/lib/amanda/ontape/index"
tapelist "/var/lib/amanda/ontape/tapelist"
define tapetype VTAPES-NFU {
  length 30G
# filemark 100 kbytes
}
define tapetype global {
  part_size 3G
  part_cache_type none
}
define tapetype DELL-LT2 {
  comment "Dell LT2 Tape Drive"
  length 182677888 kbytes
  filemark 1296022 kbytes
  speed 21431 kbytes
  blocksize 32 kbytes
}
#device-property "LEOM" "TRUE"

On modifie tous le champs mailto pour les scripts déclarés dans le fichier de configuration

# sed -i -e 's/property "mailto" ".*"/property "mailto" "admin@b2pweb.com"/g' /etc/amanda/ontape/amanda.conf

On créé la configuration pour les vtapes à partir de la précédente,

# cp -rp /etc/amanda/ontape /etc/amanda/ondisk

et on modifie les champs suivants dans le fichier /etc/amanda/ondisk/amanda.conf

org    "ondisk"
dumpcycle 1 weeks
runspercycle 1
tapedev "chg-disk:/var/lib/amanda/vtapes"
autolabel "VTAPES-NFU-%%%" empty
tapetype VTAPES-NFU
labelstr "^VTAPES-NFU-[0-9][0-9]*$"
infofile "/var/lib/amanda/ondisk/curinfo"
logdir   "/var/lib/amanda/ondisk/log"
indexdir "/var/lib/amanda/ondisk/index"
tapelist "/var/lib/amanda/ondisk/tapelist"
taperscan "taper_traditional"

On va définir que l'instance par défaut sera ondisk en créant un lien symbolique avec l'instance par défaut d'Amanda ( le fameux DailySet1 ).

# cd /etc/amanda
# ln -s /etc/amanda/ondisk /etc/amanda/DailySet1

On partage la liste des répertoires à sauvegarder en créant un lien ( physique, encore appelé hardlink ) entre les deux instances. ainsi la modification de l'un sera automatiquement répercutée sur l'autre.

# rm -f /etc/amanda/ondisk/disklist
# ln /etc/amanda/ontape/disklist /etc/amanda/ondisk/disklist

On va nommer notre bande pour qu'elle soit conforme à ce que l'on a renseigné dans le fichier amanda.conf, pour cela on va d'abord permettre à l'utilisateur amandabackup d'accèder aux commandes amanda en créant le fichier /var/lib/amanda/.bash_profile:

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:/usr/sbin

export PATH

On peut maintenant définir le label sur la bande.

# su - amandabackup -c 'amlabel ontape WEEKLY-NFU-001'
Reading label...
Found label 'amtapetype-1921500637', but it is not from configuration 'ontape'.
Not writing label.

La commande échoue car le label de la bande a été mis par notre précédente commande pour tester notre lecteur de bande. On va donc forcer l'opération ( avec l'option -f ).

# su - amandabackup -c 'amlabel -f ontape WEEKLY-NFU-001'
Reading label...
Found label 'amtapetype-1921500637', but it is not from configuration 'ontape'.
Writing label 'WEEKLY-NFU-001'...
Checking label...
Success!

Et enfin on test nos deux instances

# su - amandabackup -c "amcheck ontape"
Amanda Tape Server Host Check
-----------------------------
Holding disk /var/lib/amanda/holding: 41648 MB disk space available, using 41548 MB
found in slot 1: volume 'WEEKLY-NFU-001'
slot 1: volume 'WEEKLY-NFU-001'
Will write to volume 'WEEKLY-NFU-001' in slot 1.
NOTE: skipping tape-writable test
WARNING: tapecycle (2) <= runspercycle (2).
...
Server check took 0.628 seconds

Amanda Backup Client Hosts Check
--------------------------------
Client check: 3 hosts checked in 2.325 seconds.  0 problems found.

(brought to you by Amanda 3.3.0)

# su - amandabackup -c "amcheck ondisk"
Amanda Tape Server Host Check
-----------------------------
Holding disk /var/lib/amanda/holding: 57216 MB disk space available, using 57116 MB
slot 1: contains an empty volume
Will write label 'WEEKLY-NFU-001' to new volume in slot 1.
NOTE: skipping tape-writable test
WARNING: tapecycle (2) <= runspercycle (2).
Server check took 0.635 seconds

Amanda Backup Client Hosts Check
--------------------------------
Client check: 3 hosts checked in 2.321 seconds.  0 problems found.

(brought to you by Amanda 3.3.0)

On effectue le backup

# su - amandabackup -c "amdump ontape"
# su - amandabackup -c "amdump ondisk"

On configure la restauration en éditant les fichiers /etc/amanda/ontape/amanda-client.conf et /etc/amanda/ondisk/amanda-client.conf. Ils sont identiques hormis le nom de l'instance ( config name )

#
# amanda-client.conf - sample Amanda client configuration file.
#
# This file normally goes in /etc/amanda/amanda-client.conf.
#

conf "ontape"           # your config name

index_server "localhost"        # your amindexd server
tape_server  "localhost"        # your amidxtaped server
tapedev      ""                 # your tape device
                        # if not set, Use configure or ask server.
                        # if set to empty string "", ask server
                        # amrecover will use the changer if set to the value
                        # of 'amrecover_changer' in the server amanda.conf.

#   auth        - authentication scheme to use between server and client.
#                 Valid values are "bsd", "bsdudp", "bsdtcp", "krb5", "local",
#                 "rsh" and "ssh".  
#                 Default: [auth "bsdtcp"]
auth "bsdtcp"

ssh_keys ""                     # your ssh keys file if you use ssh auth

#resolves "resource temporarily unavailable" bug
unreserved-tcp-port 1025,65535

Configuration en RAIT

Le RAIT est le mirroring de la sauvegarde. Par rapport au chapitre précédent, nous allons non pas sauvegarder sur disque puis sur bande, mais sur disque ET sur bande et ce en même temps. Les clients ne seront sollicités qu'une seule fois, surtout si le holding ( buffer ) est un peu petit.

La configuration n'est pas si différente des précédentes, mais plutôt un mix des deux :

tapedev devient un meta device rait dans le fichier de configuration amanda.conf de /etc/amanda/rait :

#tapedev "chg-disk:/var/lib/amanda/vtapes"
#tapedev "tape:/dev/nst0"
tapedev "chg-rait:{tape:/dev/nst0,chg-disk:/var/lib/amanda/vtapes}"

tapetype reste celui du lecteur de bande : (attention DELL-LT3 sur le nouveau NAS sinon LT2)

tapetype DELL-LT3

et c'est tout (plus de détails sur la page suivante).

Par contre pour la restauration, il faudra préciser à partir de quel device on restaure, comme expliqué [#3.3.Restauration des données à partir d'un RAIT|outline ici].

Plus en détails, voilà comment configurer le RAIT en partant de l'environnement créé jusqu'à maintenant (exemple sur le NFU) :

# cp -rp /etc/amanda/ontape /etc/amanda/rait

Edition du fichier <path> /etc/amanda/rait/amanda.conf</path>

org      "rait"
tapedev "chg-rait:{tape:/dev/nst0,file:/var/lib/amanda/vtapes}"
#autolabel "WEEKLY-NFU-%%%" empty
infofile "/var/lib/amanda/rait/curinfo"
logdir   "/var/lib/amanda/rait/log"
indexdir "/var/lib/amanda/rait/index"
tapelist "/var/lib/amanda/rait/tapelist"
define tapetype WEEKLY-NFU {
    length 203658112 kbytes
    filemark 977 kbytes
}
define tapetype DELL-LT2 {
    comment "Dell LT2 Tape Drive"
    length 203658112 kbytes
    filemark 977 kbytes
    speed 24416 kps
    blocksize 32 kbytes
}
define tapetype global {
    part_size 3G
    part_cache_type none
}
# mv /var/lib/amanda/ontape /var/lib/amanda/rait
# mv /var/lib/amanda/ondisk /var/lib/amanda/ondisk.bak
# cd /var/lib/amanda/
# ln -s rait ondisk
# ln -s rait ontape
# ln -s rait DailySet1
# chown -R amandabackup:disk /var/lib/amanda
# rm /etc/amanda/DailySet1
# cd /etc/amanda/
# ln -s rait DailySet1

Edition du fichier <path>/etc/amanda/rait/amanda-client.conf</path>

...
conf "rait" 
...

Les liens symboliques ondisk et ontape dans /var/lib/amanda sont obligatoire, sans ça amcheck remontera une erreur :

amlabel: Could not open '/var/lib/amanda/ondisk/tapelist-new-1343913561' for writing: Aucun fichier ou répertoire de ce type at /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/Amanda/Tapelist.pm line 354.

En réalité, ces configurations sont utilisées par le rait, qui ne peux pas fonctionner seul. Il permet simplement d'unir ces deux configuration pour les exécuter simultanément.

Les deux configuration devront aussi avoir le même label pour la bande sous peine d'avoir une erreur lors du amcheck.

Problèmes courants

Pour la vérification, il y a un moyen de diviser par deux le champs de recherche de l'erreur

On lance la commande

su - amandabackup -c "amservice localhost bsdtcp noop </dev/null"
OPTIONS features=ffffffff9efefbffffffffff0f;

Si la commande amservice est un succès mais que amcheck est en erreur, le problème est dans la configuration du serveur. Sinon, le problème est sur le client.

  • Erreur « Connection reset by peer »
# su - amandabackup -c "amcheck ondisk"
WARNING: localhost: selfcheck request failed: recv error: Connection reset by peer

Il faut remettre les bons utilisateurs et permissions sur les répertoires /var/lib/amanda et /var/log/amanda, puis redémarrer le service xinetd.

# chown -R amandabackup:disk /var/lib/amanda /var/log/amanda
# /etc/init.d/xinetd restart

Enfin, il faut vérifier les fichiers /etc/hosts.allow et /etc/hosts.deny et y ajouter amanda si besoin est.

amandad: ALL
  • Beaucoup de processus [mail] defunct et la commande amcheck est très longue à rendre la main.

Vérifier/Modifier les champs « mailto » dans le fichier de configuration

Vérifier que le user « amandabackup » a le droit d'écrire sur la bande

# ll /dev/nst0
crw-rw---- 1 root tape 9, 128 13 févr. 09:50 /dev/nst0

On remarque que seul root et les membres du groupe « tape » ont le droit d'écriture sur le media.

On vérifie donc que le user « amandabackup » fait bien parti de ce groupe.

là il n'y est pas, donc on le rajoute

# id amandabackup
uid=33(amandabackup) gid=6(disk) groupes=6(disk)
# gpasswd -a amandabackup tape

Là il y est déjà

# id amandabackup
uid=494(amandabackup) gid=6(disk) groupes=6(disk),33(tape)


  • Erreur « No acceptable volumes found »
No acceptable volumes found
Insert a new volume in tape:/dev/nst0
or write the name of a new changer in '/tmp/email_input'
or write 'abort' in the file to abort the scan.

Vérifier que le volume est bien nommé

su - amandabackup -c "/usr/sbin/amlabel ontape Nas-Tape-001"
Reading label...
Found label 'amtapetype-1832694293', but it is not from configuration 'ontape'.
Not writing label.

et pour mettre le bon nom de volume ( -f pour forcer )

su - amandabackup -c "/usr/sbin/amlabel -f ontape Nas-Tape-001"

Modifier cette ligne dans le fichier amanda.conf (ontape) :

taperscan "taper_traditional" # au lieu de taper_lexical

Si ça ne suffit pas il faut inscrire les labels des bandes directement dans le fichier « tapelist »

echo -e "0 WEEKLY-NFU-001 reuse\n0 WEEKLY-NFU-002 reuse" > /var/lib/amanda/ontape/tapelist


  • Erreur « Connection refused »
# su - amandabackup -c "amcheck ondisk"
WARNING: localhost: selfcheck request failed: Connection refused

Vérification du fonctionnement du service amanda :


# netstat -a | grep amanda

Le service xinetd pour amanda est mal configuré, il faut corriger comme ceci :


# vim /etc/xinetd.d/amanda
...
# replace
        server_args             = -auth=bsdtcp amdump
        disable                 = yes
}
# by
        server_args             = -auth=bsdtcp amdump amindexd amidxtaped
        disable                 = no
}
:wq
# /etc/init.d/xinetd restart

On contrôle à nouveau le fonctionnement du service amanda :


# netstat -a | grep amanda
tcp        0      0 *:amanda                    *:*                         LISTEN
  • Erreur « Error setting block size on [../../../../../../var/lib/amanda/vtapes file:/var/lib/amanda/vtapes] » sur amcheck RAIT

Lors de la configuration du RAIT, il se peut qu'on constate cette erreur sur le 'amcheck rait'. Voici comment résoudre ce problème (ici nous avons une rotation de 3 bandes donc également 3 slots dans les vtapes) :


# su - amandabackup -c "/usr/sbin/amcheck -s rait"
Amanda Tape Server Host Check
-----------------------------
Holding disk /var/lib/amanda/holding: 47648 MB disk space available, using 47548 MB
found in slot {1,1}: Error setting block size on file:/var/lib/amanda/vtapes
slot {1,1}: Error setting block size on file:/var/lib/amanda/vtapes
 from tape:/dev/nst0: all slots have been loaded; from file:/var/lib/amanda/vtapes: all slots have been loaded
Taper scan algorithm did not find an acceptable volume.
    (expecting a new volume)
ERROR: No acceptable volumes found
Server check took 0.336 seconds
(brought to you by Amanda 3.3.1)
# rm -rf /var/lib/amanda/vtapes/slot*
# rm -rf /var/lib/amanda/vtapes/state
# rm -rf /var/lib/amanda/rait/{curinfo,log,index}/*
# rm -rf /var/lib/amanda/rait/tapelist.lock
# su - amandabackup -c "mkdir -p /var/lib/amanda/vtapes/slot{1..3}"
# su - amandabackup -c "/usr/sbin/amlabel -f ontape WEEKLY-NFU-001"
# su - amandabackup -c "/usr/sbin/amlabel -f ondisk WEEKLY-NFU-001"
# vim /var/lib/amanda/rait/tapelist
0 WEEKLY-NFU-001 reuse BLOCKSIZE:32
0 WEEKLY-NFU-002 reuse BLOCKSIZE:32
0 WEEKLY-NFU-003 reuse BLOCKSIZE:32
:wq
# cd /var/lib/amanda/vtapes/
# ln -s slot1 data
# chown -R amandabackup:disk /var/lib/amanda
# vim /etc/amanda/rait/amanda.conf
...
taperscan "taper_lexical"
...
:wq
# su - amandabackup -c "/usr/sbin/amcheck -s rait"
Amanda Tape Server Host Check
-----------------------------
Holding disk /var/lib/amanda/holding: 47656 MB disk space available, using 47556 MB
amcheck-device: TypeError Non-string in arrayref
NOTE: host info dir /var/lib/amanda/rait/curinfo/localhost does not exist
NOTE: it will be created on the next run.
NOTE: index dir /var/lib/amanda/rait/index/localhost does not exist
NOTE: it will be created on the next run.
Server check took 0.320 seconds
(brought to you by Amanda 3.3.1)
# vim /etc/amanda/rait/amanda.conf
...
taperscan "taper_traditional"
...
:wq
# su - amandabackup -c "/usr/sbin/amcheck -s rait"
Amanda Tape Server Host Check
-----------------------------
Holding disk /var/lib/amanda/holding: 47656 MB disk space available, using 47556 MB
found in slot {1,1}: Volume not labeled
slot {1,1}: Volume not labeled
 from tape:/dev/nst0: all slots have been loaded; from file:/var/lib/amanda/vtapes: all slots have been loaded
Taper scan algorithm did not find an acceptable volume.
    (expecting a new volume)
ERROR: No acceptable volumes found
NOTE: host info dir /var/lib/amanda/rait/curinfo/localhost does not exist
NOTE: it will be created on the next run.
NOTE: index dir /var/lib/amanda/rait/index/localhost does not exist
NOTE: it will be created on the next run.
Server check took 0.327 seconds
(brought to you by Amanda 3.3.1)
# su - amandabackup -c "/usr/sbin/amlabel -f ontape WEEKLY-NFU-001"
# su - amandabackup -c "/usr/sbin/amlabel -f ondisk WEEKLY-NFU-001"
# su - amandabackup -c "/usr/sbin/amcheck -s rait"
Amanda Tape Server Host Check
-----------------------------
Holding disk /var/lib/amanda/holding: 47656 MB disk space available, using 47556 MB
found in slot {1,1}: volume 'WEEKLY-NFU-001'
slot {1,1}: volume 'WEEKLY-NFU-001'
Will write to volume 'WEEKLY-NFU-001' in slot {1,1}.
NOTE: skipping tape-writable test
NOTE: host info dir /var/lib/amanda/rait/curinfo/localhost does not exist
NOTE: it will be created on the next run.
NOTE: index dir /var/lib/amanda/rait/index/localhost does not exist
NOTE: it will be created on the next run.
Server check took 0.327 seconds
(brought to you by Amanda 3.3.1)
  • Erreur « Got no header and data from server »

Cette erreur peut se présenter lors d'une opération de restauration dans un environnement RAIT, en fait cette erreur indique qu'aucun device n'a été sélectionné pour effectuer le restore. Illustration :


amrecover> extract
Extracting files using tape drive changer on host localhost.
The following tapes are needed: WEEKLY-NFU-001
Extracting files using tape drive changer on host localhost.
Load tape WEEKLY-NFU-001 now
Continue [?/Y/n/s/d]? y
Got no header and data from server, check in amidxtaped.*.debug and amandad.*.debug files on server
amrecover> setdevice file:/var/lib/amanda/vtapes/
Using tape "file:/var/lib/amanda/vtapes/".
Tape server unspecified, assumed to be localhost.
…
amrecover> extract
Extracting files using tape drive file:/var/lib/amanda/vtapes/ on host localhost.
The following tapes are needed: WEEKLY-NFU-001
Extracting files using tape drive file:/var/lib/amanda/vtapes/ on host localhost.
Load tape WEEKLY-NFU-001 now
Continue [?/Y/n/s/d]? Y
  • Lors d'un check « WARNING: skipping tape test because amdump or amflush seem to be runningWARNING: if they are not, you must run amcleanup »

Cet avertissement est affiché lors d'un amcheck si une sauvegarde est en cour, ou n'a pas été correctement terminée (plantage, kill...).

En fait, amcleanup est lancé automatiquement après amdump lors d'une sauvegarde. Mais si la commande amdump n'a pas été terminé correctement alors amcleanup n'est pas lancée et devra l'être manuellement.

Cette commande génère le rapport par mail et met à jour la base de données d'Amanda.

Pour le lancer il suffit de faire comme ceci :


su - amandabackup -c "amcleanup rait"
  • Tout les dossiers sont vides lors de la restauration depuis la bande

La dernière sauvegarde sur bande devait probablement être une sauvegarde incrémentale, qui a créée les dossiers mais ne les a pas remplie sauf pour les fichiers qui ont changés depuis la sauvegarde complète.


  • « slot X: Could not open device: File 0 not found » lors d'un changement de slot

Si ce message apparaît lors du changement du slot via la commande amtape, c'est tout simplement car c'est la première fois que l'on passe sur ce slot et qu'il ne trouve pas le fichier d'informations censé contenir le timestamp. Celui-ci sera d'ailleurs créé automatiquement par cette même commande.


Utilisation d'Amanda

L'utilisation d 'Amanda est divisé en deux parties :

  • La sauvegarde des données qui est une opération régulière et se fait avec un utilisateur dédié à la sauvegarde.
  • La restauration qui est une opération ponctuelle et qui ne peut se faire qu'avec le super-utilisateur root.

Sauvegarde des données

La liste des répertoires à sauvegarder est déjà mis en place pour chaque instance dans le fichier disklist ( /etc/amanda/NOM_DE_L_INSTANCE/disklist ).

La sauvegarde peut ( et même doit ) être en tache planifiée ( cron ) afin de s'affranchir un maximum d'une erreur humaine ( un oubli ). On va donc rajouter au crontab :

# crontab -e
### Check tape label all monday at 15:00 ( option -w to check if tape is writable )
0 15 * * 1 su - amandabackup -c "amcheck -w ontape"
### Make weekly backup ( all amanda instances )
0 22 * * 1 su - amandabackup -c "amdump ontape";su - amandabackup -c "amdump ondisk

Ou dans le cas du rait pour la sauvegarde journalière :

# crontab -e
30 23 * * 1-5 su - amandabackup -c "/usr/sbin/amdump rait ; /usr/sbin/amtape ondisk slot next 1>/dev/null"

On remarquera la deuxième commande "amtape" qui permet de passer sur le slot suivant automatiquement, ce qui est bien utile quand on a une cassette différente par jour.

Forcer la sauvegarde complète ou incrémentale

Par défaut Amanda gère seule les niveau de backup.La seule contrainte qu'elle ait est de devoir faire au moins un backup complet (full) par semaine.Le problème c'est que l'on ne sait pas quand elle le fait (ou plutôt quand elle va le faire).

Il y a la possibilité néanmoins de définir le niveau de backup que l'on souhaite. Par exemple une sauvegarde complète le lundi et des sauvegardes incrémentales le reste de la semaine.L'avantage est que l'on a la main sur les sauvegardes, et que l'on peut restaurer facilement un fichier datant du jour de la semaine que l'on veut.Pour ça il va falloir définir la stratégie lors de la commande amdump. On doit aussi lier celle-ci au dumptype utilisé (il sera donc préférable d'utiliser le même dumptype pour toutes les sauvegardes).

Par exemple, en utilisant le dumptype compt-root-tar, on peut définir une sauvegarde complète comme ceci :

su - amandabackup -c "/usr/sbin/amdump rait -o DUMPTYPE:comp-root-tar:strategy=noinc"

Et une sauvegarde incrémentale comme ceci :

su - amandabackup -c "/usr/sbin/amdump rait -o DUMPTYPE:comp-root-tar:strategy=nofull"

D'après les tests effectués, la sauvegarde incrémentale réalisée de cette manière sera toujours de niveau 1, ce qui veut dire que pour restaurer entièrement la sauvegarde il faudra uniquement deux bandes, la full et la dernière incrémentale, celle-ci contenant toutes les données modifiées depuis la full (de niveau 0 donc).

Restauration des données

Dans l'exemple suivant, l'exercice consiste à restaurer le fichier /etc/sudoers, ainsi que le répertoire /etc/amanda.

On créé le répertoire ou l'on va récupérer nos fichiers restaurés

# mkdir -p /tmp/restore
# cd /tmp/restore

On se connecte au client Amanda

# amrecover ondisk -s localhost -t localhost -d 
AMRECOVER Version 3.3.0. Contacting server on localhost ...
220 nfu AMANDA index server (3.3.0) ready.
Setting restore date to today (2012-02-21)
200 Working date set to 2012-02-21.
200 Config set to ontape.
501 Host nfu.b2pweb.com is not in your disklist.
Trying host nfu.b2pweb.com ...
501 Host nfu.b2pweb.com is not in your disklist.
Trying host nfu ...
501 Host nfu is not in your disklist.
Trying host nfu.b2pweb.com ...
501 Host nfu.b2pweb.com is not in your disklist.
Use the sethost command to choose a host to recover
amrecover>

Ici le client n'arrive pas à trouver de sauvegarde pour l'hôte nfu.b2pweb.com. c'est normal car il est sauvegardé en tant que localhost. On va donc lui préciser cela.

amrecover> sethost localhost
200 Dump host set to localhost.
amrecover>

On va lui faire afficher tous les répertoires sauvegardés pour l'hôte courant.

amrecover> listdisk
200- List of disk for host localhost
201- /etc
201- /home/audrey
201- /home/aurore
201- /home/bastien
201- /home/benoit
201- /home/cecile
201- /home/charline
201- /home/christophe
201- /home/gaelle
201- /home/gilles
201- /home/gillesdev
201- /home/gilles-p4
201- /home/nadege
201- /home/sebastien
201- /home/virginie
201- /home
200 List of disk for host localhost
amrecover>

On choisi donc la sauvegarde /etc

amrecover> setdisk /etc
200 Disk set to /etc.
amrecover>

On affiche les fichiers et dossiers dans la sauvegarde.

amrecover> ls
2012-02-20-14-03-12 yum/
…
2012-02-20-14-03-12 printcap
amrecover>

On spécifie que l'on veut restaurer : le fichier sudoers et le répertoire amanda

amrecover> add sudoers
Added file /sudoers
amrecover> add amanda
Added dir /amanda/ at date 2012-02-20-14-03-12
amrecover>

On vérifie dans quel répertoire courant on est afin de ne pas écrasé ce qui existe déjà

amrecover> lpwd
/tmp/restore
amrecover>

On est dans /tmp/restore, on peut donc extraire les données qui nous intéresse.

amrecover> extract

Extracting files using tape drive changer on host localhost.
The following tapes are needed: WEEKLY-NFU-001

Extracting files using tape drive changer on host localhost.
Load tape WEEKLY-NFU-001 now
Continue [?/Y/n/s/d]?y
Restoring files into directory /tmp/restore
All existing files in /tmp/restore can be deleted
Continue [?/Y/n]? y

./sudoers
./amanda/crontab.sample
./amanda/DailySet1
…
amrecover>

On peut quitter le système de restauration

amrecover> exit
200 Good bye.

L'aide en ligne est obtenu en tapant « help » ou « ? » à l'invitation de commande.

amrecover> help
valid commands are:

add path1 ...     - add to extraction list (shell wildcards)
addx path1 ...    - add to extraction list (regular expressions)
cd directory      - change cwd on virtual file system (shell wildcards)
cdx directory     - change cwd on virtual file system (regular expressions)
clear             - clear extraction list
delete path1 ...  - delete from extraction list (shell wildcards)
deletex path1 ... - delete from extraction list (regular expressions)
extract           - extract selected files from tapes
exit
help
history           - show dump history of disk
list [filename]   - show extraction list, optionally writing to file
lcd directory     - change cwd on local file system
ls                - list directory on virtual file system
lpwd              - show cwd on local file system
mode              - show the method used to extract SMB shares
pwd               - show cwd on virtual file system
quit
listhost          - list hosts
listdisk [diskdevice]              - list disks
listproperty                       - list property
setdate {YYYY-MM-DD|--MM-DD|---DD} - set date of look
        {YYYY-MM-DD-HH-MM-SS}      - set date of look
setdisk diskname [mountpoint]      - select disk on dump host
sethost host                       - select dump host
setdevice [[-h host] device]       - select tape server and/or device
setproperty [append] [priority] name [value ...] - set a property
setmode smb|tar                    - select the method used to extract SMB shares

Restauration des données à partir d'un RAIT

On peut choisir le device de restauration. La restauration depuis un vtape est quasiment immédiate, alors que depuis une bande, cela peut être largement plus long.

On spécifie ce paramètre grâce à la commande setdevice

  • setdevice file:/var/lib/amanda/vtapes/, sans oublier le dernier « / »
  • setdevice tape:/dev/nst0

Restauration du fichier /etc/sudoers depuis un vtape

# amrecover rait -s newnas.b2pweb.com -t newnas.b2pweb.com
AMRECOVER Version 3.3.1. Contacting server on newnas.b2pweb.com ...
220 newnas AMANDA index server (3.3.1) ready.
Setting restore date to today (2012-05-15)
200 Working date set to 2012-05-15.
200 Config set to rait.
200 Dump host set to didier.
Use the setdisk command to choose dump disk to recover
amrecover> setdevice file:/var/lib/amanda/vtapes/
Using tape "file:/var/lib/amanda/vtapes/".
Tape server unspecified, assumed to be newnas.b2pweb.com.
amrecover> setdisk /etc
200 Disk set to /etc.
amrecover> add sudoers
Added file /sudoers
amrecover> extract

Extracting files using tape drive file:/var/lib/amanda/vtapes/ on host newnas.b2pweb.com.
The following tapes are needed: Nas-Tape-001

Extracting files using tape drive file:/var/lib/amanda/vtapes/ on host newnas.b2pweb.com.
Load tape Nas-Tape-001 now
Continue [?/Y/n/s/d]? y
Restoring files into directory /home/didier/tmp/amanda
All existing files in /home/didier/tmp/amanda can be deleted
Continue [?/Y/n]? y

./sudoers
amrecover> exit
200 Good bye.

Restauration du fichier /etc/sudoers depuis la bande

# amrecover rait -s newnas.b2pweb.com -t newnas.b2pweb.com
AMRECOVER Version 3.3.1. Contacting server on newnas.b2pweb.com ...
220 newnas AMANDA index server (3.3.1) ready.
Setting restore date to today (2012-05-15)
200 Working date set to 2012-05-15.
200 Config set to rait.
200 Dump host set to didier.
Use the setdisk command to choose dump disk to recover
amrecover> setdevice tape:/dev/nst0
Using tape "tape:/dev/nst0".
Tape server unspecified, assumed to be newnas.b2pweb.com.
amrecover> setdisk /etc
200 Disk set to /etc.
amrecover> add sudoers
Added file /sudoers
amrecover> extract

Extracting files using tape drive tape:/dev/nst0 on host newnas.b2pweb.com.
The following tapes are needed: Nas-Tape-001

Extracting files using tape drive tape:/dev/nst0 on host newnas.b2pweb.com.
Load tape Nas-Tape-001 now
Continue [?/Y/n/s/d]? y
Restoring files into directory /home/didier/tmp/amanda
All existing files in /home/didier/tmp/amanda can be deleted
Continue [?/Y/n]? y

./sudoers
amrecover> exit
200 Good bye.

Restauration sans les outils Amanda

Amanda utilise des outils génériques du système Unix/Linux, on peut donc facilement restaurer une sauvegarde avec ces outils si l'on ne dispose pas des outils Amanda.

Restauration à partir du disque

mkdir /tmp/recovery && cd /tmp/recovery
cp /var/lib/amanda/vtapes/slot1/* .
ls -l
-rw------- 1 root root   32768 août  3 09:56 00000.WEEKLY-OLDNFU-001
-rw------- 1 root root 6193152 août  3 09:56 00001.localhost._etc.0

Ici on a une seule sauvegarde, mais si on en avait plusieurs alors il faudrait les restaurer une par une (ou faire une boucle).

Pour extraire les données du fichier, nous allons utiliser la commande « dd ». En sortie, nous aurons une archive au format tar.gz que nous décompressseront à la volée.

On va d'abord créer un dossier pour y stocker les données histoire que ce ne soit pas tout en bordel :

mkdir /tmp/recovery/etc

Puis on restaure :

tar -xvzfp - -C /tmp/recovery/etc/

Confirmation :

ls -l /tmp/recovery/etc
total 2140
drwxr-xr-x  4 root root    4096 juil. 27 16:15 acpi
-rw-r--r--  1 root root      46 juil. 30 14:06 adjtime
-rw-r--r--  1 root root    1512 avril 25  2005 aliases
-rw-r-----  1 root smmsp  12288 juil. 30 14:08 aliases.db
drwxr-xr-x  2 root root    4096 août  3 10:04 alternatives
drwxr-xr-x  5 root root    4096 août  3 10:04 amanda
-rw-r--r--  1 root root     298 mars 28  2007 anacrontab
(...)

Maintenant si on voulais juste récupérer l'archive au format tar.gz il faudrait faire comme ceci :

dd if=00001.localhost._etc.0 bs=32k skip=1 > etc.tar.gz

A partir de là, l'archive est utilisable comme n'importe qu'elle archive tar.gz.

Restauration à partir de la bande

On s'assure tout d'abord que la bande est rembobiné :

mt -f /dev/nst0 rewind

On peut voir le status :

mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=0, block number=0, partition=0.
Tape block size 512 bytes. Density code 0x42 (LTO-2).
Soft error count since last status=0
General status bits on (41010000):
 BOT ONLINE IM_REP_EN

Ensuite on se positionne sur le bloc que l'on veut restaurer :

mt -f /dev/nst0 fsf 1

Attention, le numéro 1 ne correspond pas forcément au numéro de bloc, il indique simplement que l'on se déplace d'un bloc en avant à partir du bloc courant.

C'est pour cela qu'il vaut mieux rembobiner la bande chaque fois, pour être sûr d'être sur le bon bloc.

N.B. Le numéro de bloc correspond au numéro de l'archive, c'est à dire au positionnement de la sauvegarde dans la disklist.

Par exemple, dans ma disklist j'ai ça :

localhost /etc comp-root-tar
localhost /home comp-root-tar

Et dans mes vtapes j'ai ça :

ll /var/lib/amanda/vtapes/data/
-rw------- 1 amandabackup disk      32768 août  3 13:10 00000.WEEKLY-OLDNFU-001
-rw------- 1 amandabackup disk    6193152 août  3 13:11 00001.localhost._etc.0
-rw------- 1 amandabackup disk 1927151616 août  3 13:17 00002.localhost._home.0

Dans ce cas là, le bloc 0 correspond à l'entête, le bloc 1 correspond à la sauvegarde de /etc, et le bloc 2 à la sauvegarde de /home.

Donc si on avait voulu restaurer le /home, on se serait positionné sur le bloc 2 (en ayant rembobiné avant) :

mt -f /dev/nst0 fsf 2

Si le bloc n'existe pas, la commande renverra une erreur :

mt -f /dev/nst0 fsf 10
/dev/nst0: Input/output error

reculer d'un bloc avec la commande suivante :

mt -f /dev/nst0 bsfm 1

Une fois que l'on est positionné, on peut restaurer :

dd if=/dev/nst0 bs=32k skip=1 > etc.tar.gz

On peut bien évidemment décompresser directement l'archive à la volée comme pour la restauration depuis la disque ci-dessus.

On peut sinon utiliser la commande fournie par Amanda pour restaurer et décompresser la sauvegarde à la volée, ça reviens au même :

dd if=/dev/nst0 bs=32k skip=1 | /bin/gzip -dc | /bin/tar -xpGf -

Utilisation de amflush

Amflush permet de faire redescendre sur bande le trop plein de données dans la holding.

En effet lors d'une sauvegarde il arrive qu'il n'y ait pas assez de place sur la bande pour tout sauvegarder.

A ce moment là, Amanda laissera le trop plein dans le dossier /var/lib/amanda/holding/ et affichera un message dans le rapport par mail indiquant de lancer amflush.

Cela peut aussi arriver lorsqu'il y a un problème d'accès à la bande ou n'importe quelle problème qui aurait pu empêcher la sauvegarde sur bande.

Amflush va effectuer les mêmes actions que amdump à l'exception qu'il ne sauvegardera que ce qui est présent dans la holding.

Pour lancer amflush il faudra d'abord passer à la bande suivante, puis une fois terminé il faudra encore passer à la suivante. La commande mettra à jour la base de données et les timestamp dans la tapelist comme lors d'une sauvegarde normale.

Donc lorsque le mail de rapport Amanda affichera ça :

There are 2330M of dumps left in the holding disk.
Run amflush to flush them to tape.

Il faudra changer la bande et lancer la commande suivante :

su - amandabackup -c "amflush rait" 

Ce qui donnera comme résultat (exemple)

Today is: 20120806
Flushing dumps from 20120806115056 to tape drive "chg-rait:{tape:/dev/nst0,file:/var/lib/amanda/vtapes}".
Expecting a new tape.  (The last dumps were to tape WEEKLY-OLDNFU-001)
Are you sure you want to do this [yN]? y
Running in background, you can log off now.
You'll get mail when amflush is finished.

A noter que l'on peut préciser le timestamp des données que l'on souhaite faire redescendre sur la bande avec l'option -D.

Annexes

Améliorations

Lors de l'affichage, amrestore utilise la variable globale du shell pour définir l'afficheur, qui est « more » par défaut. Il est intéressant de le remplacer par « less ». Cette ligne peut aussi être ajouter au fichier « ~/.bashrc » afin de s'affranchir de l'export à chaque nouvelle session.

# export PAGER=less

Compression matérielle (ou pas)

Les dérouleurs de bande modernes possèdent un module de compression des données afin d’augmenter la capacité apparente des bandes. Mais AMANDA est aussi capable de comprimer les données au niveau de chaque client, ce qui a plusieurs avantages : - la compression logicielle est souvent meilleure en terme de taux de compression (gzip, bzip2,...) que celle effectuée par le dérouleur mais est aussi plus lente ; - seules les données comprimées passent sur le réseau et donc la pression est moindre ; - lors de la planification AMANDA connaît le taux de compression effectif pour chaque partition et peut mieux remplir les bandes avec moins de risque de débordement.

De plus, dans la documentation Amanda, il est précisé qu'il n'est pas bon d'utiliser les deux compression matérielle/logicielle en même temps :

When you enable software compression, you drastically reduce the compression that might be achieved by hardware. In fact, tape drives will usually use more tape if you tell them to try to further compress already compressed data.

Pour voir l'état de la compression matérielle des bandes LTO il faut procéder comme ceci :

# yum install mtx
# tapeinfo -f /dev/sg3
Product Type: Tape Drive
Vendor ID: 'IBM     '
Product ID: 'ULTRIUM-HH3     '
Revision: 'B6W1'
Attached Changer: No
SerialNumber: '1068011763'
MinBlock:1
MaxBlock:8388608
SCSI ID: 0
SCSI LUN: 0
Ready: yes
BufferedMode: yes
Medium Type: 0x38
Density Code: 0x44
BlockSize: 0
DataCompEnabled: yes
DataCompCapable: yes
DataDeCompEnabled: yes
CompType: 0x1
DeCompType: 0x1
BOP: yes
Block Position: 0

Ici on voit que la compression est activée :

DataCompEnabled: yes
DataCompCapable: yes

N.B. Il faut tester tout les périphériques sgX pour trouver celui qui correspond à la bande, les autres concernant les autres périphériques SCSI.

Désactiver la compression :

[root@newnas ~]# mt -f /dev/st0 compression 0
[root@newnas ~]# tapeinfo -f /dev/sg3 | grep DataCompEnabled
DataCompEnabled: no

Activer la compression :

[root@newnas ~]# mt -f /dev/st0 compression 1
[root@newnas ~]# tapeinfo -f /dev/sg3 | grep DataCompEnabled
DataCompEnabled: yes

On peut également voir l'état de la compression grâce aux outils Amanda :

amtapetype -c -f /dev/nst0
Checking for FSF_AFTER_FILEMARK requirement
Applying heuristic check for compression.
Wrote random (uncompressible) data at 25885108.4590164 bytes/sec
Wrote fixed (compressible) data at 63159664.64 bytes/sec
Compression: enabled

Cela dit la commande prend quand même 3 bonnes minutes à s'exécuter...

Liens

  • Wiki de l'outil en anglais[1]
  • Tutorial en français[2]
  • Howto du site gentoo.linuxhowtos.org, en anglais[3]

Fichier de configuration amanda.conf pour le rait

# amanda.conf - sample Amanda configuration file. See amanda.conf(5) for 
# details

org      "rait"
mailto   "srs@b2pweb.com"
inparallel 4
dumporder "sssS"
taperalgo first
displayunit "m"
netusage  8000 Kbps
dumpcycle 1 weeks
runspercycle 5
tapecycle 5 tapes
bumpsize 20 Mb
bumppercent 20
bumpdays 1
bumpmult 4

etimeout 300
dtimeout 1800
ctimeout 30
device_output_buffer_size 1280k
usetimestamps yes
flush-threshold-dumped 0
flush-threshold-scheduled 0
taperflush 0
autoflush no
runtapes 1
tapedev "chg-rait:{tape:/dev/nst0,chg-disk:/var/lib/amanda/vtapes}"
autolabel "Nas-Tape-%%%" empty
maxdumpsize -1
tapetype DELL-LT3
labelstr "^Nas-Tape-[0-9][0-9]*$"
amrecover_changer "changer"
holdingdisk hd1 {
    comment "main holding disk"
    directory "/var/lib/amanda/holding"
    use -100 Mb
    chunksize 1Gb
    }
infofile "/var/lib/amanda/rait/curinfo"
logdir   "/var/lib/amanda/rait/log"
indexdir "/var/lib/amanda/rait/index"
tapelist "/var/lib/amanda/rait/tapelist"
define tapetype VTAPE {
  length 80G
  filemark 100 kbytes
}

define tapetype DELL-LT3 {
    comment "Created by amtapetype; compression enabled"
    length 415955904 kbytes
    filemark 1649 kbytes
    speed 77157 kps
    blocksize 32 kbytes
}
taperscan "taper_traditional"