Hubicfuse : Nettoyage automatique des fichiers temporaires
Si vous utilisez Hubicfuse de façon régulière, vous avez sans doute constaté l’utilisation d’un espace temporaire lorsque vous accédez aux fichiers stockés sur le cloud d’OVH.
Ce petit schéma explique le fonctionnement de cet espace temporaire :
Lorsque vous accédez à un fichier stocké dans le cloud OVH (1) et que, par exemple, vous le copiez sur votre répertoire local, hubicfuse va, avant tout, le copier dans un répertoire temporaire (2) puis une fois entièrement rapatrié depuis le cloud, copier ce fichier dans votre répertoire local (3)
Le mécanisme est identique si vous lisez le contenu d’un fichier (documents, vidéos, mp3) , celui-ci est d’abord copié dans cette espace temporaire avant d’être rendu accessible.
Après cette opération, les fichiers temporaires NE SONT PAS supprimés.
Aussi, si vous ne surveillez pas régulièrement ce répertoire temporaire, vous risquez de remplir votre file system.
La solution est donc de purger le plus souvent possible ce répertoire tout en ne supprimant que les fichiers non utilisés.
J’en profite pour créer deux variables qui seront utilisées dans mon script shell :
Puis, première étape, je scanne le répertoire $temp_dir et enregistre la liste des fichiers trouvés dans un fichier temporaire :
J’ajoute ces informations dans un fichier de log, toujours utile pour se tenir au courant de l’activité de son script :
Maintenant, je récupère le PID du process hubicfuse :
Et l'ajoute dans ma log :
Les étapes préliminaires terminées, nous allons « boucler » sur la liste des fichiers trouvées et vérifier si chaque fichier est locké par le process hubicfuse ou non :
- La première solution consiste à exécuter de façon régulière une commande find pour supprimer le fichier plus de vieux de X jours, heures ou même minutes en fonction de ce que vous faites avec vos fichiers stockés sur hubic.
- La deuxième solution consiste également à scanner ce répertoire temporaire et à effacer les fichiers qui ne sont plus « locké » par hubicfuse, c’est-à-dire les fichiers arrivés dans leurs répertoires de destinations respectifs.
1 |
~/.hubicfuse |
1 2 |
HUBIC_USER="root" LOG_FILE="/tmp/hubicfuse_auto_clean.log" |
1 2 |
ls -a $temp_dir/.cloudfuse* > /tmp/.auto_clean_file_list 2>/dev/null nb_file=$(cat /tmp/.auto_clean_file_list | wc -l) |
1 |
DATE=`date +%Y-%m-%d:%H:%M:%S`echo $DATE";"$nb_file" temp file(s)" >> $LOG_FILE |
1 |
check_process=$(ps -u $HUBIC_USER -f | grep hubicfuse | grep -v grep | awk '{print $2}' ) |
1 2 |
DATE=`date +%Y-%m-%d:%H:%M:%S` echo $DATE";Process Hubicfuse : "$check_process >> $LOG_FILE |
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 |
for file in $(cat /tmp/.auto_clean_file_list ) do # Initialisation de la variable de check lsof return_lsof="" # On scanne uniquement si le fichier a un nom différent de .. et . if [[ $file != ".." && $file != "." ]] then # On vérifie si le process hubicfus lock le fichier $file return_lsof=$(lsof -p $check_process | grep $file | awk '{print $1"|"$2"|"$7}') # Si la variable $return_losf est vide, alors on efface le fichier if [[ ! "$return_lsof" ]] then DATE=`date +%Y-%m-%d:%H:%M:%S` # On log echo $DATE";delete "$file >> $LOG_FILE # On efface rm -f $file else # On "etudie" le contenu de la variable $return_lsof # contenant les informations relatif au fichier en cours # Nom du process lockant le fichier process_lock=$(echo $return_lsof | cut -d '|' -f1) # ¨Pid du process pid_lock=$(echo $return_lsof | cut -d '|' -f2) # Taille du fichier size_in_progress=$(echo $return_lsof | cut -d '|' -f3) # On log echo $process_lock"(pid:"$pid_lock") "$file >> $LOG_FILE fi fi done |