« Script de double sauvegarde alternée + clonage » : différence entre les versions

Aller à la navigation Aller à la recherche
m
change <pre> en ajout d'un espace en début de ligne
m (change <code bash> en <pre>)
m (change <pre> en ajout d'un espace en début de ligne)
Ligne 36 : Ligne 36 :
Vous ne devez modifier que la partie droite, c'est à dire après le signe '=' en dehors des parenthèses, des guillemets et des apostrophes.
Vous ne devez modifier que la partie droite, c'est à dire après le signe '=' en dehors des parenthèses, des guillemets et des apostrophes.
Attention aussi de ne pas modifier les espaces.
Attention aussi de ne pas modifier les espaces.
 
mount_rep="/mnt/autre"
<pre>mount_rep="/mnt/autre"</pre>


--la première donnée, vide, figure le [0], de façon à commencer par [1]
--la première donnée, vide, figure le [0], de façon à commencer par [1]
<pre>ddext=('' '/dev/sdb9' '/dev/sdb10' '/dev/sdb7' '/dev/sdb1')</pre>
ddext=('' '/dev/sdb9' '/dev/sdb10' '/dev/sdb7' '/dev/sdb1')
 
systeme_fich=('' 'ext3' 'ext2' 'ext3' 'ext3')
<pre>systeme_fich=('' 'ext3' 'ext2' 'ext3' 'ext3')</pre>
exclure=('' '/root/exclure' '/home/ricardo/exclure' '/root/exclure' '/home/ricardo/exclure')
 
sauve=('' '/mnt/autre/sauve' '/mnt/autre/sauve-ricardo' '/mnt/autre' '/mnt/autre/ricardo')
<pre>exclure=('' '/root/exclure' '/home/ricardo/exclure' '/root/exclure' '/home/ricardo/exclure')</pre>
répertoire_a_sauvegarder=('' '/' '/home/ricardo/' '/' '/home/ricardo/')
 
<pre>sauve=('' '/mnt/autre/sauve' '/mnt/autre/sauve-ricardo' '/mnt/autre' '/mnt/autre/ricardo')</pre>
 
<pre>répertoire_a_sauvegarder=('' '/' '/home/ricardo/' '/' '/home/ricardo/')</pre>




Ligne 54 : Ligne 49 :




<pre>mount_rep="/mnt/autre"</pre>
mount_rep="/mnt/autre"


il s'agit du répertoire qui sera monté temporairement et qui recevra votre partition de sauvegarde.
il s'agit du répertoire qui sera monté temporairement et qui recevra votre partition de sauvegarde.
Ligne 61 : Ligne 56 :




<pre> ddext=('' '/dev/sdb9' '/dev/sdb10' '/dev/sdb7' '/dev/sdb1')</pre>
ddext=('' '/dev/sdb9' '/dev/sdb10' '/dev/sdb7' '/dev/sdb1')


À vous de modifier selon l'emplacement exact de vos partitions. Il est souhaitable que ces partitions soient sur un DD (disque dur) différent de celui qui abrite votre système. Ces partitions peuvent être sur des DDs internes ou externes.
À vous de modifier selon l'emplacement exact de vos partitions. Il est souhaitable que ces partitions soient sur un DD (disque dur) différent de celui qui abrite votre système. Ces partitions peuvent être sur des DDs internes ou externes.
Il vous appartiendra, là aussi de créer ces partitions. Elles devront être de capacité suffisante pour recevoir tout votre système, plus une certaine réserve de sécurité.  
Il vous appartiendra, là aussi de créer ces partitions. Elles devront être de capacité suffisante pour recevoir tout votre système, plus une certaine réserve de sécurité.  


<pre> systeme_fich=('' 'ext3' 'ext2' 'ext3' 'ext3')</pre>
systeme_fich=('' 'ext3' 'ext2' 'ext3' 'ext3')


Là, c'est à vous de voir ce que vous aimez comme système de fichiers. À mon avis, ext2 doit suffire pour les sauvegardes mais pour le clone et sa /home, ext3 ou 4 sont peut-être à préférer.  
Là, c'est à vous de voir ce que vous aimez comme système de fichiers. À mon avis, ext2 doit suffire pour les sauvegardes mais pour le clone et sa /home, ext3 ou 4 sont peut-être à préférer.  
Bien sûr, chaque système doit être en rapport avec son adresse du dessus, attention de ne pas inverser s'ils sont différents.
Bien sûr, chaque système doit être en rapport avec son adresse du dessus, attention de ne pas inverser s'ils sont différents.


<pre> exclure=('' '/root/exclure' '/home/ricardo/exclure' '/root/exclure' '/home/ricardo/exclure')</pre>
exclure=('' '/root/exclure' '/home/ricardo/exclure' '/root/exclure' '/home/ricardo/exclure')


Là, il s'agit de créer deux "fichiers texte" dans lesquels vous inscrirez la liste de tous les répertoires/fichiers qui vous semblent devoir être exclus des sauvegardes. Le premier de ces fichiers sera placé dans le répertoire /root, tandis que le second le sera dans le répertoire ~/ c'est à dire /home/"vous".  En effet, il est inutile de sauvegarder les répertoires/fichiers temporaires, et certains autres qui sont régénérés à chaque reboute. Si vous voulez un exemple de ces fichiers "exclure", vous le trouverez dans le tuto du forum, à cette URL : http://www.debian-fr.org/sauvegarde-clonage-d-une-sid-t25179.html   
Là, il s'agit de créer deux "fichiers texte" dans lesquels vous inscrirez la liste de tous les répertoires/fichiers qui vous semblent devoir être exclus des sauvegardes. Le premier de ces fichiers sera placé dans le répertoire /root, tandis que le second le sera dans le répertoire ~/ c'est à dire /home/"vous".  En effet, il est inutile de sauvegarder les répertoires/fichiers temporaires, et certains autres qui sont régénérés à chaque reboute. Si vous voulez un exemple de ces fichiers "exclure", vous le trouverez dans le tuto du forum, à cette URL : http://www.debian-fr.org/sauvegarde-clonage-d-une-sid-t25179.html   


<pre> sauve=('' '/mnt/autre/sauve' '/mnt/autre/sauve-ricardo' '/mnt/autre' '/mnt/autre/ricardo')</pre>
sauve=('' '/mnt/autre/sauve' '/mnt/autre/sauve-ricardo' '/mnt/autre' '/mnt/autre/ricardo')


Inutile de créer ces fichiers, ils le seront lors de la première sauvegarde. Il vous appartient toutefois de renommer le second, en fonction de votre nom d'utilisateur.
Inutile de créer ces fichiers, ils le seront lors de la première sauvegarde. Il vous appartient toutefois de renommer le second, en fonction de votre nom d'utilisateur.


<pre> répertoire_a_sauvegarder=('' '/' '/home/ricardo/' '/' '/home/ricardo/')</pre>
répertoire_a_sauvegarder=('' '/' '/home/ricardo/' '/' '/home/ricardo/')


La première donnée '/' n'est pas à modifier, elle concerne l'ensemble du système, sauf les répertoires et fichiers exclus, portés dans le fichier 'exclure'. La seconde concerne votre répertoire personnel ~/ qu'il est préférable d'écrire en entier : /home/"vous".
La première donnée '/' n'est pas à modifier, elle concerne l'ensemble du système, sauf les répertoires et fichiers exclus, portés dans le fichier 'exclure'. La seconde concerne votre répertoire personnel ~/ qu'il est préférable d'écrire en entier : /home/"vous".
Ligne 85 : Ligne 80 :


'''''============ SCRIPT PROPREMENT DIT ==============='''''
'''''============ SCRIPT PROPREMENT DIT ==============='''''
<pre>
#!/bin/bash
#!/bin/bash
 
### BEGIN INIT INFO
### BEGIN INIT INFO
#  Nom du script : sauvegarde
#  Nom du script : sauvegarde
#  Auteur : Ricardo, aidé de l'équipe de 'debian-fr.org'
#  Auteur : Ricardo, aidé de l'équipe de 'debian-fr.org'
#  Date de création : juillet 2011
#  Date de création : juillet 2011
#  Utilité : faciliter les sauvegardes
#  Utilité : faciliter les sauvegardes
#  Version : cette version est écrite pour l'utilisation avec deux partitions de sauvegarde, à alterner dans le temps.  
#  Version : cette version est écrite pour l'utilisation avec deux partitions de sauvegarde, à alterner dans le temps.  
#+    Il est souhaitable que ces partitions soient sur un DD différent de celui qui abrite le système.
#+    Il est souhaitable que ces partitions soient sur un DD différent de celui qui abrite le système.
#+    Ce script a été écrit de façon à ce qu'il soit le plus générique possible. Les seules données que vous devriez devoir changer,
#+    Ce script a été écrit de façon à ce qu'il soit le plus générique possible. Les seules données que vous devriez devoir changer,
#+    se trouvent dans la partie droite des variables.  
#+    se trouvent dans la partie droite des variables.  
#  Pre-requis : voir tuto = http://www.debian-fr.org/sauvegarde-clonage-d-une-sid-t25179.html
#  Pre-requis : voir tuto = http://www.debian-fr.org/sauvegarde-clonage-d-une-sid-t25179.html
#+    et page du WIKI = http://www.isalo.org/wiki.debian-fr/index.php?title=Script_de_double_sauvegarde_altern%C3%A9e
#+    et page du WIKI = http://www.isalo.org/wiki.debian-fr/index.php?title=Script_de_double_sauvegarde_altern%C3%A9e
#  Description : script permettant d'effectuer, régulièrement et de façon simple, les sauvegardes de son système
#  Description : script permettant d'effectuer, régulièrement et de façon simple, les sauvegardes de son système
#  Droits : entièrement libres mais en cas de copie, la citation de "debian-fr.org" nous serait agréable
#  Droits : entièrement libres mais en cas de copie, la citation de "debian-fr.org" nous serait agréable
#  Modifié le : 12 août 2011, puis le 11 février 2012
#  Modifié le : 12 août 2011, puis le 11 février 2012
#  Objet de la modification : amélioration du test sur l'existence et la validité des partitions de sauvegarde.
#  Objet de la modification : amélioration du test sur l'existence et la validité des partitions de sauvegarde.
### END INIT INFO
### END INIT INFO
 
#----------------- Fonctions ----------------------------
#----------------- Fonctions ----------------------------
function sauvegarde()
function sauvegarde()
{
{
sudo rsync -av --del --exclude-from="$1" "$2" "$3"
sudo rsync -av --del --exclude-from="$1" "$2" "$3"
 
# Teste si la sauvegarde a abouti ( = 0), sinon, on sort.
# Teste si la sauvegarde a abouti ( = 0), sinon, on sort.
if (("$?" > 0))
if (("$?" > 0))
then
then
    printf "\nErreur lors de la sauvegarde de %s\n" "$3"  
  printf "\nErreur lors de la sauvegarde de %s\n" "$3"  
    else
  else
printf '\E[30;45m'"\nSauvegarde de %s : OK\n" "$3"; tput sgr0
printf '\E[30;45m'"\nSauvegarde de %s : OK\n" "$3"; tput sgr0
sleep 5 # juste le temps de pouvoir lire le résultat de la sauvegarde de '/'
sleep 5 # juste le temps de pouvoir lire le résultat de la sauvegarde de '/'
fi   
fi   
}
}
 
function sortie_propre()
function sortie_propre()
{
{
# Si la partition de sauvegarde n'était pas montée lors de l'appel, on la démonte avant de sortir.
# Si la partition de sauvegarde n'était pas montée lors de l'appel, on la démonte avant de sortir.
if [ "${deja_montee}" = 0 ]
if [ "${deja_montee}" = 0 ]
then
sudo umount "${mount_rep}"
else
# Si la partition de sauvegarde était déjà montée lors de l'appel, on sort sans la démonter mais en s'assurant que les données ont bien été écrites.
sync
fi
exit
}
 
#----------------- Variables -------------------
 
# CETTE PARTIE DOIT RETENIR TOUTE VOTRE ATTENTION, C'EST LÀ QUE VOUS PERSONNALISEREZ CE SCRIPT
#+ POUR CE FAIRE, JE VOUS CONSEILLE DE VOUS RÉFÉRER AU TUTO ET AU SCRIPT INDIQUÉS DANS LE "PRE-REQUIS" DU "BEGIN INIT INFO"
 
mount_rep="/mnt/autre"
# la première donnée, vide, figure le [0], de façon à commencer par [1]
ddext=('' '/dev/sdb9' '/dev/sdb10' '/dev/sdb7' '/dev/sdb1')
systeme_fich=('' 'ext3' 'ext2' 'ext3' 'ext3')
exclure=('' '/root/exclure' '/home/ricardo/exclure' '/root/exclure' 'home/ricardo/exclure')
sauve=('' '/mnt/autre/sauve' '/mnt/autre/sauve-ricardo' '/mnt/autre/sauve' '/mnt/autre/sauve-ricardo')
répertoire_a_sauvegarder=('' '/' '/home/ricardo/' '/' '/home/ricardo/')
 
 
#----------------- Départ du script ----------------------------
 
# Teste l'existence  du répertoire de montage, sinon, on sort avec erreur 1.
mkdir -p "${mount_rep}"
 
# Choix, puis test de la partition de sauvegarde. Si le montage ne s'effectue pas, on sort via la fonction sortie_propre()
deja_montee=0
PS3="Entrez le N° de la sauvegarde choisie : "
select choix_sauvegarde in "sauve" "sauve2" "sauve-clone" "sauve-Home-clone" quitter
do
case ${REPLY} in
  [1,2,3,4])
index=${REPLY}
if [ ! -e "${ddext[$index]}" ]  
  then  
  then  
printf "\n Impossible de se connecter à %s \n Vérifiez qu'il s'agit de la bonne partition et recommencez \n" "${ddext[$index]}" >&2; exit 1;
sudo umount "${mount_rep}"
else
else
if ! grep -q "^${ddext[$index]} "${mount_rep}" ${systeme_fich[$index]}" /etc/mtab  
# Si la partition de sauvegarde était déjà montée lors de l'appel, on sort sans la démonter mais en s'assurant que les données ont bien été écrites.
then
sync
sudo mount -t "${systeme_fich[$index]}" "${ddext[$index]}" "${mount_rep}" || { deja_montee=1; sortie_propre; }
fi
break  
exit
else
}
printf "Info : La partition ${ddext[$index]} est déjà montée\n"  
deja_montee=1  
#----------------- Variables -------------------
break  
fi
# CETTE PARTIE DOIT RETENIR TOUTE VOTRE ATTENTION, C'EST LÀ QUE VOUS PERSONNALISEREZ CE SCRIPT
fi
#+ POUR CE FAIRE, JE VOUS CONSEILLE DE VOUS RÉFÉRER AU TUTO ET AU SCRIPT INDIQUÉS DANS LE "PRE-REQUIS" DU "BEGIN INIT INFO"
;;
3) echo "On sort du script"; sortie_propre  
mount_rep="/mnt/autre"
;;
# la première donnée, vide, figure le [0], de façon à commencer par [1]
*) echo "Saisie non valide !"
ddext=('' '/dev/sdb9' '/dev/sdb10' '/dev/sdb7' '/dev/sdb1')
;;
systeme_fich=('' 'ext3' 'ext2' 'ext3' 'ext3')
esac
exclure=('' '/root/exclure' '/home/ricardo/exclure' '/root/exclure' 'home/ricardo/exclure')
done
sauve=('' '/mnt/autre/sauve' '/mnt/autre/sauve-ricardo' '/mnt/autre/sauve' '/mnt/autre/sauve-ricardo')
 
répertoire_a_sauvegarder=('' '/' '/home/ricardo/' '/' '/home/ricardo/')
 
# Teste l'emplacement de la corbeille et si elle est pleine (présence de fichier(s) dans ... /files). Si elle l'est, liste les fichiers qu'elle contient
echo -e "\033[4mCONTENU de la CORBEILLE\033[0m\n"
#----------------- Départ du script ----------------------------
 
chemin_trash="${XDG_DATA_HOME:-$HOME/.local/share}/Trash"
# Teste l'existence  du répertoire de montage, sinon, on sort avec erreur 1.
 
mkdir -p "${mount_rep}"
corbeille="$chemin_trash/files"
 
# Choix, puis test de la partition de sauvegarde. Si le montage ne s'effectue pas, on sort via la fonction sortie_propre()
if [ -z $(ls -A "$corbeille") &> /dev/null ]  
deja_montee=0
then
PS3="Entrez le N° de la sauvegarde choisie : "
echo "LA CORBEILLE EST VIDE"
select choix_sauvegarde in "sauve" "sauve2" "sauve-clone" "sauve-Home-clone" quitter
else  
do
ls -a "$corbeille"
case ${REPLY} in
read -p "on peut la vider  ? o/* : " vider  
    [1,2,3,4])
if [ "$vider" = o ]  
index=${REPLY}
then
if [ ! -e "${ddext[$index]}" ]
shopt -s dotglob
  then
rm -rf "$chemin_trash"/{files/,info/,metadata}*
printf "\n Impossible de se connecter à %s \n Vérifiez qu'il s'agit de la bonne partition et recommencez \n" "${ddext[$index]}" >&2; exit 1;
shopt -u dotglob
else
echo "CORBEILLE VIDÉE"
if ! grep -q "^${ddext[$index]} "${mount_rep}" ${systeme_fich[$index]}" /etc/mtab  
else
then
echo -e "\033[4mCORBEILLE CONSERVÉE PLEINE\033[0m"
sudo mount -t "${systeme_fich[$index]}" "${ddext[$index]}" "${mount_rep}" || { deja_montee=1; sortie_propre; }
fi
break  
fi
else
 
printf "Info : La partition ${ddext[$index]} est déjà montée\n"  
# Ordre de sauvegarde faisant appel à la fonction 'sauvegarde()'
deja_montee=1  
read -p "prêt pour la sauvegarde ? o/* : " onyva
break  
  if [ "$onyva" = o ]
fi
  then
fi
                case "$index" in
;;
    1|2)
3) echo "On sort du script"; sortie_propre  
for choix in '1' '2'
;;
        do
*) echo "Saisie non valide !"
sauvegarde "${exclure[$choix]}" "${répertoire_a_sauvegarder[$choix]}" "${sauve[$choix]}"
;;
  done
esac
      ;;
done
    3|4)
sauvegarde "${exclure[$index]}" "${répertoire_a_sauvegarder[$index]}" "${sauve[$index]}"
      ;;
# Teste l'emplacement de la corbeille et si elle est pleine (présence de fichier(s) dans ... /files). Si elle l'est, liste les fichiers qu'elle contient
esac
echo -e "\033[4mCONTENU de la CORBEILLE\033[0m\n"
else
sortie_propre
chemin_trash="${XDG_DATA_HOME:-$HOME/.local/share}/Trash"
      fi         
corbeille="$chemin_trash/files"
</pre>
if [ -z $(ls -A "$corbeille") &> /dev/null ]  
then
echo "LA CORBEILLE EST VIDE"
else  
ls -a "$corbeille"
read -p "on peut la vider  ? o/* : " vider  
if [ "$vider" = o ]  
then
shopt -s dotglob
rm -rf "$chemin_trash"/{files/,info/,metadata}*
shopt -u dotglob
echo "CORBEILLE VIDÉE"
else
echo -e "\033[4mCORBEILLE CONSERVÉE PLEINE\033[0m"
fi
fi
# Ordre de sauvegarde faisant appel à la fonction 'sauvegarde()'
read -p "prêt pour la sauvegarde ? o/* : " onyva
    if [ "$onyva" = o ]
    then
                case "$index" in
    1|2)
for choix in '1' '2'
        do
sauvegarde "${exclure[$choix]}" "${répertoire_a_sauvegarder[$choix]}" "${sauve[$choix]}"
  done
      ;;
    3|4)
sauvegarde "${exclure[$index]}" "${répertoire_a_sauvegarder[$index]}" "${sauve[$index]}"
      ;;
  esac
else
sortie_propre
      fi         
[[Catégorie:Sécurité]]
[[Catégorie:Sécurité]]
[[Catégorie:Scripts]]
[[Catégorie:Scripts]]
editor
621

modifications

Menu de navigation