next up previous contents index
Next: GUI Programs Up: Bacula User's Guide Previous: La console Bacula   Contents   Index

Subsections


La commande restore de la console Bacula

Généralités

Nous allons maintenant décrire la restauration de fichiers avec la commande restore de la Console, qui est le mode de restauration recommandé. Il existe cependant un programme indépendant nommé bextract, qui permet lui aussi de restaurer des fichiers. Pour plus d'informations sur ce programme, consultez le chapitre Programmes utilitaires Bacula de ce manuel. Vous y trouverez aussi des informations sur le programme bls qui sert à produire une liste du contenu de vos volumes, et sur le programme bscan qui vous sera utilie si vous voulez restaurer les enregistrements du catalogue relatifs à un ancien volume qui n'y figure plus.

En général, pour restaurer un fichier ou un ensemble de fichiers, vous devez exécuter un job de type restore, par conséquent, vous devez prédéfinir un tel job dans le fichier de configuration de votre Director. Les paramètres (Client, FileSet,...) que vous définissez ici ne sont pas importants, Bacula les ajustera automatiquement lors de l'utilisation de restore.

Bacula étant un programme réseau, il vous appartient de vous assurer que vous avez sélectionné le bon client et le bon disque dur pour recevoir la restauration. Bacula peut sauvegarder le client A et restaurer ses fichiers sur le client B, pourvu que leurs systèmes ne soient pas trop différents au niveau de leurs structures de fichiers. Par défaut, Bacula restaure les données sur leur client d'origine, mais pas à leur emplacement d'origine : dans le répertoire /tmp/bacula-restores. Vous pouvez modifier ces valeurs par défaut lorsque la commande restore vous demande confirmation d'exécution du job en choisissant l'option mod.

La commande Restore

Puisque Bacula maintient un catalogue des fichiers sauvegardés, et des volumes où ils sont stockés, il peut se charger de la majeure partie du travail d'intendance. Ainsi, il vous suffit de spécifier le type de restauration que vous souhaitez (d'après la dernière sauvegarde, d'après la dernière sauvegarde antérieure à une date spécifiée...), et quels fichiers vous voulez restaurer.

Ceci est réalisé par la commande restore de la Console. Vous sélectionnez d'abord le type de restauration souhaitée ce qui entraîne la sélection des JobIds requis et la construction d'une arborescence interne à Bacula contenant les enregistrements de fichiers des JobIds sélectionnés. A ce stade, le processus de restauration entre dans un mode où vous pouvez naviguer interactivement dans l'arborescence des fichiers disponibles pour restauration et sélectionner ceux que vous voulez restaurer. Ce mode est similaire au programme de sélection de fichier interactif standard d'Unix restore.

Si vos fichiers ont été élagués, la commande restore sera dans l'incapacité de les trouver. Voyez ci-dessous pour plus de détails sur ce cas de figure.

Dans la Console, après avoir saisi restore, le menu suivant vous est présenté :

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):

A titre d'exemple, supposons que nous sélectionnions l'option 5 (restaurer à l'état le plus récent). Bacula vous demande alors le client désiré ce qui, sur mon système, se manifeste ainsi :

Defined clients:
     1: Rufus
     2: Matou
     3: Polymatou
     4: Minimatou
     5: Minou
     6: MatouVerify
     7: PmatouVerify
     8: RufusVerify
     9: Watchdog
Select Client (File daemon) resource (1-9):

Si vous n'avez qu'un client, il est automatiquement sélectionné. Dans le cas présent, j'entre Rufus pour sélectionner ce client. Bacula a maintenant connaître le FileSet à restaurer, aussi il affiche :

The defined FileSet resources are:
     1: Full Set
     2: Kerns Files
Select FileSet resource (1-2):

J'opte pour le choix 1, ma sauvegarde full. En principe, vous n'aurez qu'un FileSet pour chaque job, et si vos machines de ressemblent (mêmes systèmes), vous pouvez n'avoir qu'un seul FileSet pour tous vos clients.

A ce stade, Bacula détient toutes les informations dont il a besoin pour trouver le jeu de sauvegardes le plus récent. Il va maintenant interroger le cataloguie, ce qui peut prendre un peu de temps, et afficher quelque chose comme :

+-------+------+----------+-------------+-------------+------+-------+----------
--+
| JobId | Levl | JobFiles | StartTime   | VolumeName  | File | SesId |
VolSesTime |
+-------+------+----------+-------------+-------------+------+-------+----------
--+
| 1,792 | F    |  128,374 | 08-03 01:58 | DLT-19Jul02 |   67 |    18 |
1028042998 |
| 1,792 | F    |  128,374 | 08-03 01:58 | DLT-04Aug02 |    0 |    18 |
1028042998 |
| 1,797 | I    |      254 | 08-04 13:53 | DLT-04Aug02 |    5 |    23 |
1028042998 |
| 1,798 | I    |       15 | 08-05 01:05 | DLT-04Aug02 |    6 |    24 |
1028042998 |
+-------+------+----------+-------------+-------------+------+-------+----------
--+
You have selected the following JobId: 1792,1792,1797
Building directory tree for JobId 1792 ...
Building directory tree for JobId 1797 ...
Building directory tree for JobId 1798 ...
cwd is: /
$

(Certaines colonnes sont tromquées pour des nécessités de mise en page).

Selon le nombre de JobFiles pour chaque JobId, la construction de l'arborescence peut prendre un certain temps. Si vous constatez que tous les JobFiles sont à zéro, vos fichiers ont probalement été élagués et vous ne pourrez pas sélectionner les fichiers individuellement : vous devrez restaurer tout ou rien.

Dans notre exemple, Bacula a trouvé quatre jobs qui comprennent la sauvegarde la plus récente du client et du FileSet spécifiés. Deux des jobs ont le même JobId car le job a écrit sur deux volumes différents. Le troisième est une incrémentale qui n'a sauvegardé que 254 fichier sur les 128 374 de la full. Le quatrième est aussi une incrémentale, et n'a sauvegardé que 15 fichiers.

Maintenant Bacula insère ces jobs dans l'arborescence, sans en marquer aucun pour restauration par défaut. Il vous indique le nombre de fichiers dans l'arbre, et vous informe que le répertoire de travail courant (cwd) est /. Finalement, Bacula vous invite avec le signe ($) à saisir des commandes pour vous déplacer dans l'arborescence, et sélectionner des fichiers.

Si vous voulez que tous les fichiers de l'arbre soient marqués pour restauration à sa construction, tapez restore all.

Plutôt que de choisir l'option 5 du premier menu (sélectionner la sauvegarde la plus récente pour un client), si nous avions choisi l'option 3 (Entrer une liste de JobIds à sélectionner), et si nous avions saisi 1792,1797,1798, nous serions arrivés au même point.

Il faut noter un point si vous saisissez manuellement les JobIds : vous devez les entrer dans l'ordre où ils ont été exécutés (en général, l'ordre croissant. Si vous les sasissez dans un ordre différent, vous courrez le risque de ne pas version la plus récente d'un fichier sauvegardé plusieurs fois si celui-ci a été sauvegardé dans plusieurs jobs.

Entre vos JobIds directement peut aussi vous permettre de restaurer depuis un job qui a écrit des données sur les volumes mais qui s'est terminé en erreur.

Dans le mode sélection de fichiers, vous pouvez utiliser help ou une question (?) pour produire un résumé des commandes disponibles :

 Command    Description
  =======    ===========
  cd         change current directory
  count      count marked files in and below the cd
  dir        long list current directory, wildcards allowed
  done       leave file selection mode
  estimate   estimate restore size
  exit       same as done command
  find       find files, wildcards allowed
  help       print help
  ls         list current directory, wildcards allowed
  lsmark     list the marked files in and below the cd
  mark       mark dir/file to be restored recursively in dirs
  markdir    mark directory name to be restored (no files)
  pwd        print current working directory
  unmark     unmark dir/file to be restored recursively in dir
  unmarkdir  unmark directory name only no recursion
  quit       quit and do not do restore
  ?          print help

Par défaut, aucun fichier n'est sélectionné pour restauration (sauf si vous avez ajouté all à la ligne de commande). Si, à ce stade, vous voulez tout restaurer, vous devriez saisir mark *, puis done, Bacula écrira alors les données bootstrap dans un fichier et sollicitera votre approbation pour démarrer la restauration.

Si vous n'utilisez pas mark *, vous commencez avec une sélection vide. Vous pouvez simplement regarder et marquer (mark) les fichiers et/ou répertoires qui vous intéressent. Il est aisé de commettre une erreur dans ces opérations, et la gestion des erreurs dans Bacula n'est pas parfaite, aussi contrôlez votre travail avec la commande ls ou dir pour voir quels fichiers ont été sélectionnés. Les fichiers sélectionnés sont précédés d'une astérisque.

Pour contrôler ce qui est marqué et ce qui ne l'est pas utilisez la commande count qui affiche :

128401 total files. 128401 marked to be restored.

Chacune des commandes ci-dessus sera expliqué plus en détail dans la prochaine section. Poursuivons avec notre exemple, en validant la restauration de tous les fichiers. En saisissant done, Bacula affiche :

Bootstrap records written to /home/kern/bacula/working/restore.bsr
The restore job will require the following Volumes:
   
   DLT-19Jul02
   DLT-04Aug02
128401 files selected to restore.
Run Restore job
JobName:    kernsrestore
Bootstrap:  /home/kern/bacula/working/restore.bsr
Where:      /tmp/bacula-restores
Replace:    always
FileSet:    Kerns Files
Client:     Rufus
Storage:    SDT-10000
JobId:      *None*
OK to run? (yes/mod/no):

Examinez chaque élément attentivement pour vous assurer que tout est conforme à ce que vous souhaitez. En particulier, vérifiez la ligne where, qui vous indique dans quelle partie du système de fichiers vos données seront restaurées, et quel client va les recevoir (par défaut, les restaurations ont lieu sur le client d'origine). Ces paramètres n'auront pas forcément les bonnes valeurs, mais vous pouvez les modifier à l'aide de la commande mod et en vous laissant guider par l'invite de la console.

L'affichage ci-dessus suppose que vous ayez défini une ressource Job de type restore dans le fichier de configuration de votre Director. en principe, vous n'en n'aurez besoin que d'une, car, par nature, une restauration est une opération essentiellement manuelle. A l'aide de la Console, vous pourrez modifier le job Restore pour faire ce que vous voulez qu'il fasse.

Un exemple de ressource Job de type restore est donné plus bas.

Pour en revenir à notre exemple, en plus de vérifier le client, il est sage de vérifier que le périphérique de stockage choisi par Bacula est le bon. Bien que le FileSet soit présenté, il est en fait ignoré dans la restauration. Le processus de restauration choisit ses fichiers en lisant le fichier bootstrap, et restaure tous les fichiers associés au JobId considéré si ce fichier n'est pas spécifié.

Enfin, avant de lancer la restauration, notez que le lieu par défaut pour les fichiers restaurés n'est pas leur emplacement d'origine mais le répertoire /tmp/bacula-restores. Vous pouvez modifier cette valeur par défaut dans le fichier de configuration du Director, ou avec l'option mod. Si vous voulez restaurer les fichiers à leurs emplacements d'origine, modifiez l'option where : spécifiez la racine (/ ou rien du tout.

Si vous entrez maintenant yes, Bacula lance la restauration. le Storage Daemon va d'abord requérir le volume DLT-19Jul02, puis le DLT-04Aug02 une fois qu'il aura extrait les fichiers requis du premier.

Sélectionner des fichiers par leurs noms

Si vous n'avez qu'un petit nombre de fichiers à restaurer dont vous connaissez les noms, vous pouvez, aux choix, placer ces noms dans un fichier qui sera lu par Bacula, ou saisir les noms un par un. Les noms de fichier doivent inclure le chemin absolu. Les caractères jokers ne peuvent être utilisés.

Pour saisir la liste, choisissez l'option 7 dans le menu de la commande restore :

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):

Vous êtes alors invité à préciser le client :

Defined Clients:
     1: Timmy
     2: Tibs
     3: Rufus
Select the Client (1-3): 3

Si vous n'avez qu'un client, il est sélectionné automatiquement. Finalement, Bacula vous demande d'entrer un nom de fichier :

Enter filename:

Vous pouvez, à ce stade, saisir le chemin absolu et le nom du fichier :

Enter filename: /home/kern/bacula/k/Makefile.in
Enter filename:

Si Bacula ne peut en trouver aucune copie, il affiche ce qui suit :

Enter filename: junk filename
No database record found for: junk filename
Enter filename:

Si vous souhaitez que Bacula récupère la liste des fichiers à restaurer depuis un fichier, rédigez ce fichier et donnez lui un nom commençant par le signe moins (<) et saisissez-le ici. Lorsque vous avez entré tous les noms de fichiers, validez une ligne vide. Bacula écrit maintenant le fichier bootstrap, vous indique les cartouches qui seront utilisées, et vous propose de valider la restauration :

Enter filename:
Automatically selected Storage: DDS-4
Bootstrap records written to /home/kern/bacula/working/restore.bsr
The restore job will require the following Volumes:
   
   test1
1 file selected to restore.
Run Restore job
JobName:    kernsrestore
Bootstrap:  /home/kern/bacula/working/restore.bsr
Where:      /tmp/bacula-restores
Replace:    always
FileSet:    Kerns Files
Client:     Rufus
Storage:    DDS-4
When:       2003-09-11 10:20:53
Priority:   10
OK to run? (yes/mod/no):

Il est possible d'automatiser la sélection des fichiers en plaçant votre liste de fichiers dans, part exemple, /tmp/file-list, puis en utilisant la commande suivante :

restore client=Rufus file=</tmp/file-list

Si, en modifiant les paramètres du job restauration, vous constatez que Bacula vous demande d'entrer un numéro de job, c'est vous n'avez pour l'instant spécifié ni numéro de job, ni fichier bootstrap. Entrez simplement zéro pour pouvoir continuer et sélectionner une autre option à modifier.

Arguments de la ligne de commande

Si tout ce qui précède vous a semblé compliqué, vous admettrez certainement que ce n'est vraiment pas le cas après quelques essais. Il est possible de faire tout ce qui vient d'être vu en utilisant la ligne de commande, à l'exception de la sélection du FileSet. Voici une telle ligne de commande :

restore client=Rufus select current all done yes

Le spécification client=Rufus sélectionne automatiquement le client Rufus, l'option current précise que vous voulez une restauration à l'état le plus récent possible, et le yes élude l'invite finale yes/mod/no et exécute directement la restauration.

Voici la liste des arguments de la ligne de commandes :

Restaurer les attributs de fichiers

Selon la façon dont vous restaurez, vous pouvez ou non restaurer les attributs de fichiers à leur état initial. Voici quelques uns des problèmes auxquels vous pouvez être confrontés, et, pour les restaurations sur la machine d'origine, comment les éviter.

Restaurer sur Windows

Sur les systèmes WinNT/2K/XP, Bacula restaure les fichiers avec les droits et permissions d'origine comme on s'y attend. Ceci est aussi vérifié si vous restaurez ces fichiers vers un autre répertoire (avec l'option "where") que celui d'origine. Cependant, si le nouveau répertoire n'existe pas, le File Daemon tente de le créer. Dans certains cas, il n'y parvient pas. S'il y parvient, le répertoire créé appartient à l'utilisateur qui exécute le File Daemon, c'est-à-dire SYSTEM. Dans ce cas, il se peut que vous ayez des difficultés pour accéder aux fichiers fraichement restaurés.

Pour éviter ce problème, vous devriez créer le répertoire alternatif avant de lancer la restauration. Bacula ne changera pas les attributs de ce répertoire, du moment que ce n'est pas l'un des répertoires à restaurer.

Le répertoire de restauration par défaut est /tmp/bacula-restores/, qui devient /tmp/bacula-restores/e/ si vous restaurez depuis le disque E. Aussi, assurez-vous que ce répertoire existe avant de lancer la restauration, ou utilisez l'option mod pour sélectionner un répertoire destination existant.

Certains utilisateurs ont signalé des problèmes en restaurant des fichiers qui participent à Active Directory. Ils ont aussi rapporté que le changement de l'Id utilisateur sous lequel est exécuté Bacula de SYSTEM en un Id d'administrateur du domaine résout le problème.

Une restauration peut prendre du temps

Restaurer des fichiers est généralement beaucoup plus lent que de les sauvegarder, ce pour plusieurs raisons. La première est que lors d'une sauvegarde, la cartouche est normalement déjà positionnée, Bacula n'a qu'à écrire dessus. D'autre part, les restaurations étant si rares (par rapport aux sauvegardes), Bacula ne garde dans le catalogue que l'emplacement sur la cartouche du premier fichier et du premier bloc pour chaque job, et non l'emplacement de chaque fichier, ce qui occuperait trop de place dans le catalogue.

Bacula se place d'abord sur la bonne marque de fichier sur la cartouche, puis sur le bloc correct, puis lit séquentiellement chaque enregistrement jusqu'à trouver ceux correspondant aux fichier que vous voulez restaurer. Une fois ces fichiers restaurés, Bacula cesse de lire la cartouche.

Enfin, au lieu de simplement lire un fichier comme pour une sauvegarde, Bacula doit, lors d'une restauration, créer les fichiers, tandis que le système d'exploitation doit, de son coté, allouer de l'espace disque pour ces fichiers restaurés.

Pour toutes ces raisons, le processus de restauration est généralement beaucoup plus lent que celui de sauvegarde (une restauration peut prendre trois fois plus de temps que la sauvegarde).

Problems Restoring Files

The most frequent problems users have restoring files are error messages such as:

04-Jan 00:33 z217-sd: RestoreFiles.2005-01-04_00.31.04 Error:
block.c:868 Volume data error at 20:0! Short block of 512 bytes on
device /dev/tape discarded.

or

04-Jan 00:33 z217-sd: RestoreFiles.2005-01-04_00.31.04 Error:
block.c:264 Volume data error at 20:0! Wanted ID: "BB02", got ".".
Buffer discarded.

Both these kinds of messages indicate that you were probably running your tape drive in fixed block mode rather than variable block mode. Fixed block mode will work with any program that reads tapes sequentially such as tar, but Bacula repositions the tape on a block basis when restoring files because this will speed up the restore by orders of magnitude when only a few files are being restored. There are several ways that you can attempt to recover from this unfortunate situation.

Try the following things, each separately, and reset your Device resource to what it is now after each individual test:

  1. Set "Block Positioning = no" in your Device resource and try the restore. This is a new directive and untested.
  2. Set "Minimum Block Size = 512" and "Maximum Block Size = 512" and try the restore. If you are able to determine the block size your drive was previously using, you should try that size if 512 does not work.
  3. Try editing the restore.bsr file at the Run xxx yes/mod/no prompt before starting the restore job and remove all the VolBlock statements. These are what causes Bacula to reposition the tape, and where problems occur if you have a fixed block size set for your drive. The VolFile commands also cause repositioning, but this will work regardless of the block size.
  4. Use bextract to extract the files you want -- it reads the Volume sequentially if you use the include list feature, or if you use a .bsr file, but remove all the VolBlock statements after the .bsr file is created (at the Run yes/mod/no) prompt but before you start the restore.

Restore Errors

There are a number of reasons why there may be restore errors or warning messages. Some of the more common ones are:

file count mismatch
This can occur for the following reasons:
file size error
When Bacula restores files, it checks that the size of the restored file is the same as the file status data it saved when starting the backup of the file. If the sizes do not agree, Bacula will print an error message. This size mismatch most often occurs because the file was being written as Bacula backed up the file. In this case, the size that Bacula restored will be greater than the status size. This often happens with log files.

If the restored size is smaller, then you should be concerned about a possible tape error and check the Bacula output as well as your system logs.

Example Restore Job Resource

Job {
  Name = "RestoreFiles"
  Type = Restore
  Client = Any-client
  FileSet = "Any-FileSet"
  Storage = Any-storage
  Where = /tmp/bacula-restores
  Messages = Standard
  Pool = Default
}

If Where is not specified, the default location for restoring files will be their original locations.

File Selection Commands

After you have selected the Jobs to be restored and Bacula has created the in-memory directory tree, you will enter file selection mode as indicated by the dollar sign ($) prompt. While in this mode, you may use the commands listed above. The basic idea is to move up and down the in memory directory structure with the cd command much as you normally do on the system. Once you are in a directory, you may select the files that you want restored. As a default no files are marked to be restored. If you wish to start with all files, simply enter: cd / and mark *. Otherwise proceed to select the files you wish to restore by marking them with the mark command. The available commands are:

cd
The cd command changes the current directory to the argument specified. It operates much like the Unix cd command. Wildcard specifications are not permitted.

Note, on Windows systems, the various drives (c:, d:, ...) are treated like a directory within the file tree while in the file selection mode. As a consequence, you must do a cd c: or possibly in some cases a cd C: (note upper case) to get down to the first directory.

dir
The dir command is similar to the ls command, except that it prints it in long format (all details). This command can be a bit slower than the ls command because it must access the catalog database for the detailed information for each file.

estimate
The estimate command prints a summary of the total files in the tree, how many are marked to be restored, and an estimate of the number of bytes to be restored. This can be useful if you are short on disk space on the machine where the files will be restored.

find
The find command accepts one or more arguments and displays all files in the tree that match that argument. The argument may have wildcards. It is somewhat similar to the Unix command find / -name arg.

ls
The ls command produces a listing of all the files contained in the current directory much like the Unix ls command. You may specify an argument containing wildcards, in which case only those files will be listed. Any file that is marked to be restored will have its name preceded by an asterisk (*). Directory names will be terminated with a forward slash (/) to distinguish them from filenames.

lsmark
The lsmark command is the same as the ls except that it will print only those files marked for extraction. The other distinction is that it will recursively descend into any directory selected.

mark
The mark command allows you to mark files to be restored. It takes a single argument which is the filename or directory name in the current directory to be marked for extraction. The argument may be a wildcard specification, in which case all files that match in the current directory are marked to be restored. If the argument matches a directory rather than a file, then the directory and all the files contained in that directory (recursively) are marked to be restored. Any marked file will have its name preceded with an asterisk (*) in the output produced by the ls or dir commands. Note, supplying a full path on the mark command does not work as expected to select a file or directory in the current directory. Also, the mark command works on the current and lower directories but does not touch higher level directories.

After executing the mark command, it will print a brief summary:

    No files marked.

If no files were marked, or:

    nn files marked.

if some files are marked.

unmark
The unmark is identical to the mark command, except that it unmarks the specified file or files so that they will not be restored. Note: the unmark command works from the current directory, so it does not unmark any files at a higher level. First do a cd / before the unmark * command if you want to unmark everything.

pwd
The pwd command prints the current working directory. It accepts no arguments.

count
The count command prints the total files in the directory tree and the number of files marked to be restored.

done
This command terminates file selection mode.

exit
This command terminates file selection mode (the same as done).

quit
This command terminates the file selection and does not run the restore job.

help
This command prints a summary of the commands available.

?
This command is the same as the help command.

Restoring When Things Go Wrong

This and the following sections will try to present a few of the kinds of problems that can come up making restoring more difficult. I'll try to provide a few ideas how to get out of these problem situations. In addition to what is presented here, there is more specific information on restoring a Client and your Server in the Disaster Recovery Using Bacula chapter of this manual.

Problem
My database is broken.
Solution
For SQLite, use the vacuum command to try to fix the database. For either MySQL or PostgreSQL, see the vendor's documentation. They have specific tools that check and repair databases.

Assuming the above does not resolve the problem, you will need to restore or rebuild your catalog.

Problem
How do I restore my catalog?
Solution
If you have backed up your database nightly (as you should) and you have made a bootstrap file, you can immediately load back your database (or the ASCII SQL output). Make a copy of your current database, then re-initialize it, by running the following scripts:
   ./drop_bacula_tables
   ./make_bacula_tables
After re-initializing the database, you should be able to run Bacula. If you now try to use the restore command, it will not work because the database will be empty. However, you can manually run a restore job and specify your bootstrap file. You do so by entering the bf run command in the console and selecting the restore job. If you are using the default bacula-dir.conf, this Job will be named RestoreFiles. Most likely it will prompt you with something such as:
Run Restore job
JobName:    RestoreFiles
Bootstrap:  /home/kern/bacula/working/restore.bsr
Where:      /tmp/bacula-restores
Replace:    always
FileSet:    Full Set
Client:     rufus-fd
Storage:    File
When:       2005-07-10 17:33:40
Catalog:    MyCatalog
Priority:   10
OK to run? (yes/mod/no):
A number of the items will be different in your case. What you want to do is: to use the mod option to change the Bootstrap to point to your saved bootstrap file; and to make sure all the other items such as Client, Storage, Catalog, and Where are correct. The FileSet is not used when you specify a bootstrap file. Once you have set all the correct values, run the Job and it will restore the backup of your database. You will then need to follow the instructions for your database type to recreate the database from the ASCII backup file.

Solution
If you did save your database but did not make a bootstrap file, then recovering the database is more difficult. You will probably need to use bextract to extract the backup copy. First you should locate the listing of the job report from the last catalog backup. It has important information that will allow you to quickly find your database file. For example, in the job report for the CatalogBackup shown below, the critical items are the Volume name(s), the Volume Session Id and the Volume Session Time. If you know those, you can easily restore your Catalog.
22-Apr 10:22 HeadMan: Start Backup JobId 7510,
Job=CatalogBackup.2005-04-22_01.10.0
22-Apr 10:23 HeadMan: Bacula 1.37.14 (21Apr05): 22-Apr-2005 10:23:06
  JobId:                  7510
  Job:                    CatalogBackup.2005-04-22_01.10.00
  Backup Level:           Full
  Client:                 Polymatou
  FileSet:                "CatalogFile" 2003-04-10 01:24:01
  Pool:                   "Default"
  Storage:                "DLTDrive"
  Start time:             22-Apr-2005 10:21:00
  End time:               22-Apr-2005 10:23:06
  FD Files Written:       1
  SD Files Written:       1
  FD Bytes Written:       210,739,395
  SD Bytes Written:       210,739,521
  Rate:                   1672.5 KB/s
  Software Compression:   None
  Volume name(s):         DLT-22Apr05
  Volume Session Id:      11
  Volume Session Time:    1114075126
  Last Volume Bytes:      1,428,240,465
  Non-fatal FD errors:    0
  SD Errors:              0
  FD termination status:  OK
  SD termination status:  OK
  Termination:            Backup OK
From the above information, you can manually create a bootstrap file, and then follow the instructions given above for restoring your database. A reconstructed bootstrap file for the above backup Job would look like the following:
Volume="DLT-22Apr05"
VolSessionId=11
VolSessionTime=1114075126
FileIndex=1-1
Where we have inserted the Volume name, Volume Session Id, and Volume Session Time that correspond to the values in the job report. We've also used a FileIndex of one, which will always be the case providing that there was only one file backed up in the job.

The disadvantage of this bootstrap file compared to what is created when you ask for one to be written, is that there is no File and Block specified, so the restore code must search all data in the Volume to find the requested file. A fully specified bootstrap file would have the File and Blocks specified as follows:

Volume="DLT-22Apr05"
VolSessionId=11
VolSessionTime=1114075126
VolFile=118-118
VolBlock=0-4053
FileIndex=1-1

Problem
I try to restore the last known good full backup by specifying item 3 on the restore menu then the JobId to restore. Bacula then reports:

   1 Job 0 Files
and restores nothing.
Solution
Most likely the File records were pruned from the database either due to the File Retention period expiring or by explicitly purging the Job. By using the "llist jobid=nn" command, you can obtain all the important information about the job:
llist jobid=120
           JobId: 120
             Job: save.2005-12-05_18.27.33
        Job.Name: save
     PurgedFiles: 0
            Type: B
           Level: F
    Job.ClientId: 1
     Client.Name: Rufus
       JobStatus: T
       SchedTime: 2005-12-05 18:27:32
       StartTime: 2005-12-05 18:27:35
         EndTime: 2005-12-05 18:27:37
        JobTDate: 1133803657
    VolSessionId: 1
  VolSessionTime: 1133803624
        JobFiles: 236
       JobErrors: 0
 JobMissingFiles: 0
      Job.PoolId: 4
       Pool.Name: Full
   Job.FileSetId: 1
 FileSet.FileSet: BackupSet

Then you can find the Volume(s) used by doing:

sql
select VolumeName from JobMedia,Media where JobId=1 and JobMedia.MediaId=Media.MediaId;
Finally, you can create a bootstrap file as described in the previous problem above using this information.

If you are using Bacula version 1.38.0 or greater, when you select item 3 from the menu and enter the JobId, it will ask you if you would like to restore all the files in the job, and it will collect the above information and write the bootstrap file for you.

Problem
You don't have a bootstrap file, and you don't have the Job report for the backup of your database, but you did backup the database, and you know the Volume to which it was backed up.

Solution
Use bls to indicate where it is on the tape. For example:

./bls -j -V DLT-22Apr05 /dev/nst0
Might produce the following output:
bls: butil.c:258 Using device: "/dev/nst0" for reading.
21-Jul 18:34 bls: Ready to read from volume "DLT-22Apr05" on device "DLTDrive"
(/dev/nst0).
Volume Record: File:blk=0:0 SessId=11 SessTime=1114075126 JobId=0 DataLen=164
...
Begin Job Session Record: File:blk=118:0 SessId=11 SessTime=1114075126
JobId=7510
   Job=CatalogBackup.2005-04-22_01.10.0 Date=22-Apr-2005 10:21:00 Level=F Type=B
End Job Session Record: File:blk=118:4053 SessId=11 SessTime=1114075126
JobId=7510
   Date=22-Apr-2005 10:23:06 Level=F Type=B Files=1 Bytes=210,739,395 Errors=0
Status=T
...
21-Jul 18:34 bls: End of Volume at file 201 on device "DLTDrive" (/dev/nst0),
Volume "DLT-22Apr05"
21-Jul 18:34 bls: End of all volumes.
Of course, there will be many more records printed, but we have indicated the essential lines of output. From the information on the Begin Job and End Job Session Records, you can reconstruct a bootstrap file such as the one shown above.

Problem
How can I find where a file is stored.
Solution
Normally, it is not necessary, you just use the restore command to restore the most recently saved version (menu option 5), or a version saved before a given date (menu option 8). If you know the JobId of the job in which it was saved, you can use menu option 3 to enter that JobId.

If you would like to know the JobId where a file was saved, select restore menu option 2.

You can also use the query command to find information such as:

*query
Available queries:
     1: List Job totals:
     2: List up to 20 places where a File is saved regardless of the directory:
     3: List where the most recent copies of a file are saved:
     4: List last 20 Full Backups for a Client:
     5: List all backups for a Client after a specified time
     6: List all backups for a Client
     7: List Volume Attributes for a selected Volume:
     8: List Volumes used by selected JobId:
     9: List Volumes to Restore All Files:
    10: List Pool Attributes for a selected Pool:
    11: List total files/bytes by Job:
    12: List total files/bytes by Volume:
    13: List Files for a selected JobId:
    14: List Jobs stored in a selected MediaId:
    15: List Jobs stored for a given Volume name:
Choose a query (1-15):


next up previous contents index
Next: GUI Programs Up: Bacula User's Guide Previous: La console Bacula   Contents   Index
Kern Sibbald 2007-04-02