#!/bin/bash -- # Sauvegardes pour Linux (Ext4 sur LVM) # Sauvegarde de Debian stable sur Seagate4T-bkp # /dev/mapper/seagateUSB4T-bkp # LABEL="BKP_2To" UUID="fecaeae4-9dcc-11eb-bb20-0090f5f607f2" TYPE="ext4" #set -eu #o pipefail # Configuration: readonly EXCLUS="/usr/local/etc/excludeRsyncSeagate4t-bkp.txt" # Volume USB: readonly PARTLABEL="SEAGATE_usb" readonly DevSeagate='/dev/mapper/seagateUSB4T-bkp' # Si nécessaire, point de montage PAR CE SCRIPT: PTMONTAGE="/mnt/Seagate4T-bkp" # Source = tout (système inclu) SOURCE="/" # Variables de travail readonly CeScript=$(basename "$0") # Inutilisée, utile pour sauvegarde incrémentale TODO: #+DATE=$(date +%F_%s | cut -b 1-11,17-21) declare -a OPTIONS=('-auHAXCvv') CONNEXION() { # est-il connecté? sudo blkid | grep -E "SEAGATE_usb" >/dev/null connect=$? if [[ "$connect" == 0 ]] then echo "$DevSeagate est branché" else echo "$DevSeagate n'est pas connecté" exit 1 fi } ACTIVER_VG() { # chercher VG SeagateUSB4T sudo vgscan | grep -i seagateUSB4T VGSCAN=$? # l'activer: if [[ "$VGSCAN" == 0 ]] then # Activer le VG: sudo vgchange -ay seagateUSB4T else echo "le VG seagateUSB4T n'est pas accessible" exit 1 fi } DESACTIVER_VG() { # TODO Si les 2 volumes sont démontés (bkp et CD) sudo vgchange -an seagateUSB4T sudo vgscan | grep -i seagateUSB4T } declare MONTE MONTER() { # Découvrir ou creer le point de montage mount | grep "$DevSeagate" >/dev/null monte=$? MONTE=$(mount | grep "$DevSeagate" | perl -pe 's/^.*on ([^\s]+).*$/$1/') if [[ "$monte" == 0 ]] then echo "$DevSeagate est déjà monté sur $MONTE" else echo "$DevSeagate va être monté" MONTE="$PTMONTAGE" echo "MONTE" ACTIVER_VG sudo mount -text4 "$DevSeagate" "$MONTE" mountreussi=$? echo "mountreussi" if [[ "$mountreussi" == 0 ]] then echo "$CLOWN $DevSeagate est monté sur $MONTE" fi #sudo mount -text4 "$DevSeagate" "/mnt/Seagate4T-bkp" fi # } # Options par défaults: #+USBDIR="$MONTE" # Inutilisé #+echo "USBDIR" #MONTER INFOS() { echo " Sauvegarde par rsync " #echo "sur : $MONTE" #BUG echo " sur : $PTMONTAGE" echo " de:" echo " /home/" echo " /var/" echo " /usr/local/" echo " /etc/" echo " avec dpkg--get-selections.date" # TODO echo "" echo "TODO: restauration globale ou partielle" echo "Les .iso, photos, vidéos et musiques ne sont pas sauvegardés ici" exit 0 } SYNTAXE() { echo "Syntaxe de $CeScript" echo echo "$CeScript [options]" echo echo "Options:" echo "-n --dry-run" echo "-o autre option de rsync" #TODO OPTION doit être un TABLEAU! echo "-m monter seulement le volume (active d' abord le VG LVM)" echo "-M démonter seulement le volume (désactive aussi le VG LVM)" echo "-i infos sur ce script" echo "-h cet écran d'aide" exit 0 } RSYNC() { ### Construction de la commande rsync: DESTINATION="$MONTE" time sudo rsync "${OPTIONS[@]}" --stats --exclude-from="$EXCLUS" "$SOURCE" "$DESTINATION" } DEMONTER() { echo "Faut-il démonter $MONTE ?" read -p "O|Y|N" # Mettre o|y|n en capitale: REPLY=${REPLY^?} if [[ "$REPLY" == "O" || "$REPLY" == "Y" ]] then echo "Démonter" # EXIT 99 sync mount | grep -E "$PTMONTAGE" && MONTE="$PTMONTAGE" || EXIT "Attention, ne pas débrancher" sudo umount "$MONTE" && DESACTIVER_VG && echo "$MONTE est démonté, le débrancher" exit 0 else echo "Affichage alerte" echo "ATTENTION $DevSeagate est actuellement monté sur ${MONTE}, ne pas le débrancher!" exit 0 fi } # GESTION DES OPTIONS: while getopts no:ihmM option do case "$option" in n ) OPTIONS=("${OPTIONS[0]}" ' --dry-run') echo "${OPTIONS[0]}" ;; o ) OPTIONS=("${OPTIONS[*]}" "-$OPTARG") echo "OPTIONS=${OPTIONS[*]}" exit ;; i ) INFOS ; exit 0 ;; h ) SYNTAXE exit 0 ;; M ) DEMONTER exit 0 ;; * ) echo "OPTION $option non valide" exit 1 esac done shift $((OPTIND-1)) # Lancement du programme: CONNEXION MONTER DFavant=$(lsblk -lo NAME,FSUSE% | grep seagateUSB4T-bkp) RSYNC DFapres=$(lsblk -lo NAME,FSUSE% | grep seagateUSB4T-bkp) echo echo "Avant: $DFavant" echo "Après: $DFapres" DEMONTER