editor
621
modifications
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" | |||
--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] | ||
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' '/mnt/autre/ricardo') | |||
répertoire_a_sauvegarder=('' '/' '/home/ricardo/' '/' '/home/ricardo/') | |||
Ligne 54 : | Ligne 49 : | ||
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 : | ||
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é. | ||
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. | ||
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 | ||
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. | ||
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 ===============''''' | ||
#!/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" | ||
# Teste si la sauvegarde a abouti ( = 0), sinon, on sort. | |||
if (("$?" > 0)) | |||
then | |||
printf "\nErreur lors de la sauvegarde de %s\n" "$3" | |||
else | |||
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 '/' | |||
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. | ||
if [ "${deja_montee}" = 0 ] | |||
then | 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') | ||
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() | |||
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 | |||
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; | |||
else | |||
if ! grep -q "^${ddext[$index]} "${mount_rep}" ${systeme_fich[$index]}" /etc/mtab | |||
then | |||
sudo mount -t "${systeme_fich[$index]}" "${ddext[$index]}" "${mount_rep}" || { deja_montee=1; sortie_propre; } | |||
break | |||
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 | ||
fi | |||
fi | |||
;; | |||
3) echo "On sort du script"; sortie_propre | |||
;; | |||
*) echo "Saisie non valide !" | |||
;; | |||
esac | |||
done | |||
# 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" | |||
chemin_trash="${XDG_DATA_HOME:-$HOME/.local/share}/Trash" | |||
corbeille="$chemin_trash/files" | |||
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]] |