Archivage et compression avec dar
Page enfant de: Stockage et gestion de fichiers
L’utilitaire open source dar
(pour Disk ARchive) a été conçu pour remplacer l’outil Unix tar
et peut être compilé par tout système de type Unix. Il est activement maintenu depuis son lancement en 2002.
Comme tar
, il permet les types de sauvegarde complète, différentielle et incrémentale. Cependant, l’accès aux fichiers et la restauration des données se font plus rapidement qu’avec tar
puisque chacune des archives contient un index des fichiers; ceci est un grand avantage pour les archives volumineuses. L’utilitaire dar
compresse chacun des fichiers séparément, ce qui offre plus de résilience dans les cas de corruption de données; il est en outre possible d’éviter la compression de fichiers fortement compressés comme les mp4
ou gz
. Parmi ses nombreuses fonctionnalités utiles, on trouve le chiffrement robuste; le découpage d’une archive en tranches pouvant aller jusqu’à un octet; la gestion d’attributs étendus, de fichiers épars, de liens physiques et symboliques; la détection de corruption de données dans les deux fichiers d’en-tête et leur récupération avec un minimum de perte. Pour plus d’information, consultez la page web et la comparaison avec tar
.
Où trouver l’utilitaire
Sur nos grappes, dar
est disponible sur /cvmfs
.
Avec StdEnv/2020 :
[user_name@localhost]$ which dar
/cvmfs/soft.computecanada.ca/gentoo/2020/usr/bin/dar
[user_name@localhost]$ dar --version
dar version 2.5.11, Copyright (C) 2002-2052 Denis Corbin
...
Utilisation manuelle
Archivage de base et extraction
Supposons le sous-répertoire test
dans le répertoire courant. Pour en faire une archive, vous pouvez entrer la commande suivante dans le répertoire courant.
[user_name@localhost]$ dar -w -c all -g test
Le fichier archive all.1.dar
est créé, où all
est le nom de base et 1
est le numéro de la tranche. Une archive peut être divisée en plusieurs tranches. Plusieurs répertoires et fichiers peuvent être inclus dans une archive, par exemple
[user_name@localhost]$ dar -w -c all -g testDir1 -g testDir2 -g file1 -g file2
Notez que tous les chemins doivent être reliés au répertoire courant.
Pour lister le contenu d’une archive, utilisez uniquement le nom de base.
[user_name@localhost]$ dar -l all
Pour extraire un fichier dans un sous-répertoire restore
, utilisez le nom de base et le chemin du fichier.
[user_name@localhost]$ dar -R restore/ -O -w -x all -v -g test/filename
L’indicateur -O
permet de faire abstraction de la propriété des fichiers. Si vous restaurez les fichiers d’une autre personne sans être administrateur (root), une mauvaise attribution de propriété pourrait causer un problème. Si vous restaurez vos propres fichiers, un message sera émis si vous n’êtes pas administrateur et vous demandera de confirmer l’opération. Pour ne pas recevoir ce message, utilisez l’indicateur -O
. Si restore/test
existe, l’indicateur -w
désactive l’avertissement.
Pour extraire un répertoire entier, utilisez
[user_name@localhost]$ dar -R restore/ -O -w -x all -v -g test
De la même manière qu’une archive est créée, vous pouvez passer plusieurs répertoires et fichiers avec plusieurs indicateurs -g
. Remarquez que dar
n’accepte pas les masques inverses (wildcard masks) Unix après -g
.
Travailler avec le système de fichiers Lustre
Certains attributs étendus sont automatiquyement sauvegardés quand les fichiers archivés proviennent d'un système de fichiers Lustre
(habituellement dans /home
, /project
ou /scratch
sur
une de nos grappes de calcul d'usage général).
Pour connaître les attributs étendus assignés à chaque fichier archivé, utilisez l'indicateur -alist-ea
.
[name@server ~]$ dar -l all -alist-ea
Nous voyons des énoncés comme Extended Attribute: [lustre.lov]
.
Avec cet attribut, les extractions de fichiers vers un endroit au format Lustre fonctionneront comme à l'habitude.
Par contre, si vous tentez d'extraire un fichier pour le stocker localement sur un nœud de calcul
(soit dans $SLURM_TMPDIR
), vous obtiendrez des messages d'erreur comme
Error while adding EA lustre.lov : Operation not supported
.
Pour éviter ces erreurs, l'indicateur -u
peut exclure un type particulier d'attribut et quand même extraire les fichiers touchés, par exemple
[name@server ~]$ dar -R restore/ -O -w -x all -v -g test -u 'lustre*'
Une autre solution est de supprimer l'attribut lustre.lov
à la création de l'archive avec le même indicateur -u
.
[name@server ~]$ dar -w -c all -g test -u 'lustre*'
En conclusion, ceci est nécessaire uniquement si vous avez l'intention d'extraire des fichiers vers un endroit qui n'a pas le format Lustre.
Sauvegarde incrémentale
Pour créer une sauvegarde différentielle et incrémentale, joignez à -A
le nom de base de l’archive référencée. Prenons l’exemple d’une sauvegarde complète nommée Monday que vous créez le lundi.
[user_name@localhost]$ dar -w -c monday -g test
Le mardi, certains des fichiers sont modifiés et seuls ceux-ci sont inclus dans une nouvelle sauvegarde incrémentale nommée tuesday
, en utilisant l'archive monday
en référence.
[user_name@localhost]$ dar -w -A monday -c tuesday -g test
Le mercredi, d’autres fichiers sont modifiés et une nouvelle sauvegarde est créée nommée wednesday
, avec l'archive tuesday
en référence.
[user_name@localhost]$ dar -w -A tuesday -c wednesday -g test
Il y a maintenant trois fichiers :
[user_name@localhost]$ ls *.dar
monday.1.dar tuesday.1.dar wednesday.1.dar
Le fichier wednesday.1.dar
contient uniquement les fichiers modifiés le mercredi, mais pas les fichiers de lundi ou mardi. La commande
[user_name@localhost]$ dar -R restore -O -x wednesday
ne restaurera que les fichiers modifiés le mercredi. Pour restaurer tous les fichiers, vous devrez passer par toutes les sauvegardes en ordre chronologique.
[user_name@localhost]$ dar -R restore -O -w -x monday # restore the full backup
[user_name@localhost]$ dar -R restore -O -w -x tuesday # restore the first incremental backup
[user_name@localhost]$ dar -R restore -O -w -x wednesday # restore the second incremental backup
Limiter la taille des tranches
Pour fixer la taille maximale en octets de chaque tranche, utilisez l’indicateur -s
suivi d’un nombre et d’une unité de mesure (k, M, G ou T). Par exemple, pour une archive de 1340Mo, la commande
[user_name@localhost]$ dar -s 100M -w -c monday -g test
crée 14 tranches nommées monday.{1..14}.dar
. Pour extraire de toutes ces tranches, utilisez le nom de base.
[user_name@localhost]$ dar -O -x monday
Scripts externes
Un membre de notre équipe a créé des fonctions bash pour rendre l'utilisation de dar
plus facile. Nous vous invitons à vous en inspirer pour la préparation de vos propres scripts. Pour les détails, voyez here.