La console Bacula (parfois désignée "Agent utilisateur") est un programme qui permet à l'utilisateur autorisé ou à l'administrateur système d'interagir avec le Director.
Actuellement, la console Bacula existe en deux versions : une interface shell (façon TTY), et une interface graphique GNOME. Avec la console Bacula, vous pouvez déterminer l'état d'un job particulier, examiner le contenu du catalogue et effectuer certaines manipulations de cartouches.
Il existe d'autre part un programme nommé wx-console, bâtie avec wxWidgets qui offre une interface graphique aux opérations de restauration.
Etant donné que la Console interagit avec le Director au travers du réseau, il n'est pas nécessaire que les deux programmes résident sur la même machine.
Bacula a besoin d'un minimum de retour de la Console afin de pouvoir utiliser plus d'une cartouche. En effet, lorsqu'il en réclame une nouvelle, il attend jusqu'à ce qu'un opérateur lui indique, via la Console, qu'une nouvelle cartouche est montée.
Lors de son lancement, la Console lit le fichier de configuration standard nommé bconsole.conf (ou gnome-console.conf dans le cas de la version GNOME) Ce fichier définit une configuration par défaut de la Console et, à l'heure actuelle, la seule ressource définie est la ressource Director, qui informe la Console du nom et de l'adresse du Director. Pour plus d'informations sur la configuration de la Console, voyez le chapitre Configurer la Console de ce manuel.
Le programme Console admet les options suivantes :
Usage: bconsole [-s] [-c config_file] [-d debug_level]
-c <file> set configuration file to file
-dnn set debug level to nn
-n no conio
-s no signals
-t test - read configuration and exit
-? print this message.
Après son démarrage, la Console est en attente de vos commandes, ce qui est indiqué par une astérisque (*) (ce n'est pas le cas dans la version GNOME où vous saisissez vos commandes dans la boite texte en bas de l'écran). Vous pouvez, pour toutes les commandes, vous contenter d'entrer le nom de la commande, la Console se chargera de vous demander les arguments nécessaires, mais dans la plupart des cas, vous pouvez entrer les commandes suivies de leurs arguments. Le format général est :
<command> <keyword1>[=<argument1>] <keyword2>[=<argument2>] ...
Où command est l'une des commandes énumérées ci-dessous, keyword est l'un des mots-clef énumérés ci-dessous (usuellement suivi d'un argument), et argument est la valeur du mot-clef. La commande peut être abrégée jusqu'à sa plus courte abréviation unique. Si deux commandes commencent par les mêmes lettres, c'est celle qui apparaît en tête dans la liste fournie par la commande help qui sera sélectionnée si votre abréviation est ambigüe. Aucun des mots-clef suivant la commande ne peut être abrégé.
Par exemple :
list files jobid=23
énumère les fichiers sauvegardés par le job de JobId 23.
Cette autre commande :
show pools
affiche toutes les ressources Pool.
Normalement, le programme Console se termine si vous saisissez quit ou exit. Cependant, il il attend jusq"à ce que le Director ait pris en compte la commande, ce qui peut prendre du temps si ce dernier est déjà occupé à une tâche longue (par exemple, un élagage du catalogue). Si vous voulez quitter la Console immédiatement, utilisez la commande .quit.
Il n'existe actuellement aucun moyen d'interrompre une commande de la Console une fois lancée (Ctrl-C ne marche pas). En revanche, à l'invite d'une commande vous demandant de choisir parmi plusieurs possibilités, vous pouvez annuler la commande en entrant un point (.), vous serez dans la plupart des cas ramené à l'invite principal, ou à l'invite précédente, dans le cas de choix imbriqués. En quelques endroits, comme celui où l'on vous demande un nom de volume, le point sera pris pour la réponse (Bacula pensera que vous voulez nommer votre volume "."). Dans cette situation, vous serez la plupart du temps en mesure d'annuler à l'invite suivante.
jobid=536
Notez que cette liste est probablement incomplète, car le processus de création est toujours en cours. Il se peut aussi qu'elle ne soit pas dans l'ordre alphabétique.
Les commandes suivantes sont actuellement implémentées :
Lorsque l'affichage automatique est désactivé, vous devez explicitement en demander l'affichage avec la commande messages.
Une fois qu'un job est marqué "A supprimer", il peut se passer quelques instants (en général, moins d'une minute) avant qu'il se termine, en fonction des opérations en cours.
Si, au lancement d'un job, Bacula détermine qu'il n'y a pas de pool enregistré dans le catalogue, mais qu'il existe une ressource Pool pour le pool approprié, alors il le créé pour vous. Si vous voulez le voir apparaître immédiatement dans le catalogue, utilisez cette commande pour forcer sa création immédiate.
Voici la forme complète de cette commande :
delete pool=\lt{}pool-name\gt{}
supprime un pool du catalogue.
delete volume=\lt{}volume-name\gt{} pool=\lt{}pool-name\gt{}
supprime du catalogue un volume du pool spécifié.
delete JobId=\lt{}job-id\gt{} JobId=\lt{}job-id2\gt{} ...
supprime du catalogue le job spécifié.
delete Job JobId=n,m,o-r,t ...
supprime les job de JobIds m,n,o,p,q,r et t (où m,n,... sont, bien sur, des nombres). Ainsi, la commande "delete jobid" accepte les listes et les plages de jobids.
Optionnellement, vous pouvez ajouter le mot-clef listing, auquel cas tous les fichiers à sauvegarder seront affichés. Notez qu'un tel affichage peut prendre un certain temps s'il s'agit d'une grosse sauvegarde. Voici la forme complète de cette commande :
estimate job=\lt{}job-name\gt{} listing client=\lt{}client-name\gt{}
fileset=\lt{}fileset-name\gt{} level=\lt{}level-name\gt{}
La spécification du job est suffisante, mais vous pouvez aussi passer outre le client, le FileSet et/ou le niveau en les spécifiant sur la ligne de commande.
Par exemple, vous pourriez faire ceci :
@output /tmp/listing
estimate job=NightlySave listing level=Incremental
@output
ce qui produirait une liste complète de tous les fichiers à sauvegarder pour le job NightlySave au cours d'une sauvegarde incrémentale, et qui consignerait cette liste dans le fichier /tmp/listing. Notez que l'évaluation produite par cette commande se base sur les tailles de fichiers contenues dans l'objet "répertoire", aussi l'estimation peut être très éloignée de la réalité si vous avez des fichiers creux (NDT : sparse files) sur votre système. Ce type de fichiers se rencontre souvent sur les systèmes 64 bits avec certains systèmes de fichiers. Le volume obtenu par l'évaluation est celui que sauvegardera Bacula si l'option sparse est désactivée. Il n'y a actuellement aucun moyen d'évaluer le volume de ce qui serait sauvegardé avec l'option sparse activée.
label storage=\lt{}storage-name\gt{} volume=\lt{}volume-name\gt{}
slot=\lt{}slot\gt{}
Si vous omettez l'un quelconque des arguments, il vous sera réclamé. Le type de média est automatiquement récupéré de la ressource Storage. Une fois que les informations requises sont réunies, la Console contacte le Storage Daemon spécifié et lui ordonne d'étiqueter la cartouche spécifiée. Si l'étiquetage s'effectue correctement, la Console créé un nouvel enregistrement dans le catalogue pour le volume dans le pool approprié.
Les noms de volumes ne doivent contenir que des lettres, chiffres et les caractères spéciaux tiret (-), sous-ligné (_), double-point (:), et point (.). Tous les autres caractères, y compris l'espace, sont illégaux. Cette restriction vise à assurer une bonne lisibilité des noms de volumes pour réduire le risque d'erreurs humaines.
Notez que lors de l'étiquetage d'une cartouche vierge, Bacula obtient des erreurs read I/O error lorqu'il tente de vérifier si la cartouche a déjà un label. Si vous voulez éviter ce genre de message, placez un indicateur de fin de fichier sur votre cartouche avant son étiquetage :
mt rewind
mt weof
La commande label peut échouer pour plusieurs raisons :
Il existe deux moyens pour ré-étiqueter un volume qui porte déjà une étiquette Bacula. La méthode brutale consiste à écrire une marque de fin de fichier sur la cartouche vec la commande du système d'exploitation mt, quelque chose dans ce style :
mt -f /dev/st0 rewind
mt -f /dev/st0 weof
puis d'utiliser la commande label pour ajouter une nouvelle étiquette. Cette méthode peut cependant laisser des traces de l'ancien volume dans le catalogue.
Il est préférable d'utiliser la commande relabel décrite ci-dessous sur un volume purgé (automatiquement ou avec la commande purge).
Si votre librairie comporte un lecteur de codes barres, vous pouvez étiqueter tous les volumes qu'elle contient en utilisant la commande label barcodes. En effet, après le lancement de cette commande, Bacula monte chaque cartouche l'une après l'autre et l'étiquette du nom de son code barres. simultanément, l'enregistrement approprié est créé dans le catalogue. Toute cartouche dont le code barres commence par les mêmes caractères que ceux spécifiés par la directive "CleaningPrefix" de la ressource Pool du director est considérée comme une cartouche de nettoyage et ne reçoit donc pas d'étiquette, bien qu'une entrée dans le catalogue lui soit dédiée. Par exemple avec :
Pool {
Name ...
Cleaning Prefix = "CLN"
}
tout slot contenant une cartouche de code barres CLNxxxxx sera traitée en tant que cartouche de nettoyage et ne sera jamais montée. Notez que la forme complète de la commande est :
update storage=xxx pool=yyy slots=1-5,10 barcodes
list jobs
list jobid=<id> (affiche le jobid id)
list ujobid=<unique job name> (affiche le job dont le nom unique est <unique job name>)
list job=<job-name> (Affiche tous les jobs dont le nom est "job-name")
list jobname=<job-name> (voir ci-dessus)
Dans cette commande, vous pouvez ajouter "limit=nn" pour limiter la sortie \`a nn jobs.
list jobmedia
list jobmedia jobid=<id>
list jobmedia job=<job-name>
list files jobid=<id>
list files job=<job-name>
list pools
list clients
list jobtotals
list volumes
list volumes jobid=<id>
list volumes pool=<pool-name>
list volumes job=<job-name>
list volume=<volume-name>
list nextvolume job=<job-name>
list nextvol job=<job-name>
list nextvol job=<job-name> days=nnn
Ce que font la plupart des commandes ci-dessus devrait être plus ou moins évident. En général, si vous ne spécifiez pas tous les arguments requis, la Console vous sollicitera pour les arguments manquants.
La commande list nextvol affiche le nom du volume qui dera utilisé par le job spécifié. Soyez conscient que le prochain volume utilisé pour un job dépend de nombreux facteurs dont le temps, et les autres jobs qui seront exécutés avant celui spécifié, qui peuvent remplir une cartouche qui était vide au moment de l'exécution de list nextvol. Aussi, considérez la réponse fournie par cette commande comme une bonne estimation plutôt que comme une réponse définitive. De plus, cette commande a certains effets de bord : étant donné qu'elle exécute le même algorithme qu'un job, elle est susceptible de purger ou recycler un volume. Par défaut, le job spécifié doit être exécuté dans les deux jours ou aucun volume ne sera trouvé. Vous pouvez cependant spécifier jusqu'à 50 jours en avant avec la directive days=nnn. Si, par exemple, un vendredi, vous voulez savoir quel volume sera requis lundi pour le job MyJob, utilisez list nextvol job=MyJob days=3.
Si vous souhaitez ajouter vos propres commandes pour interroger le catalogue, vous pouvez les placer dans le fichier query.sql. Cela demande quelques connaissances du langage SQL. Voyez le paragraphe sur la commande query ci-dessous pour plus d'informations. Voyez aussi le paragraphe sur la commande llist qui permet l'affichage complet des informations du catalogue.
Voici un exemple d'affichage produit par la commande list pools :
+------+---------+---------+---------+----------+-------------+ | PoId | Name | NumVols | MaxVols | PoolType | LabelFormat | +------+---------+---------+---------+----------+-------------+ | 1 | Default | 0 | 0 | Backup | * | | 2 | Recycle | 0 | 8 | Backup | File | +------+---------+---------+---------+----------+-------------+
Comme mentionné précédemment, la commande list affiche des informations du catalogue. Certais éléments sont ajoutés dans le catalogue dès le démarrage de Bacula, mais en général, la plupart ne le sont que lorsqu'ils sont utilisés pour la première fois. C'est le cas des clients, des jobs, etc.
Bacula créé une entrée relative à un nouveau client dans le catalogue la première fois que vous exécutéz un job pour ce client. L'entrée est créée que le job aboutisse ou qu'il échoue, mais il doit au moins démarrer. Lorsque le client est contacté, des informations supplémentaires sont récupérées du client (le résultat d'un "uname -a") et ajoutées au catalogue. Un status n'entraîne pas l'enregistrement dans le catalogue.
Si vous voulez visualiser les ressources Client disponibles dans votre catalogue, utilisez la commande show clients.
Si, au lieu du list pools de l'exemple précédent, vous saisissez llist pools, vous obtiendrez un affichage de ce genre :
PoolId: 1
Name: Default
NumVols: 0
MaxVols: 0
UseOnce: 0
UseCatalog: 1
AcceptAnyVolume: 1
VolRetention: 1,296,000
VolUseDuration: 86,400
MaxVolJobs: 0
MaxVolBytes: 0
AutoPrune: 0
Recycle: 1
PoolType: Backup
LabelFormat: *
PoolId: 2
Name: Recycle
NumVols: 0
MaxVols: 8
UseOnce: 0
UseCatalog: 1
AcceptAnyVolume: 1
VolRetention: 3,600
VolUseDuration: 3,600
MaxVolJobs: 1
MaxVolBytes: 0
AutoPrune: 0
Recycle: 1
PoolType: Backup
LabelFormat: File
La commande mount est utilisée pour obtenir de Bacula qu'il lise un volume chargé dans un lecteur. C'est un moyen d'indiquer à Bacula que vous avez chargé une cartouche qu'il doit examiner. Cette commande n'est utilisée que lorsque Bacula a demandé votre intervention pour charger un lecteur vide, ou lorsque vous avez explicitement démonté un volume avec la commande unmount dans la Console, ce qui provoque la fermeture du lecteur. Si vous avez une librairie, vous ne ferez pas opérer Bacula dessus avec la commande mount. Voici les différentes formes de cette commande :
mount storage=<storage-name>
mount [ jobid=<id> | job=<job-name> ]
Si vous avez spécifié Automatic Mount = yes dans la ressource Device du Storage Daemon, Alors Bacula pourra accéder automatiquement au volume, à moins que vous ne l'ayez explicitement démonté (unmount) dans la Console.
La commande python restart réinitialise l'interpréteur Python du Director. Ceci peut être très utile pour effectuer des tests, car une fois que le Director est lancé, et l'interpréteur Python initialisé, il n'y a pas d'autre moyen de lui faire intégrer des modifications du script de démarrage DirStartUp.py. Pour plus de détails sur l'écriture de scripts Python, consultez le chapitre Ecrire des scripts Python.
prune files|jobs|volume client=<client-name> volume=<volume-name>
Pour qu'un volume soit élagué, son VolStatus doit être Full, Used, ou Append, faute de quoi l'élagage sera sans effet.
purge files jobid=<jobid>|job=<job-name>|client=<client-name>
purge jobs client=<client-name> (of all jobs)
purge volume|volume=<vol-name> (of all jobs)
Pour qu'un volume puisse être purgé, son VolStatus doit être Full, Used, ou Append, faute de quoi la purge sera sans effet.
relabel storage=<storage-name> oldvolume=<old-volume-name> volume=<newvolume-name>
Si vous omettez l'un quelconque des arguments, la console vous sollicitera pour obtenir les informations manquantes. Pour qu'un volume puisse être ré-étiqueté, il doit figurer dans le catalogue, et avoir le statut Purged ou Recycle. Cette situation peut se présenter automatiquement par l'application des périodes de rétention, ou vous pouvez l'obtenir par une purge explicite du volume.
Une fois que le volume a été physiquement ré-étiqueté, les données qu'il contenait sont définitivement et irrémédiablement perdues.
release storage=<storage-name>
Après cette commande, le lecteur est gardé à l'état ouvert par Bacula (sauf si l'option Always Open est désactivée dans la configuration du Storage Daemon), et il ne peut donc être utilisé par un autre programme. Toutefois, il est possible, avec certains lecteurs, de changer la cartouche à ce stade. Lors du prochain job, Bacula saura relire l'étiquette de la cartouche pour savoir laquelle est montée. Si vous voulez être en mesure d'utiliser le lecteur avec un autre programme, par exemple mt, vous devez uiliser la commande unmount pour que Bacula le libère complètement.
Bien qu'il soit possible de recharger la configuration du Director à la volée, alors même que des jobs sont en cours d'exécution, il faut garder à l'esprit que c'est une opération complexe, qui n'est pas dénuée d'effets de bords. C'est pourquoi il est recommandé, si vous êtes amené à utiliser la commande reload, de redémarrer le Director dès que vous en aurez l'opportunité.
restore storage=<storage-name> client=<client-name> where=<path> pool=<pool-name> fileset=<fileset-name> select current all done
Où l'option current, si elle est spécifiée, indique à la commande restore de sélectionner automatiquement la sauvegarde la plus récente (sinon, vous serez sollicité à ce sujet). L'option all, si elle est spécifiée, indique à la commande restore de restaurer tous les fichiers (sinon, vous serez sollicité à ce sujet). Pour plus de détails concernant la commande restore, consultez le chapitre Restaurations avec Bacula.
run job=<job-name> client=<client-name> fileset=<FileSet-name> level=<level-keyword> storage=<storage-name> where=<directory-prefix> when=<universal-time-specification> yes
Toute information omise quoique requise fait l'objet d'une liste de sélection, et avant le lancement du job, un bilan des paramètres vous est présenté avec options d'accord, refus et modification, à moins que vous ayez spécifié yes, auquel cas le job est immédiatement envoyé vers le planificateur.
Sur mon système, j'obtiens ce qui suit lorsque je lance la commande run :
A job name must be specified.
The defined Job resources are:
1: Matou
2: Polymatou
3: Rufus
4: Minimatou
5: Minou
6: PmatouVerify
7: MatouVerify
8: RufusVerify
9: Watchdog
Select Job resource (1-9):
Si je choisis le numéro 5, j'obtiens :
Run Backup job JobName: Minou FileSet: Minou Full Set Level: Incremental Client: Minou Storage: DLTDrive Pool: Default When: 2003-04-23 17:08:18 OK to run? (yes/mod/no):
Si maintenant j'entre yes, le job est exécuté. Si je choisis mod, voici les otpions qui me sont proposées :
Parameters to modify:
1: Level
2: Storage
3: Job
4: FileSet
5: Client
6: When
7: Pool
Select parameter to modify (1-7):
Vous pouvez, si vous le souhaitez, démarrer un job plus tard, en utilisant le paramètre When. Pour cela, faites le choix mod, puis sélectionnez When (no. 6) et enfin, saisissez l'heure et le jour de lancement désirés au format AAAA-MM-JJ HH:MM:SS.
Cette commande est utilisée pour paramétrer le niveau de débuggage de chaque daemon. Voici la forme complète de cette commande.
setdebug level=nn [trace=0/1 client=<client-name> | dir | director | storage=<storage-name> | all]
Si le paramètre de traçage est actif (trace=1), alors le daemon est placé en mode traçage, ce qui signifie que toutes les informations de débuggage sont envoyées vers le fichier bacula.trace dans le répertoire courant du daemon. En principe, ce n'est nécessaire que pour le débuggage des clients Win32 où les informations ne peuvent être envoyées vers un terminal ou redirigées vers un fichier. en mode traçage, chaque message de débuggage est ajouté au fichier, que vous devez supprimer explicitement lorsque vous avez fini.
Cette commande vous permet d'interroger directement le catalogue. Notez que vous devriez savoir exactement ce que vous faites en utilisant cette commande, car vous pouvez endommager sérieusement votre catalogue. Consultez le paragraphe relatif à la commande query qui offre un moyen à la fois plus simple et plus sur de saisir des requêtes SQL.
En fonction du moteur de base de données que vous utilisez (MySQL, PostgreSQL ou SQLite), vous disposerez de commandes quelque peu différentes. Pour plus de détails, référez-vous aux documentations de MySQL, PostgreSQL ou SQLite.
status [all | dir=<dir-name> | director | client=<client-name> | storage=<storage-name> | days=nnn]
Si vous entrez status dir, la Console énumère tous les jobs en cours d'exécution, un résumé des jobs planifié pour exécution au cours des prochaines 24 heures incluant le volume qui sera probablement utilisé, et donne la liste des dix derniers jobs exécutés avec leurs états. Gardez à l'esprit les deux éléments suivants :
Dans la liste des jobs en cours d'exécutions, vous pouvez trouver ce type d'informations :
2507 Catalog MatouVerify.2004-03-13_05.05.02 is waiting execution
5349 Full CatalogBackup.2004-03-13_01.10.00 is waiting for higher
priority jobs to finish
5348 Differe Minou.2004-03-13_01.05.09 is waiting on max Storage jobs
5343 Full Rufus.2004-03-13_01.05.04 is running
La liste ci-dessus indique que le job de JobId 5343 (Rufus) est en cours. Le job de JobId 5348 (Minou) est en attente de la fin du job 5343 qui utilise la même ressource Storage, ce qui provoque le "waiting on max Storage jobs". Le job de JobId 5349 a une priorité inférieure à celle de tous les autres jobs, aussi, il est en attente de la fin de jobs de priorités supérieures. Finalement, le job de jobId 2508 (MatouVerify) est en attente ("waiting execution") car un seul job peut être exécuté en même temps.
Si vous faites un status dir, Bacula affiche par défaut les premières occurrences de tous les jobs prévus pour exécution aujourd'hui et demain. Si vous voulez voir les jobs prévus pour les trois prochains jours, (Si, par exemple vendredi, vous voulez voir les premières occurrences des cartouches à utiliser vendredi, samedi, dimanche et lundi), vous pouvez ajouter l'option days=3. Notez, days=0 montre les premières occurrences des jobs planifiés pour être exécutés aujourd'hui seulement. Si vous avez plusieurs exécutions planifiées, pour chaque job, seule la première occurrence sera affiché pour la période spécifiée.
Si votre job paraît bloqué, vous pouvez avoir une idée générale du problème en utilisant status dir, et obtenir une information plus spécifique avec status storage=xxx. Par exemple, si j'utilise cette dernière commande sur un système inoccupé, j'obtiens :
status storage=File
Connecting to Storage daemon File at 192.168.68.112:8103
rufus-sd Version: 1.39.6 (24 March 2006) i686-pc-linux-gnu redhat (Stentz)
Daemon started 26-Mar-06 11:06, 0 Jobs run since started.
Running Jobs:
No Jobs running.
====
Jobs waiting to reserve a drive:
====
Terminated Jobs:
JobId Level Files Bytes Status Finished Name
======================================================================
59 Full 234 4,417,599 OK 15-Jan-06 11:54 kernsave
====
Device status:
utochanger "DDS-4-changer" with devices:
"DDS-4" (/dev/nst0)
Device "DDS-4" (/dev/nst0) is mounted with Volume="TestVolume002"
Pool="*unknown*"
Slot 2 is loaded in drive 0.
Total Bytes Read=0 Blocks Read=0 Bytes/block=0
Positioned at File=0 Block=0
Device "Dummy" is not open or does not exist.
No DEVICE structure.
Device "DVD-Writer" (/dev/hdc) is not open.
Device "File" (/tmp) is not open.
====
In Use Volume status:
====
Ce qui révèle qu'aucun job n'est en cours d'exécution, et qu'aucun des périphériques n'est en cours d'utilisation. Si je démonte la librairie (unmount), qui ne sera plus utilisée dans cet exemple, et que je lance un job qui utilise le stockage File, le job se bloque. Si je demande à nouveau status storage=xxx, j'obtiens :
status storage=File
...
Device status:
Autochanger "DDS-4-changer" with devices:
"DDS-4" (/dev/nst0)
Device "DDS-4" (/dev/nst0) is not open.
Device is BLOCKED. User unmounted.
Drive 0 is not loaded.
Device "Dummy" is not open or does not exist.
No DEVICE structure.
Device "DVD-Writer" (/dev/hdc) is not open.
Device "File" (/tmp) is not open.
Device is BLOCKED waiting for media.
====
...
Il devrait maintenant être clair que si un job nécessitant la librairie est exécuté, il bloquera en raison du démontage de cette dernière par l'utilisateur. Mais le problème pour le job que j'ai lancé avec le périphérique "File" est que le périphérique est bloqué en attente d'un media : Bacula a besoin que vous étiquetiez un volume.
unmount storage=<storage-name> unmount [ jobid=<id> | job=<job-name> ]
media, volume, pool, slots
Dans le cas de la mise à jour d'un volume, vous serez interrogé sur le paramètre que vous voulez modifier. Voici ces paramètres :
Volume Status Volume Retention Period Volume Use Duration Maximum Volume Jobs Maximum Volume Files Maximum Volume Bytes Recycle Flag Slot InChanger Flag Pool Volume Files Volume from Pool All Volumes from Pool
Pour le paramètre slot, update slots, Bacula obtient une liste de tous les slots et de leurs codes barres du Storage Daemon, pour chaque code barres trouvé, le slot est mis à jour dans l'enregistrement Media du catalogue. C'est très pratique si vous déplacez des cartouches dans la librairie, ou si vous changez des magasins de cartouches. Dans la foulée, le drapeau InChanger est aussi mis à jour.Ceci permet à BAcula de savoir quels cartouches sont effectivement dans la librairie.
Si vous n'avez pas de lecteur de codes barres, vous pouvez faire la même chose depuis la version 1.33 grâce à la commande update slots scan. Le mot-clef scan ordonne à Bacula de monter physiquement chaque cartouche afin de lire son VolumeName.
Pour le paramètre Pool, update pool, Bacula déplace le volume de son pool courant vers le pool spécifié.
Pour les parmètres Volume from Pool et All Volumes from Pool, les valeurs suivantes sont mises à jour depuis l'enregistrement de pool : Recycle, VolRetention, VolUseDuration, MaxVolJobs, MaxVolFiles, and MaxVolBytes.
Voici la forme complète de la commande update :
update volume=xxx pool=yyy slots volstatus=xxx VolRetention=ddd
VolUse=ddd MaxVolJobs=nnn MaxVolBytes=nnn Recycle=yes|no
slot=nnn enabled=n
use <database-name>
Les requêtes suivantes sont actuellement (version 1.24) disponibles :
Available queries: 1: List Job totals: 2: List where a file is saved: 3: List where the most recent copies of a file are saved: 4: List total files/bytes by Job: 5: List total files/bytes by Volume: 6: List last 20 Full Backups for a Client: 7: List Volumes used by selected JobId: 8: List Volumes to Restore All Files: 9: List where a File is saved: Choose a query (1-9):
wait [jobid=nn] [jobuid=unique id] [job=job name]
Voici une liste de commandes préfixées d'un point (.). Elles ont pour vocation d'être utilisées soit dans des programmes batch, soit par des interfaces graphiques. Elles ne sont, en principe, pas utilisées en mode interactif. Une fois que le développement d'interfaces graphiques aura démarré, cette liste s'accroîtra considérablement.
.backups job=xxx list backups for specified job
.defaults client=xxx fileset=yyy list defaults for specified client
.die cause the Director to segment fault (for debugging)
.dir when in tree mode prints the equivalent to the dir command,
but with fields separated by commas rather than spaces.
.jobs list all job names
.levels list all levels
.filesets list all fileset names
.clients list all client names
.pools list all pool names
.types list job types
.msgs return any queued messages
.messages get quick messages
.help help command output
.quit quit
.status get status output
.exit quit
Normalement, toutes les commandes saisies dans la Console sont immédiatement transmises au Director, qui peut résider sur une autre machine, afin d'y être exécutées. Il existe cependant quelques commandes, toutes précédées du caractère arobase (@), qui ne sont pas envoyées au Director, mais directement interprétées par la Console. Notez que seule la Console tty implémente ces commandes, et non la Console GNOME. En voici la liste :
@output /dev/null
commands ...
@output
./bconsole -c ./bconsole.conf <<END_OF_DATA unmount storage=DDS-4 quit END_OF_DATA
A l'exécution de ce fichier, le périphérique DDS-4 est démonté. Vous pouvez, si vous le souhaitez, exécuter cette tâche lors d'un job avec les directives RunBeforeJob ou RunAfterJob.
Il est aussi possible d'exécuter la Console à partir de l'entrée d'un fichier contenant les commandes comme suit :
./bconsole -c ./bconsole.conf <filename
où le fichier nommé filename contient un ensemble quelconque de commandes de la Console.
Voici un exemple réel, issu des tests de régression de Bacula. Il étiquette un volume (sur disque) exécute une sauvegarde puis une restauration des fichiers sauvegardés.
bin/bconsole -c bin/bconsole.conf <<END_OF_DATA @output /dev/null messages @output /tmp/log1.out label volume=TestVolume001 run job=Client1 yes wait messages @# @# now do a restore @# @output /tmp/log2.out restore current all yes wait messages @output quit END_OF_DATA
Les données issues de la sauvegarde sont envoyées vers /tmp/log1.out et celles de la restaurations vers /tmp/log2.out. Pour vérifier que les opérations se sont déroulées correctement, les fichiers de sorties sont contrôlés avec :
grep "^Termination: *Backup OK" /tmp/log1.out backupstat=$? grep "^Termination: *Restore OK" /tmp/log2.out restorestat=$?
Si vous avez utilisé la commande label pour étiqueter un volume, alors celui-ci est automatiquement ajouté au pool, et vous n'avez pas besoin de le faire manuellement.
Une alternative consiste à ajouter plusieurs volumes à un pool sans les étiqueter préalablement. Vous devrez alors les étiqueter plus tard, lorsque Bacula en aura besoin.
Avant d'ajouter un volume à un pool, vous devez connaître les informations suivantes :
Par exemple, pour ajouter un media à un pool, vous utiliseriez les commandes suivantes dans la Console :
*add Enter name of Pool to add Volumes to: Default Enter the Media Type: DLT8000 Enter number of Media volumes to create. Max=1000: 10 Enter base volume name: Save Enter the starting number: 1 10 Volumes created in pool Default *
Pour voir ce que vous avez ajouté, tapez :
*list media pool=Default +-------+----------+---------+---------+-------+------------------+ | MedId | VolumeNa | MediaTyp| VolStat | Bytes | LastWritten | +-------+----------+---------+---------+-------+------------------+ | 11 | Save0001 | DLT8000 | Append | 0 | 0000-00-00 00:00 | | 12 | Save0002 | DLT8000 | Append | 0 | 0000-00-00 00:00 | | 13 | Save0003 | DLT8000 | Append | 0 | 0000-00-00 00:00 | | 14 | Save0004 | DLT8000 | Append | 0 | 0000-00-00 00:00 | | 15 | Save0005 | DLT8000 | Append | 0 | 0000-00-00 00:00 | | 16 | Save0006 | DLT8000 | Append | 0 | 0000-00-00 00:00 | | 17 | Save0007 | DLT8000 | Append | 0 | 0000-00-00 00:00 | | 18 | Save0008 | DLT8000 | Append | 0 | 0000-00-00 00:00 | | 19 | Save0009 | DLT8000 | Append | 0 | 0000-00-00 00:00 | | 20 | Save0010 | DLT8000 | Append | 0 | 0000-00-00 00:00 | +-------+----------+---------+---------+-------+------------------+ *
Notez que la Console a automatiquement ajouté un numéro au nom de volume de base que vous avez spécifié ("Save" dans ce cas). Si vous ne souhaitez pas ce comportement, répondez simplement 0 (zéro) à la queston "Enter number of Media volumes to create . Max=1000:" et un seul volume sera créé avec le nom exact que vous avez spécifié.