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 : hubicfuse et les fichiers temporaires 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.
  • 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.
Dans les deux cas, l’automatisation s’effectue via une tâche cron. Pour ma part, je me suis orienté vers la deuxième solution. Voici donc, étape par étape,  le script que j’ai mis en place. Vous pouvez ensuite articuler comme vous le souhaitez en vous basant sur mon propre code et/ou en l’adaptant à vos propres besoins. D’abord je « source » le fichier de configuration de hubicfuse pour hériter de sa configuration :
~/.hubicfuse
J’en profite pour créer deux variables qui seront utilisées dans mon script shell :
HUBIC_USER="root"
LOG_FILE="/tmp/hubicfuse_auto_clean.log"
Puis, première étape, je scanne le répertoire $temp_dir et enregistre la liste des fichiers trouvés dans un fichier temporaire :
ls -a $temp_dir/.cloudfuse*  > /tmp/.auto_clean_file_list 2>/dev/null
nb_file=$(cat /tmp/.auto_clean_file_list | wc -l)
J’ajoute ces informations dans un fichier de log, toujours utile pour se tenir au courant de l’activité de son script :
DATE=`date +%Y-%m-%d:%H:%M:%S`echo $DATE";"$nb_file" temp file(s)" >> $LOG_FILE
Maintenant, je récupère le PID du process hubicfuse :
check_process=$(ps -u $HUBIC_USER -f | grep hubicfuse | grep -v grep | awk '{print $2}' )
Et l'ajoute dans ma log :
DATE=`date +%Y-%m-%d:%H:%M:%S`
echo $DATE";Process Hubicfuse : "$check_process >> $LOG_FILE
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 :
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

 

Nicolas Housset

Passionné d'informatique, je suis Consultant et expert technique SAS VIYA, également co-fondateur de la société Flexcelite. Spécialisé dans les technologies SAS (Viya, 9.4) et les infrastructures associées (Linux, Hadoop, Azure), ce blog est mon espace pour partager mes mémos techniques et retours d'expérience.