Journal Sauvegarder sur DAT en activant la compression

Posté par  (site web personnel) .
Étiquettes : aucune
0
10
août
2005
Pour les besoins d'une société j'ai écris un petit script sans prétention pour faire de la sauvegarde sur DAT SCSI 20/40. Rapidement j'ai été confronté au problème de place, en effet le volume dépasse les 20Go donc pour palié à cela j'ai activé la compression des cassettes. Certains vont dire pourquoi ne pas compresser la totalité des données puis les copiers sur la cassette. Avec cette méthode je perdais la possibilité de récupérer un seul fichier.

Les paramètres importants sont :
mt -f /dev/st0 rewind --> Remettre la bande au début
mt -f /dev/st0 setblk 0 --> Activer la taille de block variable
mt -f /dev/st0 compression --> Activer la compression des cassettes


J'en profite pour poster le script complet, si vous voyez des conneries dedans n'hésitez pas :)

#!/bin/sh
#
# --------------------------------------
# But : sauvegarde des fichiers sur DAT
# Auteur : Philippe MALADJIAN
# Crée : 16/07/2003
# Modifié : 10/08/2005
# --------------------------------------
#


# controle des parametres --------------
if [ $# -lt 1 ]
then
echo "Erreur : vous devez donner une action"
echo "Syntaxe : backup (sauv|rest)"
echo " - backup sauv --> lance une sauvegarde"
echo " - backup rest --> restaure la TOTALITE de la bande"

# Indisponible pour le moment
echo " - backup rest [nomfichier] --> restaure nomfichier"
exit
fi

# definition des variables -------------
PERIF=/dev/st0
SRCDIR=/home/users
LOGDIR=/var/log/backup.log
# --------------------------------------

# Sauvegarde ---------------------------
if [ $1 = sauv ]
then
DATE=`date +%d%b-%H:%M`
echo "[$DATE] : Lancement de la sauvegarde de $SRCDIR" >> $LOGDIR

# Remise au debut de la bande ----------------------
MT=`mt rewind 2>>$LOGDIR`
if [ $? = 2 ]
then
echo "[$DATE] : Erreur avec la cassette" >> $LOGDIR
exit
fi

# Lancement de la sauvegarde ------------------------
mt -f $PERIF rewind
mt -f $PERIF setblk 0
mt -f $PERIF compression
TAR=`tar -cf $PERIF $SRCDIR -X /home/informatique/admin/backup/tar_exclude 2>>$LOGDIR`
if [ $? = 2 ]
then
echo "[$DATE] : Erreur lors de la sauvegarde" >> $LOGDIR
exit
fi

# Creation du fichier index -------------------------
DATE=`date +%d%b-%H:%M`
INDEX=`tar -tf $PERIF > /tmp/index.txt 2>>$LOGDIR`
if [ $? = 2 ]
then
echo "[$DATE] : Erreur a la creation de l'index" >> $LOGDIR
exit
fi

echo "[$DATE] : Sauvegarde de $SRCDIR terminee" >> $LOGDIR
exit
fi
# --------------------------------------
Restauration -------------------------
# !!!!!!!!!! ATTENTION !!!!!!!!!!!!!!!!!
# !! Restauration de la TOTALITE de !!
# !! la bande !!
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if [ $1 = rest ]
then
# Restauration complete ------------
if [ -z "$2" ]
then
echo "ATTENTION vous avez choisis de faire une restauration complete"
echo "Elle sera effectuee dans le repertoire d'ou vous executez la commande"
echo "Souhaitez-vous continuer ? (o/n) :"
read VAR
if [ $VAR = o ]
then
MT=`mt rewind`
if [ $? = 2 ]
then
echo "mt: Cassette non chargee !"
exit
fi

TAR=`tar -xfpv $PERIF`
if [ $? = 2 ]
then
echo "tar: Impossible de restaurer la cassette"
exit
fi
exit
fi

if [ $VAR = n ]
then
exit
fi
else
# Restauration d'un fichier --------

echo "Fonction indisponible pour le moment"
exit
#MT=`mt rewind`
#if [ $? = 2 ]
#then
# echo "mt: Cassette non chargee !"
# exit
#fi
#TAR=`tar -xfpv $PERIF "$2"`
#if [ $? = 2 ]
#then
# echo "tar: Impossible de restaurer le fichier"
# exit
#fi
exit
fi
fi
# --------------------------------------

# pas de parametre passe ---------------
echo "Parametre incorrecte !"
exit
# --------------------------------------
  • # oups

    Posté par  (site web personnel) . Évalué à 7.

    Désolé toute l'indentation a sauté :(

    Born to Kill EndUser !

  • # tar/zip

    Posté par  . Évalué à 3.

    Certains vont dire pourquoi ne pas compresser la totalité des données puis les copiers sur la cassette. Avec cette méthode je perdais la possibilité de récupérer un seul fichier.

    Ca dépend quel format tu utilises. Le format zip (commandes zip et unzip) compresse chaque fichier séparément, donc tu dois pouvoir récupérer un fichier indépendamment des autres. Par contre, il est à craindre qu'il faille quand même aller chercher les infos de répertoire du .zip à un bout ou l'autre de la bande...
    • [^] # Re: tar/zip

      Posté par  (site web personnel) . Évalué à 3.

      J'ai fais des tests avec le tar.gz pour la compression total.
      Pour ce qui est du parcours de la bande, j'utilise la création d'un fichier index.txt

      INDEX=`tar -tf $PERIF > /tmp/index.txt 2>>$LOGDIR`


      Comme ça si une personne me demande le fichier toto.superimportant mais qu'elle ne connait pas le répertoire ou même le nom complet, je fais un petit grep sur le fichier index.txt et hop je récupère le necessaire.

      Born to Kill EndUser !

    • [^] # Re: tar/zip

      Posté par  . Évalué à 2.

      c'est vrai que c'est un peu le problème de tar.* par rapport à des formats intégrés comme zip (ou rar avec un certain usage). Je suis méfiant par rapport à zip/unzip, je n'ai aucune idée si ça gère les droits et tout le bordel comme "tar p" ... ça serait intéressant d'avoir une solution, aussi performante que bzip2, mais avec des index pour pouvoir accéder rapidement à un fichier. Sans ça, ça plombe les outils graphiques, qui en sont réduit à tout décompresser ...
      • [^] # Re: tar/zip

        Posté par  . Évalué à 3.

        La solution pourrait consister à "tarer" les bz2 au lieu de "bzipper" le tar. Il faudrait juste que les outils graphiques soient capables de reconnaître et traiter correctement un nom_de_fichier.bz2.tar ;)
        • [^] # Re: tar/zip

          Posté par  . Évalué à 2.

          Le principal inconviennient à tare les bzip2 est que chaque fichier bzippé va avoir son propre dictionnaire, alors que parfois de grosse ecconomies peuvent êtres faites sur un lot de fichiers similaires (typiquement des logs). Bref on va impacter sérieusement les performances de compression.

          La bonne façon de faire est de concatener les fichiers et les compresser en même temps. On obtient ainsi un seul dictionnaire pour la compression et donc de bien meilleure taux. Ensuite il suffit de prendre le catalogue du concateneur et de chercher l'index de début du fichier qui nous interresse.

          C'est ce que fait DAR.
          • [^] # Re: tar/zip

            Posté par  . Évalué à 5.

            le GROS probleme c'est surtout qu'une fois compressé il est beaucoup plus difficile de restaurer une bande avec des erreurs de lecture.
            un tar sur une bande deffectueuse => on recupere aisement la totalite des fichiers n'utilisant pas le morceau de bande abimé.
            un tar gzippé ou bzippé => plus rien.
  • # Euh...

    Posté par  . Évalué à 4.

    Salut !
    A la lecture de ton script, y'a un truc qui me chiffonne....
    Pourquoi lancer ces commandes :

    mt -f $PERIF compression
    TAR=`tar -cf $PERIF $SRCDIR -X /home/informatique/admin/backup/tar_exclude 2>>$LOGDIR`

    Quand on peut faire :
    TAR=`tar -zcf $PERIF $SRCDIR -X /home/informatique/admin/backup/tar_exclude 2>>$LOGDIR`
    Pour avoir une compression au format gzip, ou
    TAR=`tar -jcf $PERIF $SRCDIR -X /home/informatique/admin/backup/tar_exclude 2>>$LOGDIR`
    pour avoir une compression au format bzip2 (si la commande tar est compilée avec l'option qui va bien) ?
    Personnellement, j'utilise la seconde, et ça fonctionne on ne peut mieux.
    Je n'ai pas de chiffres sous la main, alors quelqu'un de plus informé que moi pourra {in,con}firmer ce qui suit.
    Si tu actives la compression avec ta commande mt, il s'agit de la compression matérielle fournie avec ton lecteur DAT. Il s'agit souvent d'un algo de compression "basique", souvent du zip, d'ailleurs, qui permet de gagner en place, c'est évident. Mais selon le type de données sauvegardées, ce n'est pas forcément l'algo fourni qui est le meilleur. A ta place, je tenterais les 3 (le matériel, le gzip, et le bzip), quitte à en essayer d'autres (compress, etc.) et j'utiliserais celui qui donne le meilleur rapport en fonction des données que je veux sauvegarder.
    Enfin, je dis ça, je dis rien, comme on dit.
    Ensuite, ce n'est pas le fait d'utiliser l'option de tar qui va bien qui empêche d'extraire un fichier ou un groupe de fichier.
    Voilà, en espérant que ça aide....
    • [^] # Re: Euh...

      Posté par  (site web personnel) . Évalué à 2.

      Il me semble que j'ai déjà essayé sans résultat mais dans le doute je viens de relancer la commande avec zcf... réponse dans quelques heures.

      Born to Kill EndUser !

    • [^] # Re: Euh...

      Posté par  (site web personnel) . Évalué à 4.

      1) se méfier des options -z et -j de tar, dispo seulement sur GNU tar. Pour des scripts de backup, la probabilité de devoir faire tourner le script sur une machine non GNU est non nulle...

      2) Pour extraire un fichier d'un .tar.gz, il faut décompresser l'ensemble (pour obtenir le .tar -- même si on ne l'écrit pas forcément sur le disque), et ensuite extraire le fichier. Sur un backup de plusieurs giga, c'est pas pratique.
    • [^] # Re: Euh...

      Posté par  (site web personnel) . Évalué à 2.

      Alors j'ai essayé et voila le résultat... je préviens c'est pas beau à voir ;)

      [11Aug-03:00] : Lancement de la sauvegarde de /home/users
      tar: Removing leading `/' from member names
      [11Aug-03:02] : Lancement de la sauvegarde de /home/users
      /dev/tape: Device or resource busy
      tar (child): /dev/st0: Cannot open: Device or resource busy
      tar (child): Error is not recoverable: exiting now
      tar: Removing leading `/' from member names
      tar: /dev/st0: Cannot open: Device or resource busy
      tar: Error is not recoverable: exiting now
      [11Aug-03:02] : Erreur a la creation de l'index
      tar: This does not look like a tar archive
      tar: Skipping to next header
      tar: Archive contains obsolescent base-64 headers
      tar: Archive contains `\375\\\325Q}\307\214e\232\342\266\325' where numeric off_t value expected
      tar: Skipping to next header
      tar: Archive contains `G\245\0203\315;\\A\024g\350\351' where numeric off_t value expected
      tar: Skipping to next header
      tar: Archive contains `\'\353pS\260\244\237\364\351\227l\226' where numeric off_t value expected
      tar: Skipping to next header
      tar: Error exit delayed from previous errors
      [11Aug-04:55] : Erreur a la creation de l'index

      Born to Kill EndUser !

      • [^] # Re: Euh...

        Posté par  (site web personnel) . Évalué à 2.

        j'ai essayé sur un répertoire plus petit /tmp et voila ce que me donne les log :

        avec -zcf ou -jzf
        [11aoû-08:32] : Lancement de la sauvegarde de /tmp
        tar: Retrait de l'en-tête `/' des noms des membres
        tar: /tmp/.font-unix/fs7100: porte (socket) ignorée
        tar: /tmp/.X11-unix/X0: porte (socket) ignorée
        tar: Ceci ne ressemble pas à une archive de type «tar»
        tar: Escamotage jusqu'à la prochaine en-tête.
        tar: Statut d'erreur reporté d'erreurs précédentes.
        [11aoû-08:33] : Erreur a la creation de l'index

        Born to Kill EndUser !

  • # Conneries...!

    Posté par  (site web personnel) . Évalué à 1.

    Jen ai vu vite fait :-)
    Parametre incorrecte => Parametre incorrect
    Et puis la licence dans l'entête qui est absente :-)

    Comment ça je ====> [ ] ?
  • # J'ai une bonne et une mauvaise nouvelle pour toi

    Posté par  . Évalué à 7.

    La bonne c'est que ce que tu cherches existe déjà et marche très bien (j'entre dans ma troisième année d'utilisation)
    http://dar.linux.free.fr/(...)

    La mauvaise c'est que tu t'es donné beaucoup de mal pour quelque-chose qui existe déjà.
  • # compression hardware ?

    Posté par  (site web personnel) . Évalué à 1.

    Yellow
    Il me semble qu'il existe aussi un switch a l'arriere des DAT pour forcer une compression hardware.

    Pourquoi n'as tu pas utilisé cette fonctionnalité?



  • # et afio alors ?

    Posté par  . Évalué à 1.

    justement afio permet de compresser fichier par fichier et s'utilise très facilement pour faire des archives ... extrait du man :
           Supports  compression  while  archiving, with the -Z option.  Will com-
           press individual files in the archive, not the  entire  archive  datas-
           tream,  which  makes  afio  compressed  archives  much more robust than
           `tar zc' type archives.
    
  • # dump ?

    Posté par  (site web personnel) . Évalué à 1.

    Tar c'est bien, mais selon l'OS de récupération, cela peut poser problème, donc c'est généralement une bonne idée de passer à dump qui marche très bien lors de restorations.

    Steph

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.