QuentinR Posté(e) le 13 février Posté(e) le 13 février (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é le 13 février par QuentinR 0 Citer
Eric Plontz Posté(e) le 13 février Posté(e) le 13 février 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 ? 0 Citer
QuentinR Posté(e) le 13 février Auteur Posté(e) le 13 février 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 0 Citer
Eric Plontz Posté(e) le 13 février Posté(e) le 13 février 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. 0 Citer
Messages recommandés
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.