Si vous avez un manque d’espace pour Bacula, ceci peut peut-être bien vous aider, mais pas vous sauver… Il faut toujours bien penser à son dimensionnement d’espace disque nécessaire dès le départ.
Mais parfois il arrive que vous faites des changements importants, comme changer les pools utilisés par certains jobs. A ce moment là, vous risquez d’avoir beaucoup de volumes qui n’ont plus de jobs associés une fois la période de rétention passée.
Cas concret :
Vous révisez votre façon de sauvegarder avec Bacula et vous décidez de dissocier les backups systèmes et backups data. Ceci afin d’avoir une rétention de 3 mois sur les systèmes et 12 mois sur les data. Cela vaut aussi pour séparer des données critiques avec rétention de 10 ans et des données temporaires de projets de < 6 mois. Les volumes des deux pools sont sur le même disque physique (une grosse baie RAID par exemple).
Si vous modifiez les jobs « data » du pool de 3 mois vers celui de 12 mois, il faut savoir que les volumes de ce pool de 3 mois seront toujours là. Ce qui est normal vu que la rétention de 3 mois est toujours active. Après les 3 mois passé, les jobs sont retirés du catalogue, et les volumes sont toujours présents afin d’être recyclés si besoin. Mais au vue de nos changements, ce nombre de volumes prêts à être recyclés est trop important et prend de l’espace physique sur le disque inutilement.
C’est comme si vous 2 pools étaient 2 containers de cargo. Celui de 3 mois était plein, mais après changement il est à moitié vide. Pourtant il garde la même taille sur le cargo. On va donc réduire la taille de ce containers pour pouvoir en mettre un autre sur l’espace gagné.
Afin de gagner de l’espace sur le disque physique et d’avoir quelque chose de plus réaliste entre le volume de données Bacula et le volume réel des données, nous allons grappiller sur cet espace « perdu ».
Obtenir la liste des volumes bacula inutilisés
Cela se fait via des requêtes SQL, la plupart étant déjà toutes faites, voici la liste :
# bconsole Connecting to Director riga.anderlecht.be:9101 1000 OK: riga-dir Version: 5.0.2 (28 April 2010) Enter a period to cancel a command. *query Automatically selected Catalog: MyCatalog Using Catalog "MyCatalog" Available queries: 1: List up to 20 places where a File is saved regardless of the directory 2: List where the most recent copies of a file are saved 3: List last 20 Full Backups for a Client 4: List all backups for a Client after a specified time 5: List all backups for a Client 6: List Volume Attributes for a selected Volume 7: List Volumes used by selected JobId 8: List Volumes to Restore All Files 9: List Pool Attributes for a selected Pool 10: List total files/bytes by Job 11: List total files/bytes by Volume 12: List Files for a selected JobId 13: List Jobs stored on a selected MediaId 14: List Jobs stored for a given Volume name 15: List Volumes Bacula thinks are in changer 16: List Volumes likely to need replacement from age or errors 17: List Jobs stored for a given Pool name
Voir le fichier /etc/bacula/scripts/query.sql pour la liste des query disponibles. Je mets celles que j’ai ici en pièce jointe : query.sql
Celle qui nous intéresse est « List total files/bytes by Volume »
Vous aurez une liste qui contiendra tous les volumes, avec tous les jobs associés du genre :
| 26 | 2,982,358 | 1,469,979,785,882 | VolFull6-0113 | | 18 | 1,517,094 | 4,388,960,546,838 | VolFull6-0115 |
On veut justement le contraire nous : tous les volumes vides. On va donc travailler en faisant un diff entre la liste de tous les volumes et cette liste de volumes associés à des jobs. On aura donc la liste des volumes n’ayant pas de job associés dans Bacula. Vous pouvez faire cela via une requête SQL dédiée pour la réutiliser via la commande query de Bacula plus tard. Mais dans mon cas, j’ai fais au plus simple.
On écrit la liste des volumes :
echo -e "query\n11" |bconsole | grep VolFull6 > /tmp/toto
On arrange proprement :
cat /tmp/toto | awk -F'|' '{print $5}' | cut -c 2- | sort | sed 's/ //g' > /tmp/toto2
On va lister les fichiers de volumes concernés en se déplaçant dans le répertoire des volumes Bacula :
cd /data/bacula/volumes/ ls -1 VolFull6* > /tmp/totovol
Visionnez le diff :
diff -y /tmp/totovol /tmp/toto2 |less
Obtenir la liste les volumes vides de jobs :
diff /tmp/totovol /tmp/toto2 | grep '<' | cut -c 3- > /tmp/volvide
Vérification des volumes Bacula
Pour savoir la taille que cela va vous faire gagner en espace physique (en Go):
somme=$(while read l ; do ls -l $l ; done < /tmp/volvide | awk '{printf $5"+"}')0 echo $((($somme)/1024/1024/1024)) 958
On va vérifier toute la liste des volumes afin d’être sur qu’il n’y a plus de job associés!
La query qui nous intéresse est la 14 « List Jobs stored for a given Volume name »
while read vol ; do echo -e "query\n14\n$vol" | bconsole | tail -n 3 ; done < /tmp/volvide
Vous aurez la liste des jobs qui ne renverra aucun résultat :
Choose a query (1-17): 14 Enter Volume name: VolFull6-0003 No results to list.
Si vous avez quelque chose du genre de ceci, vous avez fait une erreur quelque part! Attention à ne pas supprimer des jobs utiles de Bacula.
echo -e "query\n14\nVolFull6-0656" | bconsole | tail -n 3 +--------+------------+---------------------+------+-------+--------+-----------------+--------+ | 27,656 | luxembourg | 2015-05-01 22:00:01 | B | F | 84,300 | 243,832,488,949 | T | +--------+------------+---------------------+------+-------+--------+-----------------+--------+
Suppression des volumes Bacula
Suppression d’un volume du catalogue directement avec tous ses jobs associés! (dans note cas, il n’y a plus de jobs associés)
*delete volume=VolFull6-0003 yes
Pour tous les volumes :
while read vol ; do echo -e "delete volume=$vol yes" | bconsole | tail -n 3 ; done < /tmp/volvide This command will delete volume VolFull6-0006 and all Jobs saved on that volume from the Catalog This command will delete volume VolFull6-0007 and all Jobs saved on that volume from the Catalog
On supprime physiquement les volumes du disque :
cd /data/bacula/volumes while read vol ; do rm -v $vol ; done < /tmp/volvide
Voilà 950Go de gagné! Bacula pourra toujours créer des volumes dans les deux pools en fonction de ses besoins.
Et n’oubliez pas de monitorer tout cela avec l’interface web pour Bacula. Pour toutes les infos sur Bacula, je vous redirige vers la bible 🙂
15 juin 2015 at 14:03
Parfaite explication ! J’ai quelques lacunes en Lpic 3. Cet article m’est d’une grande aide.
Merci 🙂
16 juin 2015 at 16:17
Lacunes web également… Je te conseilles de la lecture rapide sur nofollow : https://www.searchenginegenie.com/seo-blog/2008/04/rel-external-nofollow-and-relnofollow.html
Cela évitera que tu perdes ton temps inutilement, Google ne te verra même pas.