next up previous contents index
suivant: GUI Programs monter: Configuration de la Console précédent: La console Bacula   Table des matières   Index

Sous-sections


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

Problèmes lors de la restauration de fichiers

Les problèmes que les utilisateurs rencontrent le plus souvent lors des restaurations sont des messages d'erreurs tels que :

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.

ou

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.

Ces deux types de messages indiquent que vous avez probablement utilisé votre lecteur en mode "blocs de taille fixe" plutôt qu'en mode "blocs de taille variable". Le mode "blocs de taille fixe" fonctionne avec tout programme qui lit les cartouches séquentiellement tel que tar, cependant Bacula repositionne la bande suivant les blocs lors des restaurations, ce qui lui permet d'améliorer les performances en restauration de plusieurs ordres de grandeur lorsqu'il s'agit de restaurer quelques fichiers isolés. Il existe plusieurs moyens pour vous tirer de ce mauvais pas.

Tentez-les l'un après l'autre, en rétablissant votre ressource Device après chacun des tests :

  1. Désactivez le positionnement par blocs ("Block Positioning = no" dans la ressource Device) et essayez de restaurer. Cette directive est récente et n'est pas encore bien testée.
  2. Réglez à 512 les tailles minimum et maximum de blocs ("Minimum Block Size = 512" et "Maximum Block Size = 512") et essayez de restaurer. Si vous êtes en mesure de déterminer la taille de blocs utilisée par votre lecteur pour écrire les données, vous devriez essayer cette valeur si la restauration a échoué avec 512.
  3. Editez le fichier restore.bsr à l'invite yes/mod/no de la commande Run xxx avant de valider la restauration, et supprimez tous les enregistrements VolBlock. Ce sont eux qui causent les repositionnements de la bande et les problèmes qui s'ensuivent si vous utilisez des blocs de taille fixe sur votre lecteur. Les commandes VolFile provoquent aussi le repositionnement, mais celui-ci fonctionne indépendamment de la taille des blocs.
  4. Utilisez bextract pour extraire vos fichiers -- ce programme lit les volumes séquentiellement si vous utilisez la fonctionnalité des listes d'inclusions, ou si vous utilisez un fichier .bsr (privé des enregistrements VolBlock) à l'invite "yes/mod/no" qui précède le lancement de la restauration.

Erreurs de restaurations

Il existe de multiples causes qui peuvent être à l'origine de messages d'alerte ou d'erreurs lors des restaurations. Les plus courantes sont les suivantes :

file count mismatch
Cette erreur peut se produire dans les cas suivants :
file size error
Lorsque Bacula restaure un fichier, il vérifie que la taille du fichier restauré est conforme aux données d'état enregistrées au début de la sauvegarde du fichier. En cas de divergence, Bacula affiche un message d'erreur. Cet divergence survient presque toujours à cause d'une écriture du fichier au cours de sa sauvegarde. Dans ce cas, la taille du fichier restauré est plus grande que la taille enregistrée dans les données d'état. Cette erreur se produit souvent avec les fichiers de journaux.

Si en revanche la taille du fichier restaurée est plus petite, vous devriez pousser vos investigations du coté d'un éventuel problème de bande et contrôler les rapports de Bacula ainsi que votre système de journalisation.

Un exemple de ressource Restore Job

Job {
  Name = "RestoreFiles"
  Type = Restore
  Client = Any-client
  FileSet = "Any-FileSet"
  Storage = Any-storage
  Where = /tmp/bacula-restores
  Messages = Standard
  Pool = Default
}
Si la directive Where n'est pas précisée, les fichiers sont restaurés à leur emplacement d'origine.

Les commande de sélection de fichiers

Une fois que vous avez sélectionné les jobs à restaurer et après que Bacula a créé l'arborescence des répertoires en mémoire, vous entrez dans le mode de sélection de fichiers, ce qui est rappelé par l'invite ($). Dans ce mode, vous pouvez utiliser les commandes énumérées plus haut. Vous pouvez naviguer dans l'arborescence avec la commande cd tout comme vous le feriez dans un système de fichiers. Lorsque vous êtes dans un répertoire, vous pouvez en sélectionner des fichiers ou répertoires pour restauration. Par défaut, aucun fichier n'est sélectionné. Si vous souhaitez au contraire partir d'une situation où tous les fichiers sont sélectionnés, saisissez simplement : cd / et mark *. Sinon, sélectionnez vos fichiers avec la commande mark. Les commandes disponibles sont :

cd
La commande cd change le répertoire courant en l'argument spécifié. les caractères joker ne sont pas admis.

Notez que sur les systèmes Windows, les différents disques (c:, d:, ...) sont traités comme des répertoires dans l'arborescence. Une conséquence est que vous devez saisir cd c: ou éventuellement cd C: pour descendre dans le premier répertoire.

dir
La commande dir est similaire à la commande ls, mais produit un affichage au format long (tous les détails). Cette commande peut être un peu plus lente que la commande ls car elle nécessite l'accès au catalogue pour produire les informations détaillées concernant chaque fichier.

estimate
La commande estimate affiche un aperçu du nombre total de fichiers dans l'arbre, de ceux sélectionnés pour restauration, et une estimation du nombre d'octets à restaurer. Ceci peut-être très utile si la machine où vous comptez restaurer est limitée en espace disque.

find
La commande find prend un ou plusieurs arguments et affiche tous les fichiers de l'arbre qui satisfont ces arguments. Les arguments peuvent comporter des caractères joker. Cette commande est similaire à la commande Unix find / -name arg.

ls
La commande ls produit la liste des fichiers du répertoire courant, comme le ferait la commande Unix ls. Vous pouvez spécifier un argument comportant des caractères joker, auquel cas seuls les fichiers concernés seront listés. Le nom de tout fichier sélectionné pour restauration est précédé d'un astérisque (*). Les noms de répertoires sont suivis d'une barre oblique avant (slash /) pour les distinguer des noms de fichiers.

lsmark
La commande lsmark est similaire à la commande ls, mais de portée restreinte aux fichiers sélectionnés pour restauration. D'autre part, contrairement à lsmark, elle descend récursivement dans les sous-répertoire du répertoire sélectionné.

mark
La commande mark vous permet de sélectionner vos fichiers pour restauration. Elle prend pour unique argument le nom du fichier ou répertoire (du répertoire courant) à restaurer. L'argument peut comporter des caractères joker, auquel cas tous les fichiers qui coïncident avec le motif spécifié sont sélectionnés pour restauration. Si un répertoire du répertoire courant coïncide avec l'argument, alors ce répertoire et tous les fichiers qu'il contient sont récursivement sélectionnés pour restauration. Chacun des fichiers sélectionné est identifiable par l'astérisque qui précède son nom dans la liste produite par les commandes ls ou dir. Notez que fournir un chemin absolu en argument de la commande mark ne produit pas le résultat qu'on pourrait en attendre pour sélectionner un fichier ou un répertoire du répertoire courant. La commande mark travaille sur le répertoire courant et sur les répertoires enfants, mais ne remonte pas vers les répertoires de plus haut niveau.

Après exécution, la commande mark affiche un bref résumé :

    No files marked.

si aucun fichier n'a été sélectionné, ou :

    nn files marked.

si certains fichiers ont été sélectionnés.

unmark
la commande unmark fonctionne exactement comme la commande mark, mais sert à désélectionner les fichiers spécifiés pour qu'ils ne soient pas restaurés. Notez que la commande unmark travaille sur le répertoire courant et sur les répertoires enfants, mais ne remonte pas vers les répertoires de plus haut niveau. Si vous souhaitez désélectionner l'ensembles des fichiers, placez-vous à la racine (cd /) avant de saisir unmark *.

pwd
La commande pwd affiche le répertoire courant. Elle ne prend aucun argument.

count
La commande count affiche le nombre total de fichiers dans l'arborescence des fichiers et le nombre de fichiers sélectionnés pour restauration.

done
Cette commande permet de quitter le mode de sélection de fichiers.

exit
Cette commande permet de quitter le mode de sélection de fichiers (identique à done).

quit
Cette commande permet de quitter le mode de sélection de fichiers sans exécuter la restauration.

help
Cette commande affiche un aperçu des commandes disponibles.

?
Cette commande est identique à help.

Restaurer lorsque tout va de travers

Je présente ici quelques-uns des problèmes qui peuvent survenir et rendre les opérations de restaurations plus difficiles, et quelques idées pour se sortir de ces situations délicates. Des informations plus spécifiques aux restaurations complètes des clients ou du serveur sont fournies dans le chapitre Disaster recovery avec Bacula.

Problème
Mon catalogue est corrompu.
Solution
Pour SQLite, utilisez la commande vacuum pour tenter de récupérer le catalogue. Pour MySQL ou PostgreSQL, consultez la documentation officielle de la base de données. Des outils spécifiques vous permettront de contrôler et réparer votre catalogue.

Dans le cas contraire, vous devrez restaurer le catalogue.

Problème
Comment restaurer mon catalogue ?
Solution
Si vous avez sauvegardé votre catalogue quotidiennement (comme il se doit...) et avez fait un fichier bootstrap, vous pouvez immédiatement recharger votre base de données. Faites une copie de votre base courante, puis réinitialisez-la avec les scripts suivants :
   ./drop_bacula_tables
   ./make_bacula_tables
Après réinitialisation de la base, vous devriez pouvoir démarrer Bacula. Si vous tentez maintenat d'utiliser la commande run, ça ne marchera pas puisque le catalogue est vierge. Cependant, vous pouvez exécuter manuellement un job et spécifier votre fichier bootstrap. Pour cela, utilisez la commande run et choisissez un job de type retore. Si vous utilisez le bacula-dir.conf par défaut, il s'agit de RestoreFiles. Vous devriez obtenir quelque chose comme :

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):
Plusieurs paramètres seront différents dans votre cas. Vous aller modifier (commande mod) le paramètre Bootstrap pour qu'il pointe vers votre fichier bootstrap, et vous assurer que les autres paramètres sont corrects. Notez que le FileSet est ignoré lorque vous utilisez un fichier bootstrap. Une fois que vous avez fixé tous les bons paramètres, exévutez le job, vous devriez récupérer la sauvegarde de votre catalogue. Il vous reste alors à régénérer votre base de données à partir du fichier de sauvegarde ASCII.

Solution
Si vous avez sauvegardé votre catalogue mais n'avez pas fait de fichier bootstrap, la reconstruction du catalogue sera un peu plus difficile. Il vous faudra probablement utiliser bextract pour extraire la sauvegarde du catalogue. D'abord vous devez la localiser en consultant le rapport de la dernière sauvegarde du catalogue. Il comporte des informations qui vous seront précieuses pour le restaurer rapidement. Par exemple, dans le rapport ci-dessous, les élements critiques sont Volume name(s), the Volume Session Id et Volume Session Time. Si vous les connaissez, vous pouvez restaurer aisément votre catalogue.
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
Avec ces informations, vous pouvez créer manuellement un fichier bootstrap et embrayer sur les instructions données plus haut pour restaurer le catalogue. Un fichier bootstrap reconstruit pour le job ci-dessus ressemblerait à ceci :

Volume="DLT-22Apr05"
VolSessionId=11
VolSessionTime=1114075126
FileIndex=1-1

où les valeurs Volume name, Volume Session Id , et Volume Session Time conformes à celles du rapport de job ont été introduites. Notez aussi le FileIndex de valeur 1, ce sera toujours le cas pourvu qu'un seul fichier ait été sauvegardé par le job.

L'inconvénient de ce fichier bootstrap par rapport à celui créé automatiquement lorsque vous le spécifiez est qu'il ne comporte aucune spécification File ou Block, aussi Bacula doit examiner toutes les données du volume pour trouver le fichier requis. Un fichier bootstrap complètement renseigné ressemblerait à ceci :

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

Problème
J'essaye de restaurer depuis la dernière sauvegarde complète en sélectionnant le choix 3 dans le menu de restauration, puis le JobId à restaurer. Bacula affiche alors :

   1 Job 0 Files
et ne restaure rien.
Solution
Les enregistrements de fichiers ont très probablement été élagués du catalogue soit par expiration de leur période de rétention (File Retention), soit par purge explicite du job. La commande llist jobid=nn permet d'obtenir toutes les informations importantes sur ce 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
Vous pouvez alors déterminer le(s) volume(s) avec :
sql
select VolumeName from JobMedia,Media where JobId=1 and JobMedia.MediaId=Media.MediaId;
Finalement, vous pouvez créer un fichier bootstrap iavec ces informations comme décrit plus haut.

A partir de la version 1.38.0, lorsque vous entrez un jobId après avoir fait le choix 3, Bacula v ous demande si vous voulez restaurer tous les fichiers du job, collecte pour vous les informations requises et écrit le fichier bootstrap.

Problème
Vous n'avez ni fichier bootstrap, ni rapport de job pour votre sauvegarde de catalogue, mais vous avez une sauvegarde et vous savez sur quel volume.

Solution
Utilisez bls pour déterminer où se trouve le fichier requis sur la bande. Par exemple :

./bls -j -V DLT-22Apr05 /dev/nst0
pourrait produire ceci :
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.
Bien sur, il y aura de nombreuses autres informations affichées, nous n'avons reproduit ici que les essentielles. D'après les informations sur le début (Begin job Session Record et sur la fin End Job Session Record du job, vous pouvez écrire un fichier bootstrap comme indiqué plus haut.

Problème
Comment puis-je déterminer où un fichier est stocké ?
Solution
En principe, ce n'est pas nécessaire. La commande restore permet de restaurer la version de la sauvegarde la plus récente (option 5 du menu), ou une version sauvegardée avant une date donnée (option 8 du menu). Si vous connaissez le JobId du job qui l'a sauvegardé, vous pouvez utiliser l'option 3 pour entrer ce JobId.

Pour rechercher le JobId d'une sauvegarde d'un fichier donné, choisissez l'option 2.

Vous pouvez aussi utiliser la commande query pour trouver l'information :

*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
suivant: GUI Programs monter: Configuration de la Console précédent: La console Bacula   Table des matières   Index
Kern Sibbald 2007-11-03