sauvegarde/restauration de partitions
edit : je suis confus de ma bêtise, mon problème venait du fait que j'appellais pas une variable correctement... 3 heures sans y penser et quand on y revient ça saute aux yeux !
Bonjour,
actuellement en stage, je viens de faire mon tout premier script en bash permettant de sauvegarder/restaurer des partitions en local ou sur le réseau (le but étant de l'intégrer ensuite à un livecd)
le souci est qu'avant que j'intègre les fonctions de sauvegarde/restauration tout fonctionnait et depuis il semble qu'il y ait une boucle dont je n'arrive pas à me dépêtrer : /
comme du concret vaut mieux qu'on long discours voici le script en question, merci à tout ceux qui y jetteront au moins un oeil :)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313
| #! /bin/bash
## script de sauvegarde d'une partition / juin 2008
#changelog
# rev 0.1.4 : choix entre sauvegarde locale et distante
#* rev 0.1.3 : utilisation de partimage pour sauvegarde de la table de partition
# rev 0.1.2 : utilisation de curlftpfs pour sauvegarde distante
# rev 0.1.1 : copie de fichiers et compression simple vers une partition
#To do list
# ajouter les boite de dialogues -> apprendre gtkdialog
#définition des couleurs
C_RED="\e[1;31m"
C_BLUE="\e[1;34m"
C_GRAY="\e[1;30m"
C_WHITE="\e[1;37m"
C_YELLOW="\e[1;33m"
C_DEF="\033[0m"
function bkp_local ()
{
echo " Cette opération peut prendre un certain temps selon l'occupation du disque"
echo " ** Choix de la partition à sauvegarder **"
echo " Afficher la table de partition ? (y/n/r)"
read repbkpS1
if [ $repbkpS1="r" ]
then
menu_principal
else if [ $repbkpS1="y" ]
then
## fdisk -l affiche les tables de partitions des disques, mais pas leur label (= nom de volume)
fdisk -l
fi
fi
echo " Entrer le chemin complet de la partition source :"
read part_src1
echo " Entrer le chemin complet de la partition cible :"
read dest_part1
## test de l'existence du point de montage
if [ ! -z /mnt/backup ]
then
## création du point de montage s'il n'existe pas"
mkdir /mnt/backup
fi
## montage de la partition cible
mount $dest_part1 /mnt/backup
## création du repertoire d'accueil de l'image sur le ftp
mkdir /mnt/backup/img
echo " Veuillez entrer le nom souhaité pour l'image :"
read name1
## compression des fichiers et envoie de l'archive vers le ftp
echo "Copie et compression des données vers /mnt/backup/img/${name1}.000 sur $dest_part1"
partimage -V 2048 -z1 -f0 -e -d -b save $part_src1 /mnt/backup/$name1
echo " Fin de transfert"
echo " Retour au menu"
menu_principal
}
function bkp_dist ()
{
echo " Sauvegarde vers un serveur ftp"
echo "--------------------------------"
echo " Cette opération peut prendre un certain temps selon la vitesse du réseau
et la taille de l'image (~1min pour 500Mo)"
echo " ** Choix de la partition à sauvegarder **"
echo " Afficher la table de partition ? (y/n/r)"
read repbkpS2
if [ $repbkpS2="r" ]
then
menu_principal
else if [ $repbkpS2="y" ]
then
## fdisk -l affiche les tables de partitions des disques, mais pas leur label
fdisk -l
fi
fi
echo " Entrer le chemin complet de la partition :"
read part_src2
echo " Entrer le nom du serveur ftp de destination"
read ftpsrv2
## test de l'existence du point de montage du ftp
if [ ! -z /mnt/ftp ]
then
## création du point de montage s'il n'existe pas"
mkdir /mnt/ftp
fi
## montage du ftp en tant que filesystem local
curlftpfs $ftpsrv2 /mnt/ftp
## création du repertoire d'accueil de l'image sur le ftp
mkdir /mnt/ftp/img
echo "veuillez entrer le nom souhaité pour l'image :"
read name2
## compression des fichiers et envoie de l'archive vers le ftp
echo "Copie et compression des données vers /mnt/ftp/img/${name}.000 sur $ftpsrv"
partimage -V 2048 -z1 -f0 -e -d -b save $part_src2 /mnt/ftp/$name2
echo "Fin de transfert"
echo "retour au menu"
menu_principal
}
function save_part ()
{
clear
echo -e $C_YELLOW
echo "#######################################################################"
echo "# #"
echo "# SAUVEGARDE #"
echo "# #"
echo "#######################################################################"
echo -e $C_WHITE
echo " Sauvegarde locale ou distante ?"
echo "1 - local (disque données)"
echo "2 - distant (ftp)"
read bkp
case bkp in
1)
bkp_local ;;
2)
bkp_dist ;;
*)
save_part ;;
esac
}
function rest_local ()
{
echo " Cette opération peut prendre un certain temps selon la taille de l'image"
echo ""
echo " ** Choix de la partition cible **"
echo " Afficher la table de partition ? - y/n/r)"
read represtR3
if [ $represtR3="r" ]
then
menu_principal
else if [ $represtR3="y" ]
then
## fdisl -l affiche les tables de partitions des disques, mais pas leur label
fdisk -l
fi
fi
echo "Entrer le chemin _complet_ de la partition de destination:"
read part_dst3
echo "Entrer le chemin complet de la partition source"
read part_src3
## test de l'existence du point de montage de la partition source
if [ ! -z /mnt/backup ]
then
## création du point de montage s'il n'existe pas"
mkdir /mnt/backup
fi
## montage du ftp en tant que filesystem local
mount $part_src3 /mnt/backup
#lister les fichiers présents à la racine du ftp :
echo "afficher les fichiers présents dans le repertoire de sauvegarde ? (y/n)"
read represtR3
if [ $represtR3="y" ]
then
## ls -l /mnt/ft
ls -l /mnt/backup/img
fi
echo "entrer le nom exact de l'image à restaurer (sans l'extension)"
echo -e $C_BLUE
echo "note : il est possible de copier/coller du texte en console pour cela"
echo "selectionner le texte, puis cliquer avec les deux boutons en même temps"
echo -e $C_WHITE
read image3
## vérification de l'existence de l'image, tant qu'elle n'existe pas on redemande de saisir le nom
while [ ! -z /mnt/backup/img/${image3}.000 ]
do
echo -e $C_RED
echo "l'image n'existe pas, entrer le nom exact de l'image à restaurer"
echo -e $C_WHITE
read image3
done
## décompression de l'archive et copie depuis le ftp
echo "décompression des données et copie vers la partition cible"
partimage restore $part_dst3 /mnt/backup/img/${image3}.000
echo "Fin de transfert"
echo "retour au menu"
menu_principal
}
function rest_local ()
{
echo " Cette opération peut prendre un certain temps selon la taille de l'image"
echo ""
echo " ** Choix de la partition cible **"
echo " Afficher la table de partition ? - y/n/r)"
read represtR4
if [ $represtR4="r" ]
then
menu_principal
else if [ $represtR4="y" ]
then
## fdisl -l affiche les tables de partitions des disques, mais pas leur label
fdisk -l
fi
fi
echo "Entrer le chemin _complet_ de la partition de destination:"
read part_dst4
echo "Entrer le chemin complet de la partition source"
read part_src4
## test de l'existence du point de montage de la partition source
if [ ! -z /mnt/backup ]
then
## création du point de montage s'il n'existe pas"
mkdir /mnt/backup
fi
## montage du ftp en tant que filesystem local
mount $part_src4 /mnt/backup
#lister les fichiers présents à la racine du ftp :
echo "afficher les fichiers présents dans le repertoire de sauvegarde ? (y/n)"
read represtR4
if [ $represtR4="y" ]
then
## ls -l /mnt/ft
ls -l /mnt/backup/img
fi
echo "entrer le nom exact de l'image à restaurer (sans l'extension)"
echo -e $C_BLUE
echo "note : il est possible de copier/coller du texte en console pour cela"
echo "selectionner le texte, puis cliquer avec les deux boutons en même temps"
echo -e $C_WHITE
read image4
## vérification de l'existence de l'image, tant qu'elle n'existe pas on redemande de saisir le nom
while [ ! -z /mnt/backup/img/${image4}.000 ]
do
echo -e $C_RED
echo "l'image n'existe pas, entrer le nom exact de l'image à restaurer"
echo -e $C_WHITE
read image4
done
## décompression de l'archive et copie depuis le ftp
echo "décompression des données et copie vers la partition cible"
partimage restore $part_dst4 /mnt/backup/img/${image4}.000
echo "Fin de transfert"
echo "retour au menu"
menu_principal
}
function rest_part ()
{
clear
echo -e $C_YELLOW
echo "#######################################################################"
echo "# #"
echo "# RESTAURATION #"
echo "# #"
echo "#######################################################################"
echo -e $C_WHITE
echo " Restauration depuis un disque local ou depuis le réseau ?"
echo " 1 - local"
echo " 2 - réseau"
read rest
case rest in
1)
rest_local ;;
2)
rest_dist ;;
*)
rest_part ;;
}
function quit_script ()
{
echo "Sortie du script"
exit
}
function menu_principal ()
{
clear
echo -e $C_YELLOW
echo "script de sauvegarde/restauration d'une partition vers un ftp"
echo -e $C_WHITE
echo "que voulez faire ?"
echo -e $C_BLUE
echo "1 - sauvegarder"
echo "2 - restaurer"
echo "3 - sortir"
echo "4 - licence"
echo -e $C_WHITE
echo "-----------------------------------------------------------------------"
echo ""
read choice
case $choice in
1)
save_part ;;
2)
rest_part ;;
3)
quit_script ;;
*)
menu_principal ;;
esac
}
menu_principal |