Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#201 Le 20/06/2025, à 20:49

Watael

Re : script d’automatisation sauvegardes

# Fonctions de logging
log() {
    local message=$1 level=$2 logFile=$3
    printf '[%(%Y-%m-%d %H:%M:%S)T] [%s] %s\n' -1 "$level" "$message"
}

log_info() {
    log "$1" INFO "$LOG_FILE"
}

log_warning() {
    log "$1" WARNING "$LOG_FILE"
}

log_error() {
    log "$1" ERROR "$ERROR_FILE"
}

log_debug() {
    if (( DEBUG_MODE ))
    then
        log "$1" DEBUG "$DEBUG_FILE"
    fi
}

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#202 Le 20/06/2025, à 21:03

eric63

Re : script d’automatisation sauvegardes

, les clé ssh sont elle encore valide ?

oui  y‘a pas de raisons qu’elle ne le soit pas


Kubuntu 25.04 wayland Plasma 6.3.4 KDE Qt 6.12.0 noyau 6.14.0-15 Asus B760+D4 i5-12400F 4.4Ghz DDR4 32Go nvidia RTX 3060 12GB
Utilisez les drivers libres avant d’ installer une brother avec le script de demonipuch
J’utilise le clavier french AFNOR

Hors ligne

#203 Le 20/06/2025, à 21:33

eric63

Re : script d’automatisation sauvegardes

il doit y avoir un problème sur les logs de Watael
je n’ai plus de retour sur les 3 logs depuis 19h
ok c’est bon pas cherché les bon logs nommée par jour désolé pour la fausse info

Dernière modification par eric63 (Le 20/06/2025, à 21:55)


Kubuntu 25.04 wayland Plasma 6.3.4 KDE Qt 6.12.0 noyau 6.14.0-15 Asus B760+D4 i5-12400F 4.4Ghz DDR4 32Go nvidia RTX 3060 12GB
Utilisez les drivers libres avant d’ installer une brother avec le script de demonipuch
J’utilise le clavier french AFNOR

Hors ligne

#204 Le 20/06/2025, à 21:36

steph810

Re : script d’automatisation sauvegardes

Bonsoir,
ajout variable pour les ip ca trotiner depuis un moment.
tout en haut
Rajout du choix debug activer ou non, poura etre modifier, juste a commenter les lignes 24 à 28, et decommenter la 29 pour rollback
L. 61-85 ajout 2 fonction de test ssh et ping
L.238 le test avnt rsync

#!/bin/bash

####6b) Créer le service d'exécution de la sauvegarde avec logging

###script de base geole largement modifié par iznobe et Watael et steph810 pour la partie debug de remplacement (plus simple) merci à eux
###voir https://forum.kubuntu-fr.org/viewtopic.php?id=2091380&p=5
### modifier les 2 premières variables des #paramètres (ligne 72) du script suivant vos emplacements disque et UUID
###script utilisé v3.4 modifié /v3.3/v146/

# Variables IP et user en haut
ipVM="192.168.1.128"
ipPortable="192.168.1.60"

# Configuration des logs
LOG_DIR="$HOME/log/backup-script"
LOG_FILE="$LOG_DIR/backup_$(date +%Y%m%d_%H%M).log"
DEBUG_FILE="$LOG_DIR/debug_$(date +%Y%m%d_%H%M).log"
ERROR_FILE="$LOG_DIR/error_$(date +%Y%m%d_%H%M).log"

# Création du répertoire de logs s'il n'existe pas
mkdir -pv "$LOG_DIR"

# Choix du mode debug via kdialog
if kdialog --yesno "Voulez-vous activer le mode DEBUG (log verbeux) ?"; then
    DEBUG_MODE=1
else
    DEBUG_MODE=0
fi

#DEBUG_MODE=1

# Fonctions de logging
log_info() {
    local message="$1"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    echo "[$timestamp] [INFO] $message" | tee -a "$LOG_FILE"
}

log_error() {
    local message="$1"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    echo "[$timestamp] [ERROR] $message" | tee -a "$LOG_FILE" | tee -a "$ERROR_FILE"
}

log_debug() {
    local message="$1"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    if [ "$DEBUG_MODE" -eq 1 ]; then
        echo "[$timestamp] [DEBUG] $message" | tee -a "$DEBUG_FILE"
    fi
}

log_warning() {
    local message="$1"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    echo "[$timestamp] [WARNING] $message" | tee -a "$LOG_FILE"
}

# Fonction pour nettoyer les anciens logs (garde les 30 derniers jours)
cleanup_old_logs() {
    log_debug "Nettoyage des anciens logs (> 30 jours)"
    find "$LOG_DIR" -name "*.log" -type f -mtime +30 -delete 2>/dev/null
}

# Gestion des erreurs et interruptions
trap 'log_error "Script interrompu par signal"; exit 130' INT TERM

# Fonction test ping (pour vérifier si machine est accessible avant ssh)
test_ping() {
    local ip="$1"
    if ping -c 2 -W 2 "$ip" >/dev/null 2>&1; then
        log_debug "Ping vers $ip réussi"
        return 0
    else
        log_warning "Ping vers $ip échoué"
        return 1
    fi
}

# Fonction test ssh avant rsync avec timeout augmenté
test_ssh() {
    local user="$1"
    local ip="$2"
    log_debug "Test de connexion SSH vers $user@$ip..."
    if timeout 15 ssh -o ConnectTimeout=10 -o BatchMode=yes "$user@$ip" exit 2>/dev/null; then
        log_info "Connexion SSH vers $user@$ip: OK"
        return 0
    else
        log_error "Connexion SSH vers $user@$ip: ÉCHEC"
        return 1
    fi
}

# Début du script
log_info "=== DÉBUT DE LA SAUVEGARDE ==="
log_debug "Répertoire des logs: $LOG_DIR"
log_debug "Mode debug: $DEBUG_MODE"

# Nettoyage des anciens logs
cleanup_old_logs

###Paramètres
MountPoint="/media/$USER/JEUX8T"
PartitionUID="35bb9ca2-2022-4dfa-a201-1a2dde7ce1aa"
date=$(date +%F_%Hh%M)

log_info "Configuration:"
log_info "  - Point de montage: $MountPoint"
log_info "  - UUID partition: $PartitionUID"
log_info "  - Date: $date"
log_debug "Utilisateur: $USER"

# Fonction pour obtenir l'UUID du disque monté
get_disk_uuid() {
    local uuid=$(findmnt -n --output UUID "$MountPoint" 2>/dev/null)
    echo "$uuid"
}

###controle validité disque solution#125 Watael
log_info "Vérification du disque externe..."

# Mise à jour initiale de ctrlID - CORRECTION: une seule fois
ctrlID=$(get_disk_uuid)
log_debug "UUID trouvé: '$ctrlID'"
log_debug "UUID attendu: '$PartitionUID'"

if [[ "$ctrlID" != "$PartitionUID" ]]
then
    log_error "Disque non reconnu ou éteint"
    log_error "UUID trouvé: '$ctrlID'"
    log_error "UUID attendu: '$PartitionUID'"

    echo "échec"
    echo "ctrlID: '$ctrlID'"
    echo "partition: '$PartitionUID'"
    kdialog --error "Aucun disque reconnu ou disque éteint \n ALLUMER LE DISQUE EXTERNE \n AVANT de sélectionner «OK»"

    log_info "Attente du montage du disque..."
    sleep 5

    # Boucle de détection du disque
    attempt=1
    while [[ "$ctrlID" != "$PartitionUID" ]]
    do
        log_debug "Tentative $attempt - Vérification du montage..."
        sleep 2

        # Mise à jour de ctrlID avec la fonction
        ctrlID=$(get_disk_uuid)

        log_debug "Ligne $LINENO"
        echo "ctrlID: '$ctrlID'"
        echo "partition: '$PartitionUID'"
        log_debug "UUID vérifié: '$ctrlID'"
        sleep 2
        ((attempt++))

        if [ $attempt -gt 60 ]; then
            log_error "Timeout: Disque non monté après 60 tentatives"
            kdialog --error "Timeout: Impossible de détecter le disque"
            exit 1
        fi
    done

    log_info "Disque monté avec succès après $((attempt-1)) tentatives"
    echo "réussite"
    echo "ctrlID: '$ctrlID'"
    echo "partition: '$PartitionUID'"
    kdialog --info "Le disque est monté \n La sauvegarde peut être faite maintenant"

else
    log_info "Disque correctement monté"
    echo "réussite"
    echo "ctrlID: '$ctrlID'"
    echo "partition: '$PartitionUID'"
    kdialog --info "Le disque est monté \n La sauvegarde peut être faite maintenant"
fi

### choix des sauvegardes
log_info "Affichage de la boîte de dialogue de sélection..."
resultats=$(kdialog --separate-output --checklist "Selection liste:"  1 "Sauvegarde Photos" on 2 "Sauvegarde Images" on 4 "Sauvegarde Musiques" on 8 "Sauvegarde DocumentsCommuns" off 16 "Sauvegarde DocumentsEricFanou" off)

if [ $? -ne 0 ]; then
    log_warning "Utilisateur a annulé la sélection"
    exit 0
fi

log_info "Sélections utilisateur: $resultats"
backup_count=0
successful_backups=0
failed_backups=0

for i in $resultats
###choix façon Watael
do
    backup_count=$((backup_count + 1))
    log_info "=== TRAITEMENT SAUVEGARDE $backup_count ==="
    log_debug "Valeur sélectionnée: $i"

    case $i in
        1)
            log_info "Sauvegarde Photos sélectionnée"
            echo Photos
            user=Multimedias
            ip=$ipVM
            src=/home/Multimedias/MultimediasCommuns/Photos
            dst=$MountPoint/SAUVEGARDES/
            bkp=incremental-Photos/$date/
            backup_name="Photos"
            ;;
        2)
            log_info "Sauvegarde Images sélectionnée"
            echo Images
            user=Multimedias
            ip=$ipVM
            src=/home/Multimedias/MultimediasCommuns/Images
            dst=$MountPoint/SAUVEGARDES/
            bkp=incremental-Images/$date/
            backup_name="Images"
            ;;
        4)
            log_info "Sauvegarde Musiques sélectionnée"
            echo Musiques
            user=Multimedias
            ip=$ipVM
            src=/home/Multimedias/MultimediasCommuns/Musiques
            dst=$MountPoint/SAUVEGARDES/
            bkp=incremental-Musiques/$date/
            backup_name="Musiques"
            ;;
        8)
            log_info "Sauvegarde DocumentsCommuns sélectionnée"
            echo DocumentsCommuns
            user=Multimedias
            ip=$ipVM
            src=/home/Multimedias/DocumentsPartages
            dst=$MountPoint/SAUVEGARDES/SauvegardesDocumentsCommuns/
            bkp=incremental-DocumentsPartages/$date/
            backup_name="DocumentsCommuns"
            ;;
        16)
            log_info "Sauvegarde DocumentsEricFanou sélectionnée"
            echo DocumentsEricFanou

            # Première partie - sauvegarde locale
            log_debug "Sauvegarde locale Documents kubu"
            if rsync --progress -a -v --delete-after /home/kubu/Documents/ /home/kubu/VMMultimedias/VMSauvegardesDocuments/VMSauvegardesDocumentsEric/ --backup --backup-dir="incremental-DocumentsEric/$date/" >> "$LOG_FILE" 2>> "$ERROR_FILE"; then
                log_info "Sauvegarde locale Documents kubu réussie"
            else
                log_error "Échec sauvegarde locale Documents kubu"
            fi

            user=fanou
            ip=$ipPortable
            src=/home/fanou/Documents
            dst=/home/kubu/VMMultimedias/VMSauvegardesDocuments/VMSauvegardesDocumentsFanou/
            bkp=incremental-DocumentsFanou/$date/
            backup_name="DocumentsEricFanou"
            ;;
        *)
            log_warning "Valeur inconnue ignorée: $i"
            backup_count=$((backup_count - 1))  # Correction: décrémenter le compteur
            continue
            ;;
    esac

    log_info "Configuration sauvegarde $backup_name:"
    log_info "  - Source: $user@$ip:$src"
    log_info "  - Destination: $dst"
    log_info "  - Répertoire de sauvegarde: $bkp"

    # Test ping avant test ssh
    if ! test_ping "$ip"; then
        log_error "Ping vers $ip a échoué, sauvegarde annulée"
        failed_backups=$((failed_backups + 1))
        continue
    fi

    # Test SSH avant rsync - CORRECTION: logique simplifiée avec timeout augmenté
    if ! test_ssh "$user" "$ip"; then
        failed_backups=$((failed_backups + 1))
        continue
    fi

    # Vérification de l'existence du répertoire de destination
    if [ ! -d "$dst" ]; then
        log_warning "Répertoire destination n'existe pas: $dst"
        log_info "Tentative de création..."
        if mkdir -p "$dst" 2>> "$ERROR_FILE"; then
            log_info "Répertoire créé avec succès: $dst"
        else
            log_error "Impossible de créer le répertoire: $dst"
            failed_backups=$((failed_backups + 1))
            continue
        fi
    fi

    # Affichage popup
    kdialog --passivepopup "Sauvegarde $backup_name en cours..." 30 &
    popup_pid=$!

    log_info "Début de la sauvegarde $backup_name..."
    start_time=$(date +%s)

    # Exécution de rsync avec capture des logs - CORRECTION: guillemets ajoutés
    if rsync --progress -a -v --delete-after -e ssh "$user@$ip:$src" "$dst" --backup --backup-dir="$bkp" >> "$LOG_FILE" 2>> "$ERROR_FILE"; then
        end_time=$(date +%s)
        duration=$((end_time - start_time))
        log_info "Sauvegarde $backup_name réussie en ${duration}s"
        successful_backups=$((successful_backups + 1))
    else
        end_time=$(date +%s)
        duration=$((end_time - start_time))
        log_error "Échec sauvegarde $backup_name après ${duration}s"
        failed_backups=$((failed_backups + 1))
    fi

    # Fermer le popup s'il existe encore
    if [ -n "$popup_pid" ]; then
        kill "$popup_pid" 2>/dev/null
    fi
done

# Résumé final
log_info "=== RÉSUMÉ FINAL ==="
log_info "Sauvegardes traitées: $backup_count"
log_info "Réussites: $successful_backups"
log_info "Échecs: $failed_backups"

if [ $failed_backups -eq 0 ]; then
    log_info "Toutes les sauvegardes ont réussi !"
    kdialog --msgbox "FIN de(s) sauvegarde(s) $resultats - TOUTES RÉUSSIES !"
else
    log_warning "Certaines sauvegardes ont échoués. Consultez les logs."
    kdialog --msgbox "FIN de(s) sauvegarde(s) $resultats - $failed_backups échec(s) détecté(s)\nConsultez les logs: $LOG_FILE"
fi

log_info "=== FIN DE LA SAUVEGARDE ==="
log_info "Logs disponibles dans: $LOG_DIR"

Dernière modification par steph810 (Le 20/06/2025, à 21:41)

Hors ligne

#205 Le 20/06/2025, à 21:55

Watael

Re : script d’automatisation sauvegardes

il y a peut-être des variables non définies ?

j'allais faire un EDIT :

#!/bin/bash

dateFmt='%Y%m%d_%H:%M'
logDir=~/log/backup-script #il ne faut pas mettre le tilde et le slash qui le suit entre guillemets

log()
{
    local level=${1##*_}
    local message=$2
    [[ $level == ?(info|warning) ]] && local level='backup'
    local logFile=${level,,}
    printf "[%($dateFmt)T] [%s] %s" -1 $level "$message" | tee -a "$logDir/$logFile.log"
}

log_info()
{
    log $FUNCNAME "$1"
}
log_warning()
{
    log $FUNCNAME "$1"
}
log_error()
{
    log $FUNCNAME "$1"
}
log_debug()
{
    log $FUNCNAME "$1"
}
log_info "mon message d'information."

ce qui me fait penser qu'on pourait aussi bien faire

log info "mon message d'information"

en simplifiant log(), et en supprimant les autres fonctions

#!/bin/bash

dateFmt='%Y%m%d_%H:%M' 
logDir=~/log/backup-script

log()
{
    local level=$1 message=$2
    [[ $level == ?(info|warning) ]] && local level='backup'
    local logFile=$level
    printf "[%($dateFmt)T] [%s] %s" -1 $level "$message" | tee -a "$logDir/$logFile.log"
}

log info "mon message d'information"
log warning "mon message d'alerte"
log error "mon message d'erreur"

c'est plus pour te montrer comment faire, que du code réellement utilisable tel quel.
il y  a probablement des adaptations à appliquer...

Dernière modification par Watael (Le 20/06/2025, à 23:00)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#206 Le 20/06/2025, à 22:06

iznobe

Re : script d’automatisation sauvegardes

tu as mis des passprhase a tes clés ? si oui , c' est pour cela que ça ne fonctionne pas dans le fstab .

je n' ai pas trouvé de moyen pour monter automatiquement dans le cas ou une passprhase est demandée .
d' apres ce que j' ai compris , pour etre plus precis , en fait c' est carrément impossible .


pourquoi avoir choisi ssh et pas NFS par exemple ?
avec NFS , il y a juste a configurer un export ( fichier /etc/exports ) , une ligne dans le fstab , et ca roule .
On est d' accord que tout ça , restera en local ?


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#207 Le 20/06/2025, à 22:23

steph810

Re : script d’automatisation sauvegardes

edit:

j'ai aussi augmenter le timeout et ConnectTimeout si la connection est lent ....
c'est juste version de test. au dessus, ont peut rajouter un test de validation de cle rsa si il veut

Hors ligne

#208 Le 20/06/2025, à 22:25

eric63

Re : script d’automatisation sauvegardes

On est d' accord que tout ça , restera en local ?

ben c’est pas si sûr que ça reste local
je comptais à terme mon fils m’a proposé d’utiliser son serveur mais je ne connais pas son serveur et ça traine dans les bacs depuis pas mal de temps
et c’est lui qui décidera quand.

tu as mis des passprhase a tes clés ? si oui , c' est pour cela que ça ne fonctionne pas dans le fstab .

j’ai pas de pass phrase pour l’accès à la Vm juste une clé ssh ed-25519
la clé se suffit à elle même normalement j’avais vu ça avec 20_100 quand on à créé la VM et les utilisateurs accédant à la VM et j’avais 3 clé pour les 3 utilisateurs
2 sessions sur le pc et une session portable

avec le nouveau script version240

kubu@kubu-System-Product-Name:~$ /home/kubu/ScriptsVMImportants/ScriptSauvegardes.sh 
[2025-06-20 22:12:01] [INFO] === DÉBUT DE LA SAUVEGARDE ===
[2025-06-20 22:12:01] [DEBUG] Répertoire des logs: /home/kubu/log/backup-script
[2025-06-20 22:12:01] [DEBUG] Mode debug: 1
[2025-06-20 22:12:01] [DEBUG] Nettoyage des anciens logs (> 30 jours)
[2025-06-20 22:12:01] [INFO] Configuration:
[2025-06-20 22:12:01] [INFO]   - Point de montage: /media/kubu/JEUX8T
[2025-06-20 22:12:01] [INFO]   - UUID partition: 35bb9ca2-2022-4dfa-a201-1a2dde7ce1aa
[2025-06-20 22:12:01] [INFO]   - Date: 2025-06-20_22h12
[2025-06-20 22:12:01] [DEBUG] Utilisateur: kubu
[2025-06-20 22:12:01] [INFO] Vérification du disque externe...
[2025-06-20 22:12:01] [DEBUG] UUID trouvé: '35bb9ca2-2022-4dfa-a201-1a2dde7ce1aa'
[2025-06-20 22:12:01] [DEBUG] UUID attendu: '35bb9ca2-2022-4dfa-a201-1a2dde7ce1aa'
[2025-06-20 22:12:01] [INFO] Disque correctement monté
réussite
ctrlID: '35bb9ca2-2022-4dfa-a201-1a2dde7ce1aa'
partition: '35bb9ca2-2022-4dfa-a201-1a2dde7ce1aa'
kdialog: Option inconnue "info".
QThreadStorage: entry 4 destroyed before end of thread 0x632843d28f20
QThreadStorage: entry 3 destroyed before end of thread 0x632843d28f20
[2025-06-20 22:12:01] [INFO] Affichage de la boîte de dialogue de sélection...
[2025-06-20 22:12:15] [INFO] Sélections utilisateur: 16
[2025-06-20 22:12:15] [INFO] === TRAITEMENT SAUVEGARDE 1 ===
[2025-06-20 22:12:15] [DEBUG] Valeur sélectionnée: 16
[2025-06-20 22:12:15] [INFO] Sauvegarde DocumentsEricFanou sélectionnée
DocumentsEricFanou
[2025-06-20 22:12:15] [DEBUG] Sauvegarde locale Documents kubu
[2025-06-20 22:12:15] [INFO] Sauvegarde locale Documents kubu réussie
[2025-06-20 22:12:15] [INFO] Configuration sauvegarde DocumentsEricFanou:
[2025-06-20 22:12:15] [INFO]   - Source: fanou@192.168.1.60:/home/fanou/Documents
[2025-06-20 22:12:15] [INFO]   - Destination: /home/kubu/VMMultimedias/VMSauvegardesDocuments/VMSauvegardesDocumentsFanou/
[2025-06-20 22:12:15] [INFO]   - Répertoire de sauvegarde: incremental-DocumentsFanou/2025-06-20_22h12/
[2025-06-20 22:12:17] [DEBUG] Ping vers 192.168.1.60 réussi
[2025-06-20 22:12:17] [DEBUG] Test de connexion SSH vers fanou@192.168.1.60...
[2025-06-20 22:12:17] [ERROR] Connexion SSH vers fanou@192.168.1.60: ÉCHEC
[2025-06-20 22:12:17] [INFO] === RÉSUMÉ FINAL ===
[2025-06-20 22:12:17] [INFO] Sauvegardes traitées: 1
[2025-06-20 22:12:17] [INFO] Réussites: 0
[2025-06-20 22:12:17] [INFO] Échecs: 1
[2025-06-20 22:12:17] [WARNING] Certaines sauvegardes ont échoués. Consultez les logs.
[2025-06-20 22:12:30] [INFO] === FIN DE LA SAUVEGARDE ===
[2025-06-20 22:12:30] [INFO] Logs disponibles dans: /home/kubu/log/backup-script
kubu@kubu-System-Product-Name:~$ 

Donc le plus simple au final c’est que fanou ait un script pour sauvegarder ses documents depuis sa session vers la VM.

Dernière modification par eric63 (Le 20/06/2025, à 22:59)


Kubuntu 25.04 wayland Plasma 6.3.4 KDE Qt 6.12.0 noyau 6.14.0-15 Asus B760+D4 i5-12400F 4.4Ghz DDR4 32Go nvidia RTX 3060 12GB
Utilisez les drivers libres avant d’ installer une brother avec le script de demonipuch
J’utilise le clavier french AFNOR

Hors ligne

#209 Le 20/06/2025, à 23:06

steph810

Re : script d’automatisation sauvegardes

re,
L.93 Fonction validation clé SSH
L.318 Le test

#!/bin/bash

####6b) Créer le service d'exécution de la sauvegarde avec logging

###script de base geole largement modifié par iznobe et Watael et steph810 pour la partie debug de remplacement (plus simple) merci à eux
###voir https://forum.kubuntu-fr.org/viewtopic.php?id=2091380&p=5
### modifier les 2 premières variables des #paramètres (ligne 72) du script suivant vos emplacements disque et UUID
###script utilisé v3.4 modifié /v3.3/v146/

# Variables IP et user en haut
ipVM="192.168.1.128"
ipPortable="192.168.1.60"

# Configuration des logs
LOG_DIR="$HOME/log/backup-script"
LOG_FILE="$LOG_DIR/backup_$(date +%Y%m%d_%H%M).log"
DEBUG_FILE="$LOG_DIR/debug_$(date +%Y%m%d_%H%M).log"
ERROR_FILE="$LOG_DIR/error_$(date +%Y%m%d_%H%M).log"

# Création du répertoire de logs s'il n'existe pas
mkdir -pv "$LOG_DIR"

# Choix du mode debug via kdialog
if kdialog --yesno "Voulez-vous activer le mode DEBUG (log verbeux) ?"; then
    DEBUG_MODE=1
else
    DEBUG_MODE=0
fi

#DEBUG_MODE=1

# Fonctions de logging
log_info() {
    local message="$1"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    echo "[$timestamp] [INFO] $message" | tee -a "$LOG_FILE"
}

log_error() {
    local message="$1"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    echo "[$timestamp] [ERROR] $message" | tee -a "$LOG_FILE" | tee -a "$ERROR_FILE"
}

log_debug() {
    local message="$1"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    if [ "$DEBUG_MODE" -eq 1 ]; then
        echo "[$timestamp] [DEBUG] $message" | tee -a "$DEBUG_FILE"
    fi
}

log_warning() {
    local message="$1"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    echo "[$timestamp] [WARNING] $message" | tee -a "$LOG_FILE"
}

# Fonction pour nettoyer les anciens logs (garde les 30 derniers jours)
cleanup_old_logs() {
    log_debug "Nettoyage des anciens logs (> 30 jours)"
    find "$LOG_DIR" -name "*.log" -type f -mtime +30 -delete 2>/dev/null
}

# Gestion des erreurs et interruptions
trap 'log_error "Script interrompu par signal"; exit 130' INT TERM

# Fonction test ping (pour vérifier si machine est accessible avant ssh)
test_ping() {
    local ip="$1"
    if ping -c 2 -W 2 "$ip" >/dev/null 2>&1; then
        log_debug "Ping vers $ip réussi"
        return 0
    else
        log_warning "Ping vers $ip échoué"
        return 1
    fi
}

# Fonction test ssh avant rsync avec timeout augmenté
test_ssh() {
    local user="$1"
    local ip="$2"
    log_debug "Test de connexion SSH vers $user@$ip..."
    if timeout 15 ssh -o ConnectTimeout=10 -o BatchMode=yes "$user@$ip" exit 2>/dev/null; then
        log_info "Connexion SSH vers $user@$ip: OK"
        return 0
    else
        log_error "Connexion SSH vers $user@$ip: ÉCHEC"
        return 1
    fi
}

# Fonction test validation clé SSH
test_ssh_key() {
    local user="$1"
    local ip="$2"
    log_debug "Test de validation de la clé SSH pour $user@$ip..."
    
    # Vérifier d'abord si une clé SSH existe localement
    local ssh_key_found=0
    for key_type in rsa ed25519 ecdsa dsa; do
        if [ -f "$HOME/.ssh/id_$key_type" ] || [ -f "$HOME/.ssh/id_$key_type.pub" ]; then
            log_debug "Clé SSH $key_type trouvée localement"
            ssh_key_found=1
            break
        fi
    done
    
    if [ $ssh_key_found -eq 0 ]; then
        log_warning "Aucune clé SSH trouvée dans $HOME/.ssh/"
        return 1
    fi
    
    # Test de connexion SSH avec clé (sans mot de passe)
    log_debug "Test de connexion avec clé SSH vers $user@$ip..."
    if timeout 10 ssh -o ConnectTimeout=8 -o BatchMode=yes -o PasswordAuthentication=no -o PubkeyAuthentication=yes "$user@$ip" exit 2>/dev/null; then
        log_info "Authentification par clé SSH vers $user@$ip: OK"
        return 0
    else
        log_warning "Authentification par clé SSH vers $user@$ip: ÉCHEC"
        log_warning "La clé SSH n'est peut-être pas configurée ou acceptée sur le serveur distant"
        return 1
    fi
}

# Début du script
log_info "=== DÉBUT DE LA SAUVEGARDE ==="
log_debug "Répertoire des logs: $LOG_DIR"
log_debug "Mode debug: $DEBUG_MODE"

# Nettoyage des anciens logs
cleanup_old_logs

###Paramètres
MountPoint="/media/$USER/JEUX8T"
PartitionUID="35bb9ca2-2022-4dfa-a201-1a2dde7ce1aa"
date=$(date +%F_%Hh%M)

log_info "Configuration:"
log_info "  - Point de montage: $MountPoint"
log_info "  - UUID partition: $PartitionUID"
log_info "  - Date: $date"
log_debug "Utilisateur: $USER"

# Fonction pour obtenir l'UUID du disque monté
get_disk_uuid() {
    local uuid=$(findmnt -n --output UUID "$MountPoint" 2>/dev/null)
    echo "$uuid"
}

###controle validité disque solution#125 Watael
log_info "Vérification du disque externe..."

# Mise à jour initiale de ctrlID - CORRECTION: une seule fois
ctrlID=$(get_disk_uuid)
log_debug "UUID trouvé: '$ctrlID'"
log_debug "UUID attendu: '$PartitionUID'"

if [[ "$ctrlID" != "$PartitionUID" ]]
then
    log_error "Disque non reconnu ou éteint"
    log_error "UUID trouvé: '$ctrlID'"
    log_error "UUID attendu: '$PartitionUID'"

    echo "échec"
    echo "ctrlID: '$ctrlID'"
    echo "partition: '$PartitionUID'"
    kdialog --error "Aucun disque reconnu ou disque éteint \n ALLUMER LE DISQUE EXTERNE \n AVANT de sélectionner «OK»"

    log_info "Attente du montage du disque..."
    sleep 5

    # Boucle de détection du disque
    attempt=1
    while [[ "$ctrlID" != "$PartitionUID" ]]
    do
        log_debug "Tentative $attempt - Vérification du montage..."
        sleep 2

        # Mise à jour de ctrlID avec la fonction
        ctrlID=$(get_disk_uuid)

        log_debug "Ligne $LINENO"
        echo "ctrlID: '$ctrlID'"
        echo "partition: '$PartitionUID'"
        log_debug "UUID vérifié: '$ctrlID'"
        sleep 2
        ((attempt++))

        if [ $attempt -gt 60 ]; then
            log_error "Timeout: Disque non monté après 60 tentatives"
            kdialog --error "Timeout: Impossible de détecter le disque"
            exit 1
        fi
    done

    log_info "Disque monté avec succès après $((attempt-1)) tentatives"
    echo "réussite"
    echo "ctrlID: '$ctrlID'"
    echo "partition: '$PartitionUID'"
    kdialog --info "Le disque est monté \n La sauvegarde peut être faite maintenant"

else
    log_info "Disque correctement monté"
    echo "réussite"
    echo "ctrlID: '$ctrlID'"
    echo "partition: '$PartitionUID'"
    kdialog --info "Le disque est monté \n La sauvegarde peut être faite maintenant"
fi

### choix des sauvegardes
log_info "Affichage de la boîte de dialogue de sélection..."
resultats=$(kdialog --separate-output --checklist "Selection liste:"  1 "Sauvegarde Photos" on 2 "Sauvegarde Images" on 4 "Sauvegarde Musiques" on 8 "Sauvegarde DocumentsCommuns" off 16 "Sauvegarde DocumentsEricFanou" off)

if [ $? -ne 0 ]; then
    log_warning "Utilisateur a annulé la sélection"
    exit 0
fi

log_info "Sélections utilisateur: $resultats"
backup_count=0
successful_backups=0
failed_backups=0

for i in $resultats
###choix façon Watael
do
    backup_count=$((backup_count + 1))
    log_info "=== TRAITEMENT SAUVEGARDE $backup_count ==="
    log_debug "Valeur sélectionnée: $i"

    case $i in
        1)
            log_info "Sauvegarde Photos sélectionnée"
            echo Photos
            user=Multimedias
            ip=$ipVM
            src=/home/Multimedias/MultimediasCommuns/Photos
            dst=$MountPoint/SAUVEGARDES/
            bkp=incremental-Photos/$date/
            backup_name="Photos"
            ;;
        2)
            log_info "Sauvegarde Images sélectionnée"
            echo Images
            user=Multimedias
            ip=$ipVM
            src=/home/Multimedias/MultimediasCommuns/Images
            dst=$MountPoint/SAUVEGARDES/
            bkp=incremental-Images/$date/
            backup_name="Images"
            ;;
        4)
            log_info "Sauvegarde Musiques sélectionnée"
            echo Musiques
            user=Multimedias
            ip=$ipVM
            src=/home/Multimedias/MultimediasCommuns/Musiques
            dst=$MountPoint/SAUVEGARDES/
            bkp=incremental-Musiques/$date/
            backup_name="Musiques"
            ;;
        8)
            log_info "Sauvegarde DocumentsCommuns sélectionnée"
            echo DocumentsCommuns
            user=Multimedias
            ip=$ipVM
            src=/home/Multimedias/DocumentsPartages
            dst=$MountPoint/SAUVEGARDES/SauvegardesDocumentsCommuns/
            bkp=incremental-DocumentsPartages/$date/
            backup_name="DocumentsCommuns"
            ;;
        16)
            log_info "Sauvegarde DocumentsEricFanou sélectionnée"
            echo DocumentsEricFanou

            # Première partie - sauvegarde locale
            log_debug "Sauvegarde locale Documents kubu"
            if rsync --progress -a -v --delete-after /home/kubu/Documents/ /home/kubu/VMMultimedias/VMSauvegardesDocuments/VMSauvegardesDocumentsEric/ --backup --backup-dir="incremental-DocumentsEric/$date/" >> "$LOG_FILE" 2>> "$ERROR_FILE"; then
                log_info "Sauvegarde locale Documents kubu réussie"
            else
                log_error "Échec sauvegarde locale Documents kubu"
            fi

            user=fanou
            ip=$ipPortable
            src=/home/fanou/Documents
            dst=/home/kubu/VMMultimedias/VMSauvegardesDocuments/VMSauvegardesDocumentsFanou/
            bkp=incremental-DocumentsFanou/$date/
            backup_name="DocumentsEricFanou"
            ;;
        *)
            log_warning "Valeur inconnue ignorée: $i"
            backup_count=$((backup_count - 1))  # Correction: décrémenter le compteur
            continue
            ;;
    esac

    log_info "Configuration sauvegarde $backup_name:"
    log_info "  - Source: $user@$ip:$src"
    log_info "  - Destination: $dst"
    log_info "  - Répertoire de sauvegarde: $bkp"

    # Test ping avant test ssh
    if ! test_ping "$ip"; then
        log_error "Ping vers $ip a échoué, sauvegarde annulée"
        failed_backups=$((failed_backups + 1))
        continue
    fi

    # Test SSH avant rsync - CORRECTION: logique simplifiée avec timeout augmenté
    if ! test_ssh "$user" "$ip"; then
        failed_backups=$((failed_backups + 1))
        continue
    fi

    # Test de validation de la clé SSH
    if ! test_ssh_key "$user" "$ip"; then
        log_warning "Clé SSH non configurée pour $user@$ip, la connexion utilisera probablement un mot de passe"
        # Note: Ceci est juste un avertissement, la sauvegarde peut continuer
    fi

    # Vérification de l'existence du répertoire de destination
    if [ ! -d "$dst" ]; then
        log_warning "Répertoire destination n'existe pas: $dst"
        log_info "Tentative de création..."
        if mkdir -p "$dst" 2>> "$ERROR_FILE"; then
            log_info "Répertoire créé avec succès: $dst"
        else
            log_error "Impossible de créer le répertoire: $dst"
            failed_backups=$((failed_backups + 1))
            continue
        fi
    fi

    # Affichage popup
    kdialog --passivepopup "Sauvegarde $backup_name en cours..." 30 &
    popup_pid=$!

    log_info "Début de la sauvegarde $backup_name..."
    start_time=$(date +%s)

    # Exécution de rsync avec capture des logs - CORRECTION: guillemets ajoutés
    if rsync --progress -a -v --delete-after -e ssh "$user@$ip:$src" "$dst" --backup --backup-dir="$bkp" >> "$LOG_FILE" 2>> "$ERROR_FILE"; then
        end_time=$(date +%s)
        duration=$((end_time - start_time))
        log_info "Sauvegarde $backup_name réussie en ${duration}s"
        successful_backups=$((successful_backups + 1))
    else
        end_time=$(date +%s)
        duration=$((end_time - start_time))
        log_error "Échec sauvegarde $backup_name après ${duration}s"
        failed_backups=$((failed_backups + 1))
    fi

    # Fermer le popup s'il existe encore
    if [ -n "$popup_pid" ]; then
        kill "$popup_pid" 2>/dev/null
    fi
done

# Résumé final
log_info "=== RÉSUMÉ FINAL ==="
log_info "Sauvegardes traitées: $backup_count"
log_info "Réussites: $successful_backups"
log_info "Échecs: $failed_backups"

if [ $failed_backups -eq 0 ]; then
    log_info "Toutes les sauvegardes ont réussi !"
    kdialog --msgbox "FIN de(s) sauvegarde(s) $resultats - TOUTES RÉUSSIES !"
else
    log_warning "Certaines sauvegardes ont échoués. Consultez les logs."
    kdialog --msgbox "FIN de(s) sauvegarde(s) $resultats - $failed_backups échec(s) détecté(s)\nConsultez les logs: $LOG_FILE"
fi

log_info "=== FIN DE LA SAUVEGARDE ==="
log_info "Logs disponibles dans: $LOG_DIR"

S'il le faut j'ai un script de test de simulation de clé ssh. Toujours utile j'avais eu des problème par le passé aussi.

Dernière modification par steph810 (Le 20/06/2025, à 23:09)

Hors ligne

#210 Hier à 07:53

O_20_100_O

Re : script d’automatisation sauvegardes

Connexion SSH vers fanou@192.168.1.60: ÉCHEC

Donc le plus simple au final c’est que fanou ait un script pour sauvegarder ses documents depuis sa session vers la VM.

Ce n'est pas l'échec de la connexion SSH qui doit remettre en cause la procédure. C'est facile à arranger.

Mais c'est plus rationnel de sauvegarder une machine au fonctionnement épisodique à partir d'elle même qu'à partir d'une machine tierce. Cela supprime l'aléa de la période de fonctionnement du portable. Il pourrait arriver que chaque fois que kubu tente de faire la sauvegarde de fanou, son laptop ne soit jamais en marche.

D'autre part, pourquoi faire la sauvegarde des "documents perso" vers le disque 8To USB, alors que tu disposes d'assez de place sur la VM ?


La vie, pour moi elle est magnifique, pourquoi tu te la compliques ?  (Zanini)

Hors ligne

#211 Hier à 08:05

iznobe

Re : script d’automatisation sauvegardes

eric63 a écrit :

le fstab modifié

kubu@kubu-System-Product-Name:~$ grep sshfs /etc/fstab
Multimedias@192.168.1.128:/home/Multimedias                /home/kubu/VMMultimedias          fuse.sshfs           port=22,user,noauto,noatime,x-systemd.mount-timeout=3,_netdev
fanou@192.168.1.60:/home/fanou/Documents /home/kubu/VMMultimedias/VMSauvegardesDocuments/VMSauvegardesDocumentsFanou         fuse.sshfs           port=22,user,noatime,x-systemd.mount-timeout=3,_netdev
kubu@kubu-System-Product-Name:~$ 

pour que cela démarre automatiquement avec clés et sans passphrase , il te faut ajouter ces options aux lignes : "delay_connect,idmap=user,transform_symlinks,identityfile=/home/kubu/.ssh/id_ed25519,default_permissions,uid=1000,gid=1000,allow_other" .

selon les permissions , il se peut que root ( c est lui qui lis le fstab ) , ne puisse pas accéder a la clé ( identityfile=/home/kubu/.ssh/id_ed25519 ) .

La manip :
+ tu ajoutes le " tas "  d ' options à tes 2 lignes SSHFS du fstab .
+ tu montres que pas d' erreur avec :

sudo mount -a

+ tu redémarres l ' ordi
+ tu verifies que c' est monté en donnant le retour de :

grep sshfs /etc/mtab

si cela n' est pas monté automatiquement
ce que j' ai trouvé de plus simple c' est de simplement copié le dossier utilisateur " .ssh " dans le root avec la maniere suivante ( ce qui permet de ne pas avoir besoin de modifier les permissions ) .
pour ce faire :

sudo -i
cp -r /home/kubu/.ssh/  /root
exit

Montage et verif :

sudo mount -a
grep sshfs /etc/mtab

Dernière modification par iznobe (Hier à 08:14)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#212 Hier à 08:22

iznobe

Re : script d’automatisation sauvegardes

D'autre part, pourquoi faire la sauvegarde des "documents perso" vers le disque 8To USB, alors que tu disposes d'assez de place sur la VM ?

c' est une façon de voir les choses .

Comme le disque de sauvegarde est le 8T , perso je voyais plutot la chose dans l' autre sens .
Sur l' ordi de fanou , j ' aurais fais un script qui verifie l ' acces au disque de sauvegarde sur l' ordi de eric . si oui , alors je lance la sauvegarde ( une tache cron couplé a un script par exemple ) .

Ou encore mieux , ( ce que je disais des le départ ) , se servir tout les 2 , du disque dur en réseau via la VM et la BOX comme un NAS , ( puisque c' en est un ... en fin de compte ) et y stocker directement les documents dedans .
il ne reste alors qu ' a faire une sauvegarde du " tout " sur le disque de 8 T des que celui-ci se connecte ( ou avant de l ' arreter ) . hyper simple à mettre en place et inutile de faire de " détails " comme on le voit ici et toutes les complications ...
mise en place en 15 minutes .

Dernière modification par iznobe (Hier à 08:24)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#213 Hier à 08:37

O_20_100_O

Re : script d’automatisation sauvegardes

se servir tout les 2 , du disque dur en réseau via la VM et la BOX

Au tout début de ce projet d'eric63, il a fait des tests pour voir comment le disque branché en USB peut être utilisé par la VM.
La procédure n'est pas claire et les essais étaient trop laborieux. Ça s'est terminé par un abandon. Il faudrait avoir cette Freebox Ultra à disposition pour approfondir.

Mais la VM a un disque de 1 To, et c'est suffisant, si j'ai bien compris, pour héberger à la fois les fichiers communs qui représentent la majorité du volume, et les fichiers "perso" qui ne pèsent pas grand chose.
Alors, pourquoi se compliquer la vie avec un disque USB. Il est utile, connecté au PC kubu, pour y sauvegarder les fichiers communs de la VM.

Dernière modification par O_20_100_O (Hier à 08:38)


La vie, pour moi elle est magnifique, pourquoi tu te la compliques ?  (Zanini)

Hors ligne

#214 Hier à 09:08

eric63

Re : script d’automatisation sauvegardes

pourquoi faire la sauvegarde des "documents perso" vers le disque 8To USB, alors que tu disposes d'assez de place sur la VM

dst=/home/kubu/VMMultimedias/VMSauvegardesDocuments/VMSauvegardesDocumentsFanou/

les documents perso de chaque session sont sauvés sur la VM  pour qu’ils puissent être récupérable à tous moments que j’ai mon ordi éteint ou pas
les autres c’est à dire les photos images et musiques sont sauvegardés sur le 8T car ils sont bien moins sollicités et ont besoin de place surtout les photos
et ils sont installés aussi sur la VM pour servir de base de travail et ca permet de vider des sessions ces dossiers qui prennent de la place et permettre une mutualisation des multimedias.
le dossier DocumentsPartages est du même tonneau  puisqu’il est fait pour manipuler un dossier ou un fichier qui a besoin de changement de 2 utilisateurs

pour le  fstab question sur  uid=1000,gid=1000
ma session sur mon Pc à un uid de 1001 et la session fanou du pc a un uid de 1000 tout comme son portable

kubu@kubu-System-Product-Name:~$ id
uid=1001(kubu) gid=1001(kubu) groups=1001(kubu),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),100(users),119(lpadmin),129(sambashare),4242(nas-freebox)
kubu@kubu-System-Product-Name:~$ 

je dois modifier les uid et gid pour les 2 lignes ???

kubu@kubu-System-Product-Name:~$ grep sshfs /etc/mtab
Multimedias@192.168.1.128:/home/Multimedias /home/kubu/VMMultimedias fuse.sshfs rw,nosuid,nodev,noexec,noatime,user_id=0,group_id=0,default_permissions,allow_other 0 0
fanou@192.168.1.60:/home/fanou/Documents /home/kubu/VMMultimedias/VMSauvegardesDocuments/VMSauvegardesDocumentsFanou fuse.sshfs rw,nosuid,nodev,noexec,noatime,user_id=0,group_id=0,default_permissions,allow_other 0 0
kubu@kubu-System-Product-Name:~$ 

Dernière modification par eric63 (Hier à 09:17)


Kubuntu 25.04 wayland Plasma 6.3.4 KDE Qt 6.12.0 noyau 6.14.0-15 Asus B760+D4 i5-12400F 4.4Ghz DDR4 32Go nvidia RTX 3060 12GB
Utilisez les drivers libres avant d’ installer une brother avec le script de demonipuch
J’utilise le clavier french AFNOR

Hors ligne

#215 Hier à 09:21

eric63

Re : script d’automatisation sauvegardes

problème

kubu@kubu-System-Product-Name:~$ /home/kubu/ScriptsVMImportants/ScriptSauvegardes.sh 
[2025-06-21 09:19:15] [INFO] === DÉBUT DE LA SAUVEGARDE ===
[2025-06-21 09:19:15] [DEBUG] Répertoire des logs: /home/kubu/log/backup-script
[2025-06-21 09:19:15] [DEBUG] Mode debug: 1
[2025-06-21 09:19:15] [DEBUG] Nettoyage des anciens logs (> 30 jours)
[2025-06-21 09:19:15] [INFO] Configuration:
[2025-06-21 09:19:15] [INFO]   - Point de montage: /media/kubu/JEUX8T
[2025-06-21 09:19:15] [INFO]   - UUID partition: 35bb9ca2-2022-4dfa-a201-1a2dde7ce1aa
[2025-06-21 09:19:15] [INFO]   - Date: 2025-06-21_09h19
[2025-06-21 09:19:15] [DEBUG] Utilisateur: kubu
[2025-06-21 09:19:15] [INFO] Vérification du disque externe...
[2025-06-21 09:19:15] [DEBUG] UUID trouvé: '35bb9ca2-2022-4dfa-a201-1a2dde7ce1aa'
[2025-06-21 09:19:15] [DEBUG] UUID attendu: '35bb9ca2-2022-4dfa-a201-1a2dde7ce1aa'
[2025-06-21 09:19:15] [INFO] Disque correctement monté
réussite
ctrlID: '35bb9ca2-2022-4dfa-a201-1a2dde7ce1aa'
partition: '35bb9ca2-2022-4dfa-a201-1a2dde7ce1aa'
kdialog: Option inconnue "info".
QThreadStorage: entry 4 destroyed before end of thread 0x651720007f20
QThreadStorage: entry 3 destroyed before end of thread 0x651720007f20
[2025-06-21 09:19:15] [INFO] Affichage de la boîte de dialogue de sélection...
[2025-06-21 09:19:27] [INFO] Sélections utilisateur: 16
[2025-06-21 09:19:27] [INFO] === TRAITEMENT SAUVEGARDE 1 ===
[2025-06-21 09:19:27] [DEBUG] Valeur sélectionnée: 16
[2025-06-21 09:19:27] [INFO] Sauvegarde DocumentsEricFanou sélectionnée
DocumentsEricFanou
[2025-06-21 09:19:27] [DEBUG] Sauvegarde locale Documents kubu

et ça bloque complet et j’ai pas de retour au prompt ??? le portable est éteint
ha ouf après un looooooong moment c’est ok avec toujours 1 erreur
dolphin rame à mort
je doit m’absenter a+

Dernière modification par eric63 (Hier à 09:30)


Kubuntu 25.04 wayland Plasma 6.3.4 KDE Qt 6.12.0 noyau 6.14.0-15 Asus B760+D4 i5-12400F 4.4Ghz DDR4 32Go nvidia RTX 3060 12GB
Utilisez les drivers libres avant d’ installer une brother avec le script de demonipuch
J’utilise le clavier french AFNOR

Hors ligne

#216 Hier à 09:29

iznobe

Re : script d’automatisation sauvegardes

pour le  fstab question sur  uid=1000,gid=1000
ma session sur mon Pc à un uid de 1001 et la session fanou du pc a un uid de 1000 tout comme son portable

c' est toi qui a besoin d' avoir l' acces a ces fichiers là et apres montage.
Si ton U/G ID est 1001 alors , il faut mettre 1001 ( dans les 2 lignes oui ) pour que tu puisses acceder au fichiers montés comme si c' etait les tiens .

Avant de tester le script , teste que le montage SSHFS fonctionne correctement .

PS : après vérification , chez moi , il a fallu impérativement que je copie en root le dossier .ssh .

                   -----------------------------------------

Pour verifier la validité d' un script => https://www.shellcheck.net/
Mais deja on peut dire qu ' il y un soucis avec " log info " ou kdialog  , vu :

kdialog: Option inconnue "info".

Mais , donné le retour du script n ' est pas suffisant .
il faut montrer le script utilisé ...

Dernière modification par iznobe (Hier à 09:35)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#217 Hier à 13:04

eric63

Re : script d’automatisation sauvegardes

le script c’est celui du #209 de steph810 pas de modif
le portable est allumé
le shellcheck

 $ shellcheck monscript
 
Ligne 35 :
horodatage local=$(date '+%Y-%m-%d %H:%M:%S')
^-- SC2155 (avertissement) : Déclarez et attribuez séparément pour éviter de masquer les valeurs de retour.
 
Ligne 41 :
horodatage local=$(date '+%Y-%m-%d %H:%M:%S')
^-- SC2155 (avertissement) : Déclarez et attribuez séparément pour éviter de masquer les valeurs de retour.
 
Ligne 47 :
horodatage local=$(date '+%Y-%m-%d %H:%M:%S')
^-- SC2155 (avertissement) : Déclarez et attribuez séparément pour éviter de masquer les valeurs de retour.
 
Ligne 55 :
horodatage local=$(date '+%Y-%m-%d %H:%M:%S')
^-- SC2155 (avertissement) : Déclarez et attribuez séparément pour éviter de masquer les valeurs de retour.
 
Ligne 148 :
uuid local=$(findmnt -n --output UUID "$MountPoint" 2>/dev/null)
^-- SC2155 (avertissement) : Déclarez et attribuez séparément pour éviter de masquer les valeurs de retour.
 
Ligne 216 :
si [ $? -ne 0 ]; alors
^-- SC2181 (style) : Vérifiez le code de sortie directement avec par exemple 'if ! mycmd;', pas indirectement avec $?.

$  

le dernier backup.old

 [2025-06-21 12:22:06] [INFO] === DÉBUT DE LA SAUVEGARDE ===
[2025-06-21 12:22:06] [INFO] Configuration:
[2025-06-21 12:22:06] [INFO]   - Point de montage: /media/kubu/JEUX8T
[2025-06-21 12:22:06] [INFO]   - UUID partition: 35bb9ca2-2022-4dfa-a201-1a2dde7ce1aa
[2025-06-21 12:22:06] [INFO]   - Date: 2025-06-21_12h22
[2025-06-21 12:22:06] [INFO] Vérification du disque externe...
[2025-06-21 12:22:06] [ERROR] Disque non reconnu ou éteint
[2025-06-21 12:22:06] [ERROR] UUID trouvé: ''
[2025-06-21 12:22:06] [ERROR] UUID attendu: '35bb9ca2-2022-4dfa-a201-1a2dde7ce1aa'
[2025-06-21 12:22:18] [INFO] Attente du montage du disque...
[2025-06-21 12:22:31] [INFO] Disque monté avec succès après 2 tentatives
[2025-06-21 12:22:31] [INFO] Affichage de la boîte de dialogue de sélection...
[2025-06-21 12:22:46] [INFO] Sélections utilisateur: 16
[2025-06-21 12:22:46] [INFO] === TRAITEMENT SAUVEGARDE 1 ===
[2025-06-21 12:22:46] [INFO] Sauvegarde DocumentsEricFanou sélectionnée
building file list ... 
 0 files...
 100 files...
 200 files...
 300 files...
 400 files...
 500 files...
 600 files...
 700 files...
 800 files...
 900 files...
 1000 files...
 1100 files...
1144 files to consider
…
deleting incremental-DocumentsEric/2025-06-21_12h03/incremental-DocumentsEric/2025-06-21_09h18/incremental-DocumentsEric/
…
deleting incremental-DocumentsEric/2025-06-21_12h03/incremental-DocumentsEric/2025-06-21_09h18/
deleting incremental-DocumentsEric/2025-06-21_12h03/incremental-DocumentsEric/
deleting incremental-DocumentsEric/2025-06-21_12h03/
cannot delete non-empty directory: incremental-DocumentsEric

sent 34.602 bytes  received 11 bytes  69.226,00 bytes/sec
total size is 23.133.077.721  speedup is 668.334,95
[2025-06-21 12:22:47] [INFO] Sauvegarde locale Documents kubu réussie
[2025-06-21 12:22:47] [INFO] Configuration sauvegarde DocumentsEricFanou:
[2025-06-21 12:22:47] [INFO]   - Source: fanou@192.168.1.60:/home/fanou/Documents
[2025-06-21 12:22:47] [INFO]   - Destination: /home/kubu/VMMultimedias/VMSauvegardesDocuments/VMSauvegardesDocumentsFanou/
[2025-06-21 12:22:47] [INFO]   - Répertoire de sauvegarde: incremental-DocumentsFanou/2025-06-21_12h22/
[2025-06-21 12:22:48] [ERROR] Connexion SSH vers fanou@192.168.1.60: ÉCHEC
[2025-06-21 12:22:48] [INFO] === RÉSUMÉ FINAL ===
[2025-06-21 12:22:48] [INFO] Sauvegardes traitées: 1
[2025-06-21 12:22:48] [INFO] Réussites: 0
[2025-06-21 12:22:48] [INFO] Échecs: 1
[2025-06-21 12:22:48] [WARNING] Certaines sauvegardes ont échoués. Consultez les logs.
 

le dernier error.log

 [2025-06-21 12:22:06] [ERROR] Disque non reconnu ou éteint
[2025-06-21 12:22:06] [ERROR] UUID trouvé: ''
[2025-06-21 12:22:06] [ERROR] UUID attendu: '35bb9ca2-2022-4dfa-a201-1a2dde7ce1aa'
[2025-06-21 12:22:48] [ERROR] Connexion SSH vers fanou@192.168.1.60: ÉCHEC
  

le dernier debug.log

2025-06-21 12:22:06] [DEBUG] Répertoire des logs: /home/kubu/log/backup-script
[2025-06-21 12:22:06] [DEBUG] Mode debug: 1
[2025-06-21 12:22:06] [DEBUG] Nettoyage des anciens logs (> 30 jours)
[2025-06-21 12:22:06] [DEBUG] Utilisateur: kubu
[2025-06-21 12:22:06] [DEBUG] UUID trouvé: ''
[2025-06-21 12:22:06] [DEBUG] UUID attendu: '35bb9ca2-2022-4dfa-a201-1a2dde7ce1aa'
[2025-06-21 12:22:23] [DEBUG] Tentative 1 - Vérification du montage...
[2025-06-21 12:22:25] [DEBUG] Ligne 184
[2025-06-21 12:22:25] [DEBUG] UUID vérifié: ''
[2025-06-21 12:22:27] [DEBUG] Tentative 2 - Vérification du montage...
[2025-06-21 12:22:29] [DEBUG] Ligne 184
[2025-06-21 12:22:29] [DEBUG] UUID vérifié: '35bb9ca2-2022-4dfa-a201-1a2dde7ce1aa'
[2025-06-21 12:22:46] [DEBUG] Valeur sélectionnée: 16
[2025-06-21 12:22:46] [DEBUG] Sauvegarde locale Documents kubu
[2025-06-21 12:22:48] [DEBUG] Ping vers 192.168.1.60 réussi
[2025-06-21 12:22:48] [DEBUG] Test de connexion SSH vers fanou@192.168.1.60...
 

mon  incremental-DocumentsEric ne semble pas être reconnu à coté du dossier VMSauvegardesDocumentsEric
mais c’est éparpillé dedans

kubu/VMMultimedias/VMSauvegardesDocuments/VMSauvegardesDocumentsEric/incremental-DocumentsEric/2025-06-21_12h22/incremental-DocumentsEric/2025-06-21_12h03/incremental-DocumentsEric/2025-06-21_09h18/incremental-DocumentsEric/

le dossier incremental doit être créé à coté ou cherche t il un ancien dossier nommé incremental ??

Dernière modification par eric63 (Hier à 13:13)


Kubuntu 25.04 wayland Plasma 6.3.4 KDE Qt 6.12.0 noyau 6.14.0-15 Asus B760+D4 i5-12400F 4.4Ghz DDR4 32Go nvidia RTX 3060 12GB
Utilisez les drivers libres avant d’ installer une brother avec le script de demonipuch
J’utilise le clavier french AFNOR

Hors ligne

#218 Hier à 13:20

steph810

Re : script d’automatisation sauvegardes

re,
je crois il manque peut etre underscore
%d_%H

horodatage local=$(date '+%Y-%m-%d _%H:%M:%S')

Dernière modification par steph810 (Hier à 14:11)

Hors ligne

#219 Hier à 13:26

eric63

Re : script d’automatisation sauvegardes

ok c’est remplacé

teste que le montage SSHFS fonctionne correctement .
PS : après vérification , chez moi , il a fallu impérativement que je copie en root le dossier .ssh

mon .ssh est dans mon dossier perso
tu fais cela comment en ligne de commande ??
et tu le recopie où ??

les lignes 93 à 124 ne sont elles pas sensées faire cela ??
mais je ne vois rien en konsole d’affiché quand j’exécute le script

Dernière modification par eric63 (Hier à 13:53)


Kubuntu 25.04 wayland Plasma 6.3.4 KDE Qt 6.12.0 noyau 6.14.0-15 Asus B760+D4 i5-12400F 4.4Ghz DDR4 32Go nvidia RTX 3060 12GB
Utilisez les drivers libres avant d’ installer une brother avec le script de demonipuch
J’utilise le clavier french AFNOR

Hors ligne

#220 Hier à 14:06

geole

Re : script d’automatisation sauvegardes

steph810 a écrit :

je crois il manque peut être underscore
%d_%H

horodatage local=$(date '+%Y-%m-%d _%H:%M:%S')

Bonjour
Certainement pas très utile de mettre un espace devant le underscore

Dernière modification par geole (Hier à 14:07)


Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity

Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248

Hors ligne

#221 Hier à 14:11

steph810

Re : script d’automatisation sauvegardes

geole a écrit :
steph810 a écrit :

je crois il manque peut être underscore
%d_%H

horodatage local=$(date '+%Y-%m-%d _%H:%M:%S')

Bonjour
Certainement pas très utile de mettre un espace devant le underscore

horodatage local=$(date '+%Y-%m-%d_%H:%M:%S')

MERCI tongue

Dernière modification par steph810 (Hier à 14:12)

Hors ligne

#222 Hier à 14:31

O_20_100_O

Re : script d’automatisation sauvegardes

les documents perso de chaque session sont sauvés sur la VM

Ah ! désolé je m'étais arrêté à

/home/kubu/

et j'oubliais un épisode, tu montes d'abord le répertoire cible de la VM sur kubu. Y aller directement serait trop simple.

Et si tu veux utiliser ton PC, avec des scripts comme un serveur de sauvegardes, de la VM (pour les fichiers communs), vers le disque USb 8To, et aussi du PC kubu et du portable fanou (pour les fichiers personnels), vers la VM, rclone est ton ami.
C'est rclone qui s'occupe des montages si tu as bien partagé les clés publiques.

Dernière modification par O_20_100_O (Hier à 14:32)


La vie, pour moi elle est magnifique, pourquoi tu te la compliques ?  (Zanini)

Hors ligne

#223 Hier à 14:52

iznobe

Re : script d’automatisation sauvegardes

kubu@kubu-System-Product-Name:~$ grep sshfs /etc/mtab
Multimedias@192.168.1.128:/home/Multimedias /home/kubu/VMMultimedias fuse.sshfs rw,nosuid,nodev,noexec,noatime,user_id=0,group_id=0,default_permissions,allow_other 0 0
fanou@192.168.1.60:/home/fanou/Documents /home/kubu/VMMultimedias/VMSauvegardesDocuments/VMSauvegardesDocumentsFanou fuse.sshfs rw,nosuid,nodev,noexec,noatime,user_id=0,group_id=0,default_permissions,allow_other 0 0
kubu@kubu-System-Product-Name:~$ 

Pour ma part , je trouve ça problématique . je sais je me repete encore ...
mais d' apres ce que je comprends , tu montes un dossier sur le point de montage : " /home/kubu/VMMultimedias " .
cela sous-entend que , si jamais cette sous-arborescence est existante sur ton ordi avant le montage , une fois monté , elle devient inaccessible .
Pour le 2eme montage , tu montes les documents de fanou dans : " /home/kubu/VMMultimedias/VMSauvegardesDocuments/VMSauvegardesDocumentsFanou " .
Sauf que " /home/kubu/VMMultimedias " est dejà un montage , et que tout ce qui est dans la sous-arborescence est donc monté .
un montage sur un montage , c' est pas tres propre cette histoire . surtout qu ' on ne sait meme pas ( vu que tu n' as pas donné les retours ) si dans le 1er montage il existe un dossier " /home/kubu/VMMultimedias/VMSauvegardesDocuments/VMSauvegardesDocumentsFanou " . Meme si il existe , c' est à mon avis pas conseillé de faire de la sorte ...

il faut forcément faire la distinction et " decoupler " les 2 montages . surtout que les documents de fanou ( directement de son ordi donc ) ne font pas parti de la VM que je sache .

tu crees un dossier /home/kubu/VM .
tu crees un dossier /home/kubu/fanou .

Dans le fstab , tu modifies tes 2 lignes :

Multimedias@192.168.1.128:/home/Multimedias /home/kubu/VM ...........
fanou@192.168.1.60:/home/fanou/Documents /home/kubu/fanou ...........

Pour tes sauvegardes , soit tu met tout en vrac dans : /media/$USER/JEUX8T/SAUVEGARDES

soit tu recrées la structure des dossiers sauvegardés à l' identique :
/media/$USER/JEUX8T/SAUVEGARDES/incremental-Photos
/media/$USER/JEUX8T/SAUVEGARDES/incremental-Images
/media/$USER/JEUX8T/SAUVEGARDES/incremental-Musiques
/media/$USER/JEUX8T/SAUVEGARDES/incremental-DocumentsPartages
/media/$USER/JEUX8T/SAUVEGARDES/incremental-DocumentsFanou
/media/$USER/JEUX8T/SAUVEGARDES/incremental-DocumentsEric

c' est la variable date qui vient ensuite faire la difference à l' interieur du dossier de stockage .

mon  incremental-DocumentsEric ne semble pas être reconnu à coté du dossier VMSauvegardesDocumentsEric

de toute façon c ' est mal fait ce case 16 !
un " cas " , ce n' est pas prévu pour en traiter 2 à la fois ...
donc , et bien , c' est tres simple :
il faut modifier la ligne 214 , car je n' ai pas compris a quoi sert les " on " " off "

#!/bin/bash

####6b) Créer le service d'exécution de la sauvegarde avec logging

###script de base geole largement modifié par iznobe et Watael et steph810 pour la partie debug de remplacement (plus simple) merci à eux
###voir https://forum.kubuntu-fr.org/viewtopic.php?id=2091380&p=5
### modifier les 2 premières variables des #paramètres (ligne 72) du script suivant vos emplacements disque et UUID
###script utilisé v3.4 modifié /v3.3/v146/

# Variables IP et user en haut
ipVM="192.168.1.128"
ipPortable="192.168.1.60"

# Configuration des logs
LOG_DIR="$HOME/log/backup-script"
LOG_FILE="$LOG_DIR/backup_$(date +%Y%m%d_%H%M).log"
DEBUG_FILE="$LOG_DIR/debug_$(date +%Y%m%d_%H%M).log"
ERROR_FILE="$LOG_DIR/error_$(date +%Y%m%d_%H%M).log"

# Création du répertoire de logs s'il n'existe pas
mkdir -pv "$LOG_DIR"

# Choix du mode debug via kdialog
if kdialog --yesno "Voulez-vous activer le mode DEBUG (log verbeux) ?"; then
    DEBUG_MODE=1
else
    DEBUG_MODE=0
fi

#DEBUG_MODE=1

# Fonctions de logging
log_info() {
    local message="$1"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    echo "[$timestamp] [INFO] $message" | tee -a "$LOG_FILE"
}

log_error() {
    local message="$1"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    echo "[$timestamp] [ERROR] $message" | tee -a "$LOG_FILE" | tee -a "$ERROR_FILE"
}

log_debug() {
    local message="$1"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    if [ "$DEBUG_MODE" -eq 1 ]; then
        echo "[$timestamp] [DEBUG] $message" | tee -a "$DEBUG_FILE"
    fi
}

log_warning() {
    local message="$1"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    echo "[$timestamp] [WARNING] $message" | tee -a "$LOG_FILE"
}

# Fonction pour nettoyer les anciens logs (garde les 30 derniers jours)
cleanup_old_logs() {
    log_debug "Nettoyage des anciens logs (> 30 jours)"
    find "$LOG_DIR" -name "*.log" -type f -mtime +30 -delete 2>/dev/null
}

# Gestion des erreurs et interruptions
trap 'log_error "Script interrompu par signal"; exit 130' INT TERM

# Fonction test ping (pour vérifier si machine est accessible avant ssh)
test_ping() {
    local ip="$1"
    if ping -c 2 -W 2 "$ip" >/dev/null 2>&1; then
        log_debug "Ping vers $ip réussi"
        return 0
    else
        log_warning "Ping vers $ip échoué"
        return 1
    fi
}

# Fonction test ssh avant rsync avec timeout augmenté
test_ssh() {
    local user="$1"
    local ip="$2"
    log_debug "Test de connexion SSH vers $user@$ip..."
    if timeout 15 ssh -o ConnectTimeout=10 -o BatchMode=yes "$user@$ip" exit 2>/dev/null; then
        log_info "Connexion SSH vers $user@$ip: OK"
        return 0
    else
        log_error "Connexion SSH vers $user@$ip: ÉCHEC"
        return 1
    fi
}

# Fonction test validation clé SSH
test_ssh_key() {
    local user="$1"
    local ip="$2"
    log_debug "Test de validation de la clé SSH pour $user@$ip..."
    
    # Vérifier d'abord si une clé SSH existe localement
    local ssh_key_found=0
    for key_type in rsa ed25519 ecdsa dsa; do
        if [ -f "$HOME/.ssh/id_$key_type" ] || [ -f "$HOME/.ssh/id_$key_type.pub" ]; then
            log_debug "Clé SSH $key_type trouvée localement"
            ssh_key_found=1
            break
        fi
    done
    
    if [ $ssh_key_found -eq 0 ]; then
        log_warning "Aucune clé SSH trouvée dans $HOME/.ssh/"
        return 1
    fi
    
    # Test de connexion SSH avec clé (sans mot de passe)
    log_debug "Test de connexion avec clé SSH vers $user@$ip..."
    if timeout 10 ssh -o ConnectTimeout=8 -o BatchMode=yes -o PasswordAuthentication=no -o PubkeyAuthentication=yes "$user@$ip" exit 2>/dev/null; then
        log_info "Authentification par clé SSH vers $user@$ip: OK"
        return 0
    else
        log_warning "Authentification par clé SSH vers $user@$ip: ÉCHEC"
        log_warning "La clé SSH n'est peut-être pas configurée ou acceptée sur le serveur distant"
        return 1
    fi
}

# Début du script
log_info "=== DÉBUT DE LA SAUVEGARDE ==="
log_debug "Répertoire des logs: $LOG_DIR"
log_debug "Mode debug: $DEBUG_MODE"

# Nettoyage des anciens logs
cleanup_old_logs

###Paramètres
MountPoint="/media/$USER/JEUX8T"
PartitionUID="35bb9ca2-2022-4dfa-a201-1a2dde7ce1aa"
date=$(date +%F_%Hh%M)

log_info "Configuration:"
log_info "  - Point de montage: $MountPoint"
log_info "  - UUID partition: $PartitionUID"
log_info "  - Date: $date"
log_debug "Utilisateur: $USER"

# Fonction pour obtenir l'UUID du disque monté
get_disk_uuid() {
    local uuid=$(findmnt -n --output UUID "$MountPoint" 2>/dev/null)
    echo "$uuid"
}

###controle validité disque solution#125 Watael
log_info "Vérification du disque externe..."

# Mise à jour initiale de ctrlID - CORRECTION: une seule fois
ctrlID=$(get_disk_uuid)
log_debug "UUID trouvé: '$ctrlID'"
log_debug "UUID attendu: '$PartitionUID'"

if [[ "$ctrlID" != "$PartitionUID" ]]
then
    log_error "Disque non reconnu ou éteint"
    log_error "UUID trouvé: '$ctrlID'"
    log_error "UUID attendu: '$PartitionUID'"

    echo "échec"
    echo "ctrlID: '$ctrlID'"
    echo "partition: '$PartitionUID'"
    kdialog --error "Aucun disque reconnu ou disque éteint \n ALLUMER LE DISQUE EXTERNE \n AVANT de sélectionner «OK»"

    log_info "Attente du montage du disque..."
    sleep 5

    # Boucle de détection du disque
    attempt=1
    while [[ "$ctrlID" != "$PartitionUID" ]]
    do
        log_debug "Tentative $attempt - Vérification du montage..."
        sleep 2

        # Mise à jour de ctrlID avec la fonction
        ctrlID=$(get_disk_uuid)

        log_debug "Ligne $LINENO"
        echo "ctrlID: '$ctrlID'"
        echo "partition: '$PartitionUID'"
        log_debug "UUID vérifié: '$ctrlID'"
        sleep 2
        ((attempt++))

        if [ $attempt -gt 60 ]; then
            log_error "Timeout: Disque non monté après 60 tentatives"
            kdialog --error "Timeout: Impossible de détecter le disque"
            exit 1
        fi
    done

    log_info "Disque monté avec succès après $((attempt-1)) tentatives"
    echo "réussite"
    echo "ctrlID: '$ctrlID'"
    echo "partition: '$PartitionUID'"
    kdialog --info "Le disque est monté \n La sauvegarde peut être faite maintenant"

else
    log_info "Disque correctement monté"
    echo "réussite"
    echo "ctrlID: '$ctrlID'"
    echo "partition: '$PartitionUID'"
    kdialog --info "Le disque est monté \n La sauvegarde peut être faite maintenant"
fi

### choix des sauvegardes
log_info "Affichage de la boîte de dialogue de sélection..."
resultats=$(kdialog --separate-output --checklist "Selection liste:"  1 "Sauvegarde Photos" on 2 "Sauvegarde Images" on 4 "Sauvegarde Musiques" on 8 "Sauvegarde DocumentsCommuns" off 16 "Sauvegarde DocumentsEricFanou" off)

if [ $? -ne 0 ]; then
    log_warning "Utilisateur a annulé la sélection"
    exit 0
fi

log_info "Sélections utilisateur: $resultats"
backup_count=0
successful_backups=0
failed_backups=0

for i in $resultats
###choix façon Watael
do
    backup_count=$((backup_count + 1))
    log_info "=== TRAITEMENT SAUVEGARDE $backup_count ==="
    log_debug "Valeur sélectionnée: $i"

    case $i in
        1)
            log_info "Sauvegarde Photos sélectionnée"
            echo Photos
            user=Multimedias
            ip=$ipVM
            src=/home/Multimedias/MultimediasCommuns/Photos
            dst=$MountPoint/SAUVEGARDES/
            bkp=incremental-Photos/$date/
            backup_name="Photos"
            ;;
        2)
            log_info "Sauvegarde Images sélectionnée"
            echo Images
            user=Multimedias
            ip=$ipVM
            src=/home/Multimedias/MultimediasCommuns/Images
            dst=$MountPoint/SAUVEGARDES/
            bkp=incremental-Images/$date/
            backup_name="Images"
            ;;
        4)
            log_info "Sauvegarde Musiques sélectionnée"
            echo Musiques
            user=Multimedias
            ip=$ipVM
            src=/home/Multimedias/MultimediasCommuns/Musiques
            dst=$MountPoint/SAUVEGARDES/
            bkp=incremental-Musiques/$date/
            backup_name="Musiques"
            ;;
        8)
            log_info "Sauvegarde DocumentsCommuns sélectionnée"
            echo DocumentsCommuns
            user=Multimedias
            ip=$ipVM
            src=/home/Multimedias/DocumentsPartages
            dst=$MountPoint/SAUVEGARDES/SauvegardesDocumentsCommuns/
            bkp=incremental-DocumentsPartages/$date/
            backup_name="DocumentsCommuns"
            ;;
        16)
            log_info "Sauvegarde DocumentsFanou sélectionnée"
            echo DocumentsFanou
            user=fanou
            ip=$ipPortable
            src=/home/fanou/Documents
            dst=/home/kubu/VMMultimedias/VMSauvegardesDocuments/VMSauvegardesDocumentsFanou/
            bkp=incremental-DocumentsFanou/$date/
            backup_name="DocumentsFanou"
            ;;
        32)
        	log_info "Sauvegarde DocumentsEric sélectionnée"
            echo DocumentsEric
            user=Multimedias
            ip=$ipVM
            src=/home/kubu/Documents
            dst=/home/kubu/VMMultimedias/VMSauvegardesDocuments/VMSauvegardesDocumentsFanou/
            bkp=incremental-DocumentsEric/$date/
            backup_name="DocumentsEric"
            ;;
        *)
            log_warning "Valeur inconnue ignorée: $i"
            backup_count=$((backup_count - 1))  # Correction: décrémenter le compteur
            continue
            ;;
    esac

    log_info "Configuration sauvegarde $backup_name:"
    log_info "  - Source: $user@$ip:$src"
    log_info "  - Destination: $dst"
    log_info "  - Répertoire de sauvegarde: $bkp"

    # Test ping avant test ssh
    if ! test_ping "$ip"; then
        log_error "Ping vers $ip a échoué, sauvegarde annulée"
        failed_backups=$((failed_backups + 1))
        continue
    fi

    # Test SSH avant rsync - CORRECTION: logique simplifiée avec timeout augmenté
    if ! test_ssh "$user" "$ip"; then
        failed_backups=$((failed_backups + 1))
        continue
    fi

    # Test de validation de la clé SSH
    if ! test_ssh_key "$user" "$ip"; then
        log_warning "Clé SSH non configurée pour $user@$ip, la connexion utilisera probablement un mot de passe"
        # Note: Ceci est juste un avertissement, la sauvegarde peut continuer
    fi

    # Vérification de l'existence du répertoire de destination
    if [ ! -d "$dst" ]; then
        log_warning "Répertoire destination n'existe pas: $dst"
        log_info "Tentative de création..."
        if mkdir -p "$dst" 2>> "$ERROR_FILE"; then
            log_info "Répertoire créé avec succès: $dst"
        else
            log_error "Impossible de créer le répertoire: $dst"
            failed_backups=$((failed_backups + 1))
            continue
        fi
    fi

    # Affichage popup
    kdialog --passivepopup "Sauvegarde $backup_name en cours..." 30 &
    popup_pid=$!

    log_info "Début de la sauvegarde $backup_name..."
    start_time=$(date +%s)

    # Exécution de rsync avec capture des logs - CORRECTION: guillemets ajoutés
    if rsync --progress -a -v --delete-after -e ssh "$user@$ip:$src" "$dst" --backup --backup-dir="$bkp" >> "$LOG_FILE" 2>> "$ERROR_FILE"; then
        end_time=$(date +%s)
        duration=$((end_time - start_time))
        log_info "Sauvegarde $backup_name réussie en ${duration}s"
        successful_backups=$((successful_backups + 1))
    else
        end_time=$(date +%s)
        duration=$((end_time - start_time))
        log_error "Échec sauvegarde $backup_name après ${duration}s"
        failed_backups=$((failed_backups + 1))
    fi

    # Fermer le popup s'il existe encore
    if [ -n "$popup_pid" ]; then
        kill "$popup_pid" 2>/dev/null
    fi
done

# Résumé final
log_info "=== RÉSUMÉ FINAL ==="
log_info "Sauvegardes traitées: $backup_count"
log_info "Réussites: $successful_backups"
log_info "Échecs: $failed_backups"

if [ $failed_backups -eq 0 ]; then
    log_info "Toutes les sauvegardes ont réussi !"
    kdialog --msgbox "FIN de(s) sauvegarde(s) $resultats - TOUTES RÉUSSIES !"
else
    log_warning "Certaines sauvegardes ont échoués. Consultez les logs."
    kdialog --msgbox "FIN de(s) sauvegarde(s) $resultats - $failed_backups échec(s) détecté(s)\nConsultez les logs: $LOG_FILE"
fi

log_info "=== FIN DE LA SAUVEGARDE ==="
log_info "Logs disponibles dans: $LOG_DIR"

retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#224 Hier à 14:55

iznobe

Re : script d’automatisation sauvegardes

eric63 a écrit :

teste que le montage SSHFS fonctionne correctement .
PS : après vérification , chez moi , il a fallu impérativement que je copie en root le dossier .ssh

mon .ssh est dans mon dossier perso
tu fais cela comment en ligne de commande ??
et tu le recopie où ??

les lignes 93 à 124 ne sont elles pas sensées faire cela ??
mais je ne vois rien en konsole d’affiché quand j’exécute le script

les lignes 93 a 124 du script de steph 810 ? absolument rien à voir . ( je l ' ai deja dis , cela ne sert à rien , c' est bien pour cela que j ' avais enlevé du script ) , mais bon , on va pas se battre continuellement , alors que son objectif est d' en mettre le plus possible , alors que moi , c' est l' inverse , moins y en a mieux c' est roll , avec 4 lignes c' est largement suffisant . je t' ai donné le script que j' aurais utilisé deja ( j ' ai juste ajouté le controle pour les sources a celui que j' utilise vu que toi tu ajoutes la couche SSH alors que moi ca se passe entièrement en local ) .


donne les retours :

sudo -i

cp -r /home/kubu/.ssh/  /root

exit

Montage et verif :

sudo mount -a

grep sshfs /etc/mtab

Dernière modification par iznobe (Hier à 14:59)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#225 Hier à 15:17

eric63

Re : script d’automatisation sauvegardes

kubu@kubu-System-Product-Name:~$ sudo -i
[sudo] password for kubu: 
root@kubu-System-Product-Name:~# cp -r /home/kubu/.ssh/  /root
root@kubu-System-Product-Name:~# sudo mount -a
root@kubu-System-Product-Name:~# grep sshfs /etc/mtab
Multimedias@192.168.1.128:/home/Multimedias /home/kubu/VMMultimedias fuse.sshfs rw,nosuid,nodev,noexec,noatime,user_id=0,group_id=0,default_permissions,allow_other 0 0
fanou@192.168.1.60:/home/fanou/Documents /home/kubu/VMMultimedias/VMSauvegardesDocuments/VMSauvegardesDocumentsFanou fuse.sshfs rw,nosuid,nodev,noexec,noatime,user_id=0,group_id=0,default_permissions,allow_other 0 0
root@kubu-System-Product-Name:~# 

Kubuntu 25.04 wayland Plasma 6.3.4 KDE Qt 6.12.0 noyau 6.14.0-15 Asus B760+D4 i5-12400F 4.4Ghz DDR4 32Go nvidia RTX 3060 12GB
Utilisez les drivers libres avant d’ installer une brother avec le script de demonipuch
J’utilise le clavier french AFNOR

Hors ligne