Ce chapitre vous guidera à travers les étapes nécessaires pour exécuter Bacula. Pour cela, nous supposons que vous avez installé Bacula, peut être dans un simple répertoire comme le décrit le chapitre précédent, auquel cas vous pouvez exécuter Bacula sans être root pour ces tests. Nous supposons d'autre part que vous n'avez pas modifié les fichiers de configuration. Dans le cas contraire, nous vous recommandons de désinstaller Bacula et de le réinstaller sans rien modifier. Les exemples de ce chapitre utilisent les fichiers de configuration par défaut, et créent les volumes dans le répertoire /tmp de votre disque. De plus, les données sauvegardées seront celle du répertoire des sources de Bacula où vous l'avez compilé. Par conséquent, tous les daemons peuvent être exécutés sans les droits root pour ces tests. Notez bien qu'en production, vos File Daemons devront être exécutés en tant que root. Voyez le chapitre sur la sécurité pour plus d'informations sur ce sujet.
Voici les étapes que nous suivrons :
Chacune de ces étapes est décrite en détail ci-dessous.
Avant d'utiliser Bacula pour la première fois en production, nous vous recommandons d'exécuter la commande test du programme btape ainsi qu'il est décrit dans le chapitre Programmes utilitaires de ce manuel. Ce programme vous aidera à vous assurer que votre lecteur de bandes fonctionne correctement avec Bacula. Si vous avez un lecteur moderne de marque HP, Sony, ou Quantum DDS ou DLT qui fonctionne sous Linux ou Solaris, vous pouvez probablement vous dispenser de faire ce test car Bacula est bien testé avec ces lecteurs et ces systèmes. Dans tous les autres cas, vous êtes fortement encouragé à exécuter les tests avant de poursuivre. btape dispose aussi d'une commande fill qui tente de reproduire le comportement de Bacula lorsqu'il remplit une cartouche et qu'il poursuit son écriture sur la suivante. Vous devriez songer à faire ce test, sachez cependant qu'il peut être long (environ 4 heures sur mon lecteur) de remplir une cartouche de haute capacité.
Si vous utilisez MySQL ou PostgreSQL pour votre catalogue Bacula, vous devez démarrer la base de données avant d'essayer de lancer un job pour éviter d'obtenir des messages d'erreur au démarrage de Bacula. J'utilise les scripts startmysql et stopmysql pour démarrer mon MySQL local. Notez que si vous utilisez SQLite, vous n'aurez pas à utiliser startmysql ou stopmysql. Si vous utilisez ceci en production, vous souhaiterez probablement trouver un moyen pour démarrer automatiquement MySQL ou PostgreSQL après chaque redémarrage du système.
Si vous utilisez SQLite (c'est à dire, si vous avez spécifié l'option
--with-sqlite=xxx de la commande ./configure, vous n'avez rien à faire.
SQLite est démarrée automatiquement par Bacula.
Que vous ayez compilé Bacula depuis les sources ou que vous ayez installé les rpms, tapez simplement :
./bacula start
dans votre répertoire d'installation pour démarrer les trois daemons.
Le script bacula lance le Storage Daemon, le File Daemon et le Director Daemon, qui tournent tous trois en tant que daemons en tâche de fond. Si vous utilisez la fonction de démarrage automatique de Bacula, vous pouvez, au choix, lancer les trois daemons lors du démarrage, ou au contraire les lancer individuellement avec les scripts bacula-dir, bacula-fd, et bacula-sd usuellement situés dans /etc/init.d, bien que leur localisation effective soit dépendante du système d'exploitation.
Notez que seul le File Daemon a été porté sur les systèmes Windows, et qu'il doit être démarré différamment. Veuillez consulter le chapitre La version Windows de Bacula de ce manuel.
Les paquetages rpm configurent les daemons pour qu'ils s'exécutent en tant qu'utilisateur root et en tant que groupe bacula. Le processus d'installation rpm se charge de créer le groupe bacula s'il n'existe pas sur le système. Tout utilisateur ajouté au groupe bacula hérite de l'accès aux fichiers créés par les daemons. Pour modifier ce comportement, éditez les scripts de démarrage des daemons :
puis redémarrez-les.
Le chapitre installation de ce manuel indique comment installer les scripts de démarrage automatique des daemons.
Pour communiquer avec le Director et pour s'enquérir de l'état de Bacula ou de jobs en cours d'exécution, tapez simplement :
./bconsole
dans le répertoire de plus haut niveau.
Si vous avez installé la console GNOME et utilisé l'option --enable-gnome
de la commande configure, vous pouvez aussi utiliser la console GNOME en tapant :
./gnome-console
Vous pouvez aussi utiliser le programme wxWidgets bwx-console.
Pour simplifier, nous ne décrirons ici que le programme ./bconsole. La plus grande partie de ce qui est décrit ici s'applique aussi aux programmes ./gnome-console et bwx-console.
La commande ./bconsole lance le programme Console, qui se connecte au Director. Bacula étant un programme réseau, vous pouvez utiliser la Console depuis n'importe quelle machine de votre réseau. Cependant, la plupart du temps le Console est exécutée sur la même machine que le Director. En principe, la Console devrait produire un affichage similaire à :
[kern@polymatou bin]$ ./bconsole Connecting to Director lpmatou:9101 1000 OK: HeadMan Version: 1.30 (28 April 2003) *
L'astérisque est l'invite de commande de la console.
Tapez help pour obtenir la liste des commandes disponibles :
*help
Command Description
======= ===========
add add media to a pool
autodisplay autodisplay [on/off] -- console messages
automount automount [on/off] -- after label
cancel cancel job=nnn -- cancel a job
create create DB Pool from resource
delete delete [pool=<pool-name> | media volume=<volume-name>]
estimate performs FileSet estimate debug=1 give full listing
exit exit = quit
help print this command
label label a tape
list list [pools | jobs | jobtotals | media <pool> |
files jobid=<nn>]; from catalog
llist full or long list like list command
messages messages
mount mount <storage-name>
prune prune expired records from catalog
purge purge records from catalog
query query catalog
quit quit
relabel relabel a tape
release release <storage-name>
restore restore files
run run <job-name>
setdebug sets debug level
show show (resource records) [jobs | pools | ... | all]
sqlquery use SQL to query catalog
status status [storage | client]=<name>
time print current time
unmount unmount <storage-name>
update update Volume or Pool
use use catalog xxx
var does variable expansion
version print Director version
wait wait until no jobs are running
*
Pour plus de détails sur les commandes de la console, consultez le chapitre Console de ce manuel.
A ce stade, nous supposons que vous avez :
--your-options
En outre, nous supposons pour le moment que vous utilisez les fichiers de configuration par défaut.
Maintenant, entrez les commandes suivantes :
show filesets
Vous devriez obtenir quelque chose comme :
FileSet: name=Full Set
O M
N
I /home/kern/bacula/regress/build
N
E /proc
E /tmp
E /.journal
E /.fsck
N
FileSet: name=Catalog
O M
N
I /home/kern/bacula/regress/working/bacula.sql
N
Il s'agit d'un FileSet prédéfini qui sauvegardera le répertoire des sources de Bacula. Les noms de répertoires qui seront réellement affichés devraient correspondre à votre configuration. Dans une perspective de tests, nous avons choisi un répertoire de taille et de complexité modérée (environ 40 Mo). Le FileSet Catalog est utilisé pour sauvegarder le catalogue Bacula et nous ne nous y attarderons pas pour le moment. Les entrées I sont les fichiers ou répertoires qui seront inclus dans la sauvegarde, tandis que les entrées E sont ceux qui en seront exclus, quand aux entrées O, ce sont les options spécifiées pour ce FileSet. Vous pouvez changer ce qui est sauvegardé en modifiant la ligne File = de la ressource FileSet.
Il est maintenant temps de lancer votre première sauvegarde. Nous allons sauvegarder votre répertoire sources de Bacula vers un volume File dans votre répertoire /tmp afin de vous montrer combien c'est facile. Saisissez :
status dir
Vous devriez obtenir :
rufus-dir Version: 1.30 (28 April 2003) Daemon started 28-Apr-2003 14:03, 0 Jobs run. Console connected at 28-Apr-2003 14:03 No jobs are running. Level Type Scheduled Name ================================================================= Incremental Backup 29-Apr-2003 01:05 Client1 Full Backup 29-Apr-2003 01:10 BackupCatalog ====
Où les dates et le nom du Director seront différents et en accord avec votre installation. Ceci montre qu'une sauvegarde incrémentale est planifiée pour le job Client1 à 1h05, et qu'une sauvegarde full est planifiée pour le job BackupCatalog à 1h10. Vous devriez remplacer le nom Client1 par celui de votre machine, sinon vous risquez la confusion lorsque vous ajouterez de nouveaux clients. Pour ma machine réelle, j'utilise Rufus plutôt que Client1.
A présent, tapez :
status client
Vous devriez obtenir :
The defined Client resources are:
1: rufus-fd
Item 1 selected automatically.
Connecting to Client rufus-fd at rufus:8102
rufus-fd Version: 1.30 (28 April 2003)
Daemon started 28-Apr-2003 14:03, 0 Jobs run.
Director connected at: 28-Apr-2003 14:14
No jobs running.
====
Dans ce cas, le client se nomme rufus-fd, votre nom sera différent, mais la ligne qui débute par rufus-fd Version... est produite par votre File Daemon, nous sommes donc maintenant surs qu'il fonctionne.
Finalement, faites de même pour votre Storage Daemon :
status storage
Vous devriez obtenir :
The defined Storage resources are:
1: File
Item 1 selected automatically.
Connecting to Storage daemon File at rufus:8103
rufus-sd Version: 1.30 (28 April 2003)
Daemon started 28-Apr-2003 14:03, 0 Jobs run.
Device /tmp is not open.
No jobs running.
====
Vous noterez que le périphérique du Storage Daemon par défaut est nommé File et qu'il utilise le périphérique /tmp, qui n'est actuellement pas ouvert.
Maintenant, lancez un job :
run
Vous devriez obtenir :
Using default Catalog name=MyCatalog DB=bacula
A job name must be specified.
The defined Job resources are:
1: Client1
2: BackupCatalog
3: RestoreFiles
Select Job resource (1-3):
Ici, Bacula affiche la liste des trois différents jobs que vous pouvez exécuter. Choisissez le numéro 1 et validez (entrée).
Vous devriez obtenir :
Run Backup job JobName: Client1 FileSet: Full Set Level: Incremental Client: rufus-fd Storage: File Pool: Default When: 2003-04-28 14:18:57 OK to run? (yes/mod/no):
Prenez un peu de temps pour examiner cet affichage et le comprendre. Il vous est demandé de valider, modifier ou annuler l'exécution d'un job nommé Client1 avec le FileSet Full Set que nous avons affiché plus haut en incrémental sur votre client rufus, utilisant le périphérique de stockage File et le pool Default à la date indiquée sur la ligne "When".
Nous avons le choix de valider (yes), modifier un ou plusieurs des paramètres ci-dessus (mod), ou de ne pas exécuter le job (no).
Validez l'exécution du job (yes), vous devriez immédiatement obtenir l'invite de commande de la console (un astérisque). Après quelques minutes, la commande messages devrait produire un résultat tel que :
28-Apr-2003 14:22 rufus-dir: Last FULL backup time not found. Doing
FULL backup.
28-Apr-2003 14:22 rufus-dir: Start Backup JobId 1,
Job=Client1.2003-04-28_14.22.33
28-Apr-2003 14:22 rufus-sd: Job Client1.2003-04-28_14.22.33 waiting.
Cannot find any appendable volumes.
Please use the "label" command to create a new Volume for:
Storage: FileStorage
Media type: File
Pool: Default
Le premier message signale qu'aucune sauvegarde full n'a jamais été faite, et que par conséquent Bacula élève votre incrémentale en une Full (ce comportement est normal). Le second message indique que le job a démarré avec le JobId 1 et le troisième message vous informe que Bacula ne peut trouver aucun volume dans le pool Default sur lequel écrire les données du job. Ceci est normal, car nous n'avons encore créé (ou étiqueté) aucun volume. Bacula vous fournit tous les détails concernant le volume dont il a besoin.
A ce point, le job est bloqué en attente d'un volume. Vous pouvez le vérifier en utilisant la commande status dir. Pour continuer, vous devez créer un volume sur lequel Bacula pourra écrire. Voici la manipulation :
label
Bacula devrait afficher :
The defined Storage resources are:
1: File
Item 1 selected automatically.
Enter new Volume name:
Entrez un nom commençant par une lettre et ne contenant que des chiffres et des lettres (périodes, tirets et souligné "_" sont aussi autorisés). Par exemple entrez TestVolume001, vous devriez obtenir :
Defined Pools:
1: Default
Item 1 selected automatically.
Connecting to Storage daemon File at rufus:8103 ...
Sending label command for Volume "TestVolume001" Slot 0 ...
3000 OK label. Volume=TestVolume001 Device=/tmp
Catalog record for Volume "TestVolume002", Slot 0 successfully created.
Requesting mount FileStorage ...
3001 OK mount. Device=/tmp
Finalement, tapez la commande messages, vous devriez obtenir quelque chose comme :
28-Apr-2003 14:30 rufus-sd: Wrote label to prelabeled Volume "TestVolume001" on device /tmp 28-Apr-2003 14:30 rufus-dir: Bacula 1.30 (28Apr03): 28-Apr-2003 14:30 JobId: 1 Job: Client1.2003-04-28_14.22.33 FileSet: Full Set Backup Level: Full Client: rufus-fd Start time: 28-Apr-2003 14:22 End time: 28-Apr-2003 14:30 Files Written: 1,444 Bytes Written: 38,988,877 Rate: 81.2 KB/s Software Compression: None Volume names(s): TestVolume001 Volume Session Id: 1 Volume Session Time: 1051531381 Last Volume Bytes: 39,072,359 FD termination status: OK SD termination status: OK Termination: Backup OK 28-Apr-2003 14:30 rufus-dir: Begin pruning Jobs. 28-Apr-2003 14:30 rufus-dir: No Jobs found to prune. 28-Apr-2003 14:30 rufus-dir: Begin pruning Files. 28-Apr-2003 14:30 rufus-dir: No Files found to prune. 28-Apr-2003 14:30 rufus-dir: End auto prune.
Si rien ne se passe dans l'immédiat, vous pouvez continuer de rentrer la commande messages jusqu'à ce que le job se termine, ou utiliser la commande autodisplay on afin que les messages soient affichés dès-qu'ils sont disponibles.
si vous faites ls -l dans votre répertoire /tmp, vous verrez l'élément suivant :
-rw-r----- 1 kern kern 39072153 Apr 28 14:30 TestVolume001
Il s'agit du volume File que vous venez juste d'écrire, et qui contient toutes les données du job que vous venez d'exécuter. Si vous exécutez d'autres jobs, il seront ajoutés à la suite de ce volume, à moins que vous n'ayez spécifié un autre comportement.
Vous vous demandez peut-être s'il va vous falloir étiqueter vous même chaque volume que Bacula sera amené à utiliser. La réponse, en ce qui concerne les volumes disque tels que celui que nous avons utilisé, est non. Il est possible de paramétrer Bacula pour qu'il créée lui même les volumes. En revanche, pour les volumes de type cartouche, il vous faudra très probablement étiqueter chaque volume que vous voulez utiliser.
Si vous souhaitez en rester là, saisissez simplement quit dans la console, puis stoppez Bacula avec ./bacula stop. Pour nettoyer votre installation des résultats de vos tests, supprimez le fichier /tmp/TestVolume001, et réinitialisez votre catalogue en utilisant :
./drop_bacula_tables ./make_bacula_tables
Notez bien que ceci supprimera toutes les informations concernant les jobs précédemment exécutés et que, si c'est sans doute ce que vous souhaitez faire en fin de phase de test, ce n'est généralement pas une opération souhaitable en utilisation normale.
Si vous souhaitez essayer de restaurer les fichiers que vous venez de sauvegarder, lisez la section suivante.
Si vous avez utilisé la configuration par défaut et sauvegardé les sources de Bacula comme dans la démonstration ci-dessus, vous pouvez restaurer les fichiers sauvegardés en saisissant les commandes suivantes dans la Console :
restore all
Vous obtiendrez :
First you select one or more JobIds that contain files
to be restored. You will be presented several methods
of specifying the JobIds. Then you will be allowed to
select which files from those JobIds are to be restored.
To select the JobIds, you have the following choices:
1: List last 20 Jobs run
2: List Jobs where a given File is saved
3: Enter list of comma separated JobIds to select
4: Enter SQL list command
5: Select the most recent backup for a client
6: Select backup for a client before a specified time
7: Enter a list of files to restore
8: Enter a list of files to restore before a specified time
9: Find the JobIds of the most recent backup for a client
10: Find the JobIds for a backup for a client before a specified time
11: Enter a list of directories to restore for found JobIds
12: Cancel
Select item: (1-12):
Comme vous pouvez le constater, les options sont nombreuses, mais pour l'instant, choisissez l'option 5 afin de sélectionner la dernière sauvegarde effectuée. Vous obtiendrez :
Defined Clients:
1: rufus-fd
Item 1 selected automatically.
The defined FileSet resources are:
1: 1 Full Set 2003-04-28 14:22:33
Item 1 selected automatically.
+-------+-------+----------+---------------------+---------------+
| JobId | Level | JobFiles | StartTime | VolumeName |
+-------+-------+----------+---------------------+---------------+
| 1 | F | 1444 | 2003-04-28 14:22:33 | TestVolume002 |
+-------+-------+----------+---------------------+---------------+
You have selected the following JobId: 1
Building directory tree for JobId 1 ...
1 Job inserted into the tree and marked for extraction.
The defined Storage resources are:
1: File
Item 1 selected automatically.
You are now entering file selection mode where you add and
remove files to be restored. All files are initially added.
Enter "done" to leave this mode.
cwd is: /
$
(J'ai tronqué l'affichage à droite par soucis de lisibilité.) Comme vous pouvez le constater au début de cet affichage, Bacula connaît vos clients, et puisque vous n'en avez qu'un, il est automatiquement sélectionné. Il en va de même pour le FileSet. Bacula produit alors une liste de tous les jobs qui constituent la sauvegarde courante. Dans le cas présent, il n'y en a qu'un. Notez que le Storage Daemon est aussi sélectionné automatiquement. Bacula est maintenant en mesure de produire une arborescence à partir de tous les fichiers qui ont été sauvegardés (il s'agit d'une représentation en mémoire de votre système de fichiers). A ce stade, vous pouvez utiliser les commandes cd , ls et dir pour naviguer dans l'arborescence et voir quels fichiers peuvent être restaurés. Par exemple, si je saisis cd /home/kern/bacula/bacula-1.30 suivi de dir, j'obtiens la liste de tous les fichiers du répertoire source de Bacula. Pour plus d'information sur ce sujet, veuillez consulter le chapitre La commande Restore.
Pour quitter, tapez simplement :
done
Vous obtiendrez :
Bootstrap records written to /home/kern/bacula/testbin/working/restore.bsr The restore job will require the following Volumes: TestVolume001 1444 files selected to restore. Run Restore job JobName: RestoreFiles Bootstrap: /home/kern/bacula/testbin/working/restore.bsr Where: /tmp/bacula-restores Replace: always FileSet: Full Set Client: rufus-fd Storage: File JobId: *None* When: 2005-04-28 14:53:54 OK to run? (yes/mod/no):
Si vous acceptez (yes), vos fichiers seront restaurés vers le répertoire /tmp/bacula-restores. Si vous préférez restaurer les fichiers à leurs emplacements d'origine, vous devez utiliser l'option mod et régler explicitement le paramètre Where à vide ou "/". Nous vous conseillons de poursuivre avec yes. Après quelques instants, la commande messages devrait produire la liste des fichiers restaurés, ainsi qu'un résumé du job qui devrait ressembler à ceci :
28-Apr-2005 14:56 rufus-dir: Bacula 1.30 (28Apr03): 28-Apr-2003 14:56 JobId: 2 Job: RestoreFiles.2005-04-28_14.56.06 Client: rufus-fd Start time: 28-Apr-2005 14:56 End time: 28-Apr-2005 14:56 Files Restored: 1,444 Bytes Restored: 38,816,381 Rate: 9704.1 KB/s FD termination status: OK Termination: Restore OK 28-Apr-2005 14:56 rufus-dir: Begin pruning Jobs. 28-Apr-2005 14:56 rufus-dir: No Jobs found to prune. 28-Apr-2005 14:56 rufus-dir: Begin pruning Files. 28-Apr-2005 14:56 rufus-dir: No Files found to prune. 28-Apr-2005 14:56 rufus-dir: End auto prune.
Après avoir quitté la Console, vous pouvez examiner les fichiers dans le répertoire /tmp/bacula-restores, il contient l'arborescence avec tous vos fichiers. Supprimez-le après avoir vérifié :
rm -rf /tmp/bacula-restore
Saisissez simplement la commande quit.
Si vous êtes parvenus à faire fonctionner tous les exemples ci-dessus, vous êtes sans doute prèt à ajouter un nouveau client (File Daemon), c'est à dire une seconde machine que vous souhaitez sauvegarder. La seule chose à installer sur la nouvelle machine est le binaire bacula-fd (ou bacula-fd.exe pour Windows) et son fichier de configuration bacula-fd.conf. Vous pouvez démarrer en copiant le fichier précédemment créé moyennant une modification mineure pour l'adapter au nouveau client : changez le nom de File Daemon (rufus-fd dans l'exemple ci-dessus) en le nom que vous avez choisi pour le nouveau client. Le mieux est d'utiliser le nom de la machine. Par exemple :
...
#
# "Global" File daemon configuration specifications
#
FileDaemon { # this is me
Name = rufus-fd
FDport = 9102 # where we listen for the director
WorkingDirectory = /home/kern/bacula/working
Pid Directory = /var/run
}
...
devient :
...
#
# "Global" File daemon configuration specifications
#
FileDaemon { # this is me
Name = matou-fd
FDport = 9102 # where we listen for the director
WorkingDirectory = /home/kern/bacula/working
Pid Directory = /var/run
}
...
Où rufus-fd est devenu matou-fd (je ne montre qu'une partie du fichier). Le choix des noms vous appartient. Pour l'instant, je vous recommande de ne rien changer d'autre. Plus tard, vous changerez le mot de passe.
Installez cette configuration sur votre seconde machine. Il vous faut maintenant ajouter quelques lignes à votre bacula-dir.conf pour définir le nouveau File Daemon. En vous basant sur l'exemple initial qui devrait être installé sur votre système, ajoutez les lignes suivantes (essentiellement, une copie des lignes existantes avec seulement les noms modifiés) à votre bacula-dir.conf :
#
# Define the main nightly save backup job
# By default, this job will back up to disk in /tmp
Job {
Name = "Matou"
Type = Backup
Client = matou-fd
FileSet = "Full Set"
Schedule = "WeeklyCycle"
Storage = File
Messages = Standard
Pool = Default
Write Bootstrap = "/home/kern/bacula/working/matou.bsr"
}
# Client (File Services) to backup
Client {
Name = matou-fd
Address = matou
FDPort = 9102
Catalog = MyCatalog
Password = "xxxxx" # password for
File Retention = 30d # 30 days
Job Retention = 180d # six months
AutoPrune = yes # Prune expired Jobs/Files
}
Assurez-vous que le paramètre Address de la ressource Storage a pour valeur le nom pleinement qualifié et non quelque chose comme "localhost". L'adresse spécifiée est envoyée au client et doit être un nom pleinement qualifié. Si vous utilisez "localhost", l'adresse du Storage Daemon ne sera pas résolue correctement, il en résultera un timeout lorsque le File Daemon échouera à connecter le Storage Daemon.
Il n'y a rien d'autre à faire. J'ai copié les ressources existantes pour créer un second job (Matou) pour sauvegarder le second client (matou-fd). le client se nomme matou-fd et le job Matou, le fichier bootstrap est modifié mais tout le reste est inchangé. Ceci signifie que Matou sera sauvegardé avec la même planification sur les mêmes cartouches. Vous pourrez changer ceci plus tard, pour le moment, restons simples.
La seconde modification consiste en l'ajout d'une nouvelle ressource Client qui définit matou-fd et qui a l'adresse correcte matou (mais dans la vraie vie, vous pouvez avoir besoin d'un nom pleinement qualifié ou d'une adresse IP. J'ai aussi conservé le même mot de passe (xxxxx dans l'exemple).
A ce stade, il suffit de redémarrer Bacula pour qu'il prenne en compte vos modifications. L'invite que vous avez vu plus haut devrait maintenant inclure la nouvelle machine.
Pour une utilisation en production vous voudrez probablement utiliser plusieurs pools et différentes planifications. Il vous appartient de faire les adaptations qui seyent à vos besoins. Dans tous les cas, n'oubliez pas de changer les mots de passe dans les fichiers de configuration du Director et du Client pour des raisons de sécurité.
Vous trouverez des astuces importantes concernant le changement des noms et mots de passe, ainsi qu'un diagramme décrivant leurs correspondances dans la section Erreurs d'authentification du chapitre FAQ de ce manuel.
rufus-sd: block.c:337 === Write error errno=28: ERR=No space left
on device
Ceci indique que Bacula a reçu une erreur d'écriture à cause de la carouche pleine. Bacula va maintenant rechercher une cartouche utilisable dans le pool spécifié pour le job. Dans la situation idéale, vous avez réglé correctement vos rétentions et spécifié que vos cartouches peuvent être recyclées automatiquement. Dans ce cas, Bacula recycle automatiquement vos cartouches sorties de rétention et est en mesure de réécrire dessus. Pour plus d'informations sur le recyclage, veuillez consulter le chapitre Recyclage de ce manuel. Si vous constatez que vos cartouches ne sont pas recyclées correctement, consultez la section sur le Recyclage manuel du chapitre Recyclage.
Si comme moi, vous avez un très grand nombre de cartouches que vous étiquetez avec la date de première écriture, si vous n'avez pas réglé vos périodes de rétention, Bacula ne trouvera pas de cartouche dans le pool et il vous enverra un message tel que :
rufus-sd: Job kernsave.2002-09-19.10:50:48 waiting. Cannot find any
appendable volumes.
Please use the "label" command to create a new Volume for:
Storage: SDT-10000
Media type: DDS-4
Pool: Default
Ce message sera répété une heure plus tard, puis deux heures plus tard et ainsi de suite en doublant à chaque fois l'intervalle à concurrence d'un jour jusqu'à ce que vous créiez un volume.
Que faire dans cette situation ?
La réponse est simple : d'abord, fermez le lecteur à l'aide de la commande unmount du programme Console. Si vous n'avez qu'un lecteur, il sera sélectionné automatiquement, sinon assurez-vous de démonter celui spécifié dans le message (dans ce cas STD-10000).
Ensuite, retirez la cartouche du lecteur et insérez-en une vierge. Notez que sur certains lecteurs anciens, il peut être nécessaire d'écrire une marque de fin de fichier (mt -f /dev/nst0 weof) pour éviter que le lecteur ne déroule toute la cartouche lorsque Bacula tente de lire le label. (NDT : j'ai un doute, la vo dit : "to prevent the drive from running away when Bacula attempts to read the label.")
Finalement, utilisez la commande label dans la console pour écrire un label sur le nouveau volume. la commande label va contacter le Storage Daemon pour qu'il écrive l'étiquette logicielle. Si cette opération se termine correctement, le nouveau volume est ajouté au pool et la commande mount est envoyée au Storage Daemon. Voyez les sections précédentes de ce chapitre pour plus de détails sur l'étiquetage des cartouches.
Bacula peut maintenant poursuivre le job et continuer d'écrire les données sauvegardées sur le nouveau volume.
Si Bacula cycle sur un pool de volumes, au lieu du message ci-dessus "Cannot find any appendable volumes.", Bacula peut vous demander de monter un volume particulier. Dans ce cas, essayez de le satisfaire. Si, pour quelque raison, vous n'avez plus le volume, vous pouvez monter n'importe quel autre volume du pool, pourvu qu'il soit utilisable, Bacula l'utilisera. La commande list volumes du programme Console permet de déterminer les volumes utilisables et ceux qui ne le sont pas.
Si, comme moi, vous avez paramétré correctement vos périodes de rétention, mais n'avez plus aucun volume libre, vous pouvez ré-étiqueter et ré-utiliser un volume comme suit :
Pour ré-étiqueter manuellement le volume, suivez les étapes supplémentaire ci-dessous :
La plupart des commandes citées ci-dessus, à l'exception de list, vous invitent à compléter la liste des arguments fournis si vous vous contentez d'entrer le nom de la commande.
Si vous voulez débugger la sortie des daemons en cours d'exécution, lancez-les, depuis le répertoire d'installation, comme suit :
./bacula start -d100
Cette possibilité peut vous fournir une aide précieuse si vos daemons ne démarrent pas correctement. Normalement, la sortie des daemons est dirigée vers le périphérique NULL, avec un niveau de débuggage supérieur à zéro, elle est dirigée vers le terminal de lancement.
Pour stopper les trois daemons, tapez simplement :
./bacula stop
dans le répertoire d'installation.
L'exécution de bacula stop peut signaler des pids non trouvés. C'est Ok, spécialement si l'un des bacula stop est mort, ce qui est très rare.
Pour faire une sauvegarde complète (Full) du système, chaque File Daemon doit être exécuté en tant que root afin d'avoir les permissions requises pour accéder à tous les fichiers. Les autres daemons n'ont pas besoin des privilèges root. Cependant, le Storage Daemon doit être capable d'accéder aux lecteurs, ce qui Sur beaucoup de systèmes, n'est possible que pour root. Vous pouvez, au choix, exécuter le Storage Daemon en tant que root, ou changer les permissions sur les lecteurs pour autoriser les accès non-root. MySQL et PostgreSQL peuvent être installés et exécutés avec un userid quelconque, les privilèges root ne sont pas requis.
Lorsque vous lancez les daemons Bacula, le Storage Daemon tente d'ouvrir tous les périphériques de stockage définis et de vérifier le volumes courrament montés. Il n'accepte aucune connection de la console tant que tous les périphériques n'ont pas été vérifiés. Une cartouche qui a été utilisé précédemment doit être rembobinée, ce qui, sur certain lecteurs, peut prendre plusieurs minutes. Par conséquent, vous devriez faire preuve d'un peu de patience lorsue vous tentez de contacter le Storage Daemon pour la première fois après le lancement de Bacula. Si vous avez un accès visuel à votre lecteur, celui-ci devrait être prèt à l'emploi lorsque son témoin lumineux cesse de clignoter.
Les mêmes considérations s'appliquent si vous avez monté une cartouche vierge dans un lecteur tels qu'un HP DLT. Il peut s'écouler une à deux minutes avant que le lecteur se rende compte que la cartouche est vierge. Si vous tentez de la monter pendant cette période, il est probable que vous aller geler votre pilote SCSI (c'est le cas sur mon système RedHat). Par conséquent, nous vous enjoignons une fois encore à être patient lors de l'insertion de cartouches vierges. Laissez le lecteur s'initialiser avant de tenter d'y accéder.
Si l'un ou plusieurs de vos File Daemons rencontre des difficultés à se connecter au Storage Daemon, c'est très probablement que vous n'avez pas utilisé un nom pleinement qualifié pour la directive Address de la ressource Storage du fichier de configuration du Director. Le résolveur de la machine cliente (celle qui exécute le FD) doit être capable de résoudre le nom que vous avez spécifié dans cette directive en une adresse IP. Un exemple d'adresse ne fonctionnant pas est localhost. Un exemple qui pourrait fonctionner : megalon. Un exemple qui a encore plus de chances de fonctionner : magalon.mydomain.com. Sur les systèmes Win32, si vous ne disposez pas d'un bon résolveur (c'est souvent le cas sur Win98), vous pouvez essayer en utilisant une adresse IP plutôt qu'un nom.
Si votre adresse est correcte, assurez vous qu'aucun autre programme n'utilise le port 9103 sur la machine qui héberge le Storage Daemon. Les numéros de ports de Bacula sont autorisés par l'IANA, et ne devraient donc pas être utilisés par d'autres programmes, mais il semble que certaines imprimantes HP les utilisent. Exécutez la commande netstat -a sur la machine qui héberge le Storage Daemon pour déterminer qui utilise le port 9103 (utilisé pour les communications du FD vers le SD).
Chacun des trois daemons (Director, File, Storage) acceptent quelques options sur la ligne de commande. En général, chacun d'entre eux, de même que le programme Console, admet les otpions suivantes :
Le Director a les options spécifiques suivantes :
Le File Daemon les options spécifiques suivantes :
Le Storage Daemon n'a pas d'options spécifiques.
Le programme Console n'a pas d'options spécifiques.
La création de pool est automatique au démarrage de Bacula, aussi si vous comprenez déjà le concept de pools et leur fonctionnement, vous pouvez passer à la section suivante.
Lorsque vous exécutez un job, Bacula doit déterminer quel volume utiliser pour sauvegarder le FileSet. Plutôt que de spécifier un volume directement, vous spécifiez l'ensemble de volumes dans lequel vous autorisez Bacula à puiser lorsqu'il lui faut un volume pour écrire les données sauvegardées. Dès lors, Bacula se charge de sélectionner le premier volume utilisable dans le pool approprié au périphérique que vous avez spécifié pour le job exécuté. Lorsqu'un volume est plein, Bacula change son VolStatus de Append en Full, et utilise le volume suivant, et ainsi de de suite. S'il n'y a pas de volume utilisable, Bacula envoie un message à l'opérateur pour réclamer la création d'un volume approprié.
Bacula garde trace des noms de pools, des volumes contenus dans les pools, et de plusieurs caractéristiques de chacun de ces volumes.
Lorsque Bacula démarre, il s'assure que toutes les définitions de ressources Pool ont été enregistrées dans le catalogue. Vous pouvez le vérifier avec la commande :
list pools
du programme Console, qui devrait produire quelque chose comme :
*list pools Using default Catalog name=MySQL DB=bacula +--------+---------+---------+---------+----------+-------------+ | PoolId | Name | NumVols | MaxVols | PoolType | LabelFormat | +--------+---------+---------+---------+----------+-------------+ | 1 | Default | 3 | 0 | Backup | * | | 2 | File | 12 | 12 | Backup | File | +--------+---------+---------+---------+----------+-------------+ *
Si vous tentez de créer un pool existant, Bacula affiche :
Error: Pool Default already exists.
Once created, you may use the {\bf update} command to
modify many of the values in the Pool record.
Bacula exige que chaque volume comporte une étiquette (NDT : label) logicielle. Il existe plusieurs stratégies pour étiqueter les volumes. Celle que j'utilise consiste à les étiqueter à l'aide du programme Console au fur et à mesure qu'ils sont requis par Bacula. Ainsi, lorsqu'il a besoin d'un volume qu'il ne trouve pas dans son catalogue, Bacula m'envoie un e-mail pour m'enjoindre à ajouter un volume au pool. J'utilise alors la commande label dans la console pour étiqueter un nouveau volume et le définir dans le catalogue, après quoi Bacula est en mesure de l'utiliser. Alternativement, je peux utiliser la commande relabel pour ré-étiquter un volume qui n'est plus utilisé, pourvu qu'il ait le VolStatus Purged.
Une autre stratégie consiste à étiqueter un ensemble de volumes, et à les utiliser au fur et à mesure que Bacula les réclame. C'est le plus souvent ce qui est fait lorsque vous cyclez sur un groupe de volumes, par exemple avec une librairie. Pour plus de détails sur le recyclage, veuillez consulter le chapitre Recyclage automatique des volumes de ce manuel.
Si vous exécutez un job Bacula alors que vous n'avez pas de volumes étiquetés dans le pool concerné, Bacula vous en informe, et vous pouvez les créer "à la volée". Dans mon cas, j'étiquette mes cartouches avec la date, par exemple : DLT-18April02. Voyez ci-dessous pour plus de détails sur l'usage de la commande label.
L'étiquetage des volumes se fait, en principe, avec le programme Console.
Si Bacula annonce que vous ne pouvez étiqueter une cartouche au motif qu'elle porte déjà une étiquette, démontez-la avec la commande unmount, puis recommencez avec une cartouche vierge.
Etand donné que le support de stockage physique est différent pour chaque périphérique, la commande label vous propose une liste de ressources Storage définies telle que celle-ci :
The defined Storage resources are:
1: File
2: 8mmDrive
3: DLTDrive
4: SDT-10000
Select Storage resource (1-4):
A ce stade, vous devriez avoir une cartouche vierge dans votre lecteur d'un type correspondant à la ressource Storage que vous avez sélectionné.
Bacula vous demande le nom du volume :
Enter new Volume name:
S'il proteste :
Media record for Volume xxxx already exists.
Cela signifie que le nom de volume xxxx que vous avez entré existe dèjà dans le catalogue. Vous pouvez afficher la liste des média définis avec la commande list media. Notez que la colonne LastWritten a ici été tronquée pour permettre un affichage propre.
+---------------+---------+--------+----------------+-----/~/-+------------+-----+ | VolumeName | MediaTyp| VolStat| VolBytes | LastWri | VolReten | Recy| +---------------+---------+--------+----------------+---------+------------+-----+ | DLTVol0002 | DLT8000 | Purged | 56,128,042,217 | 2001-10 | 31,536,000 | 0 | | DLT-07Oct2001 | DLT8000 | Full | 56,172,030,586 | 2001-11 | 31,536,000 | 0 | | DLT-08Nov2001 | DLT8000 | Full | 55,691,684,216 | 2001-12 | 31,536,000 | 0 | | DLT-01Dec2001 | DLT8000 | Full | 55,162,215,866 | 2001-12 | 31,536,000 | 0 | | DLT-28Dec2001 | DLT8000 | Full | 57,888,007,042 | 2002-01 | 31,536,000 | 0 | | DLT-20Jan2002 | DLT8000 | Full | 57,003,507,308 | 2002-02 | 31,536,000 | 0 | | DLT-16Feb2002 | DLT8000 | Full | 55,772,630,824 | 2002-03 | 31,536,000 | 0 | | DLT-12Mar2002 | DLT8000 | Full | 50,666,320,453 | 1970-01 | 31,536,000 | 0 | | DLT-27Mar2002 | DLT8000 | Full | 57,592,952,309 | 2002-04 | 31,536,000 | 0 | | DLT-15Apr2002 | DLT8000 | Full | 57,190,864,185 | 2002-05 | 31,536,000 | 0 | | DLT-04May2002 | DLT8000 | Full | 60,486,677,724 | 2002-05 | 31,536,000 | 0 | | DLT-26May02 | DLT8000 | Append | 1,336,699,620 | 2002-05 | 31,536,000 | 1 | +---------------+---------+--------+----------------+-----/~/-+------------+-----+
Une fois que Bacula a vérifié que le volume n'existe pas encore, il vous demande le pool dans lequel vous souhaitez que le volume soit créé. S'il n'existe qu'un pool, il est sélectionné automatiquement.
Si la cartouche est étiquetée correctement, un enregistrement de volume est aussi créé dans le pool. Ainsi, le nom du volume et tous ses attributs apparaîtront lorque vous afficherez les volumes du pool. De plus, le volume est disponible pour les sauvegardes, pourvu que le MediaType coĻincide avec celui requis par le Storage Daemon.
Lorsque vous avez étiqueté la cartouche, vous n'avez répondu qu'à quelques questions la concernant -- principalement son nom, et éventuellement le Slot. Cependant, un enregistrement de volume dans le catalogue (connu au niveau interne en tant qu'enregistrement Media) contient un certain nombre d'attributs. La plupart d'entre eux sont renseignés selon les valeurs par défaut qui ont été définies lors de la création du pool (au trement dit, le pool comporte la plupart des attributs par défaut utilisés lors de la création d'un volume).
Il est aussi possible d'ajouter des media aux pools sans les étiqueter physiquement. C'est la fonction de la commande add. Pour plus d'informations, veuillez consulterle chapitre Console de ce manuel.
eric 2009-05-06