Aïe ma partition /tmp est trop petite, comment déplacer le répertoire /tmp sous debian sur une autre partition ?

Si vous vous retrouvez dans le cas où votre partition /tmp est trop petite, par exemple avec un cron qui demande beaucoup de place dans /tmp et oui cela peut arriver, il existe une astuce pour déplacer votre répertoire /tmp sur une autre partition où vous aurez plus d’espace disque. Je vais faire ici un résumé du forum suivant : https://debian-facile.org/viewtopic.php?pid=43446#p43446, si vous souhaitez plus de détails sur le sujet de nombreuses notions sont abordées sur ce forum.

Dans notre cas d’exemple, nous avons un disque séparé en plusieurs partitions : la partition racine / de 10Go contenant notre fameux dossier /tmp et une partition pour /home de 145Go.

Le problème est survenue de manière silencieuse au départ, un cron qui grossit en terme d’actions à réaliser comme des rsync et donc qui grossit en terme d’espace temporaire nécessaire tant que la partition / avait assez de place pas de soucis le disque se remplissait (pas entièrement) de fichiers temporaires et une fois le cron fini les fichiers était « réellement » supprimé.

Ce point est important, il existe plusieurs commandes pour évaluer la place prises sur une partition « df » qui vous retourne l’espace occupé ainsi que l’espace total et par une soustraction magnifique cette commande arrive à vous retournez l’espace libre (c’est incroyable ;)) et une seconde commande « du » (et son dérivé « ncdu » basé sur le même comportement que « du ») qui elle vous retourne l’espace occupé par le dossier passer en paramètre. Et bien ces 2 commandes n’ont pas le même comportement, la commande « df » tient compte des fichiers supprimés mais encore présent sur le disque car ouvert par un processus, ce n’est pas le cas pour « du » (et son dérivé « ncdu ») qui lui ne considère plus les fichiers supprimés même s’ils sont encore ouvert par un processus. Et là nous avons un souci car on peut passer beaucoup de temps à regarder quel dossier est en surpoids avec « du » sans jamais trouver la réponse.

Ce point expliqué passons au vif du sujet, comme vous l’imaginez le problème n’est réellement apparu que lorsque le cron a saturé la partition racine est a donc fait « planté » le serveur.

A partir de là et après de multiples enquêtes à base de lsof | grep deleted pour récupérer la liste des fichiers effacés encore ouvert par un processus puis un ls -alh /proc/Processus_ID/fd/ pour voir où le ou les fichiers en question étaient stockés, je me suis aperçu que le dossier fautif était toujours /tmp.

Ce faisant j’ai fait des recherches et suis tombé sur ce forum traitant de debian, et voici comment j’ai déplacé le dossier temporaire du serveur debian.

J’ai utilisé la méthode dite « commune » dans le post ci-dessus (mais pas toutes les étapes, par exemple je ne suis pas passé en mode failsafe et oui serveur de prod oblige on évite les redémarrages). Je me suis donc mis en root puis assuré qu’aucun processus n’avait besoin de /tmp avec ps aux | grep tmp, s’il y en a il faut « killé » les processus avec kill -9 ProcessusId. Ensuite j’ai créer mon nouveau répertoire qui allait accueillir le contenu de /tmp (pas sur la partition racine on est d’accord sinon ça ne sert à rien) mkdir /home/MonCheminVersLeNouveauRepertoireTmp (ce dossier peut être préfixé par un point pour le caché ex : /home/MonCheminVersLeNouveauRepertoireTmpCaché/.tmp). On lui met les bons droits pour en faire un répertoire temporaire en bonne et dû forme chmod -R 1777 /home/MonCheminVersLeNouveauRepertoireTmp (Pour plus de détails sur le 1 de 1777 voire le forum). Jusque là tout va bien nous n’avons pas modifié le comportement de notre debian mais là nous allons voir le changement dans pas longtemps.
Avec toutes les précautions et le stress qu’il faut j’ai lancé un rm -rf /tmp, à cet instant il n’y a plus grand chose qui fonctionne (par exemple passenger pour les rubyistes) même la simple complétion des chemins lorsque l’on fait « tab » affiche une erreur très inquiétante, donc très rapidement je lance ln -s /home/MonCheminVersLeNouveauRepertoireTmp /tmp. A ce moment là la complétion avec « tab » refonctionne ouf c’est réparé et bien pas tout a fait encore une fois passenger lui ne se relance pas automatiquement notament son module pour apache2 donc faire un petit /etc/init.d/apache2 restart n’est pas de trop et je pense que d’autres programmes doivent être dans le même cas à vous de voir.

Et voilà, essayer de mettre des gros fichiers dans /tmp et un df -lh, plus tard vous verrez que ce n’est plus la partition / qui se remplie mais bien la partition /home.

Enjoy 😉

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.