Aller au contenu

Messages recommandés

Posté(e) (modifié)

Bonjour à tous,

 

J'utilise un NAS synology pour du pur backup de mon infrastructure (plusieurs autres NAS avec divers "shared folders").
Pour effectuer ces backups journaliers en mode block-level, j'utilise des scripts Rsync configurés dans task scheduler. Jusque là tout va bien.

Mais je voudrais que le volume1 de ce NAS de backup se purge automatiquement en effaçant les plus vieux folders dans chacun de ses shared folders (de destination des backups, donc) lorsque le quota atteint/dépasse 90% d'occupation.

J'ai créé une nouvelle task juste pour ça, mais ça ne semble pas fonctionner. Quelqu'un sait-il me dire ce qui coince ici?

Voici le script en question :

#!/bin/bash
 
# -----------------------------------------------------------------------------
# DELETE older folders à 90% d'occupation du serveur
# -----------------------------------------------------------------------------
 
# Set variables
BACKUP_DIR="/volume1"  # Path to the backup directory
THRESHOLD=90  # Disk usage percentage threshold (90%)
REMOVE_AMOUNT=10  # The number of oldest directories to delete at a time
 
# Get current disk usage percentage for the volume where BACKUP_DIR is located
USAGE=$(df "$BACKUP_DIR" | awk 'NR==2 {print $5}' | sed 's/%//')
 
# Check if disk usage exceeds the threshold
if [ "$USAGE" -ge "$THRESHOLD" ]; then
 echo "Disk usage is at $USAGE%, exceeding the $THRESHOLD% threshold."
 
 # Find the oldest directories/files in the backup folder and delete them
 while [ "$USAGE" -ge "$THRESHOLD" ]; do
   # Find and delete the oldest directories/files
   OLDEST_FILES=$(find "$BACKUP_DIR" -mindepth 2 -maxdepth 2 -type d ! -path "$BACKUP_DIR/mnt*" ! -path "$BACKUP_DIR/home*" ! -path "$BACKUP_DIR/homes*" -exec stat -c "%Y %n" {} \; | sort -n | awk '{print $2}' | head -n $REMOVE_AMOUNT)
 
   # Delete the oldest files
   if [ -n "$OLDEST_FILES" ]; then
     echo "Deleting oldest directories: $OLDEST_FILES"
     echo "$OLDEST_FILES" | xargs rm -rf
   else
     echo "No more directories to delete."
     break
   fi
 
   # Update disk usage after deletion
   USAGE=$(df "$BACKUP_DIR" | awk 'NR==2 {print $5}' | sed 's/%//')
 done
else
 echo "Disk usage is at $USAGE%, below the $THRESHOLD% threshold."
fi
Modifié par QuentinR
Posté(e)

Bonjour,
Il serait bien d'indiquer à quel endroit ce script pose problème. Détection du seuil ? Recherche des fichiers les plus anciens ? Suppression ?

Ou est-ce la valeur de $USAGE n'est pas recalculée après les suppressions ?

Posté(e)

Bonjour,

Je suis un vrai newbie, donc je ne sais pas vraiment comment voir où se situe le problème.

Ce que je sais c'est que le script tourne et occupe pas mal les ressources du NAS (au point que certains process de backup, aussi configurés dans task scheduler, ne sont pas effectués), mais au final rien ne se produit. Après trois jours, aucun résultat...

Je dois peut-être juste préciser que le NAS a une capacité totale de 190 To. Donc le script devrait agir plus ou moins lorsque le remplissage atteint 171 To. Est-ce le fait que ce soit un gros chiffre, et du coup ça prend énormément de temps? Mais alors chaque fois que le script sera lancé, cela prendra toujours énormément de temps et cela empêchera d'autres scripts d'être processés....?

Thx

Posté(e)

Tant que le seuil n'est pas atteint, le script ne prend aucune ressource car il se termine immédiatement. La commande df est rapide.
Il serait bien de lancer ce script en ligne de commande pour voir quelles informations sont affichées et notamment le retour des commandes echo. Par contre, la commande find peut mettre du temps car elle va chercher la date de chaque fichier. Et comme ce script supprime les fichiers par lots de 10, il peut boucler un certain nombre de fois.

PS : Je ne l'avais pas vu au départ mais la variable $USAGE est bien recalculée à chaque itération.

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.