Sur les machines «clientes», le moyen le plus sûr de se déplacer /tmp
est de redémarrer. Ici, par client, je veux dire tout ce qui exécute des programmes qui mettent des sockets /tmp
, en particulier les serveurs X et l'écran.
Le nouveau /tmp
doit définitivement avoir les bonnes autorisations (1777), sinon vous ne pouvez pas espérer avoir un système qui fonctionne.
Car /tmp
, vous ne pouvez pratiquement pas copier de fichiers. C'est parce que la plupart du temps, des programmes qui mettent des trucs dans /tmp
les fichiers ouverts. Si vous copiez le fichier, cela copie le contenu, mais les programmes ont toujours les anciens fichiers ouverts. Vous pourriez être en mesure de les atteindre avec un débogueur ( ptrace
), mais ce sera beaucoup plus compliqué que de redémarrer, et avec de nombreux programmes, tout ce que vous feriez, c'est de les planter de toute façon.
Si votre /tmp
est plein et que vous souhaitez passer à un nouveau live, vous devez redémarrer tous les programmes qui ont des fichiers ouverts là-bas. Comme cela signifie redémarrer les sessions X et écran, ce n'est pas beaucoup mieux que de redémarrer.
Vous devriez pouvoir passer à de nouveaux programmes mais garder les fichiers ouverts existants en place en utilisant un montage union . (Le principe est valable, mais je n'ai jamais essayé, il peut donc y avoir des problèmes inattendus.) Voici une façon de procéder sous Linux.
- Conservez tous les fichiers existants à l'
/tmp
exception de quelques gros fichiers sélectionnés manuellement.
- Créez un
/tmp.new
(mode 1777).
- Exposer
/tmp
sur un autre chemin: mount --bind / /.root.only
. Cela est nécessaire car la prochaine étape sera ombragée /tmp
. Il peut y avoir différentes implémentations de montage d'union qui ne nécessitent pas cette étape.
- Faites un montage union de
/.root.only/tmp
et /tmp.new
, monté sur /tmp
. De cette façon, les nouveaux fichiers créés dans /tmp
seront écrits /tmp.new
, mais les fichiers dans /.root.only/tmp
sont également visibles sous /tmp
. Une possibilité est
unionfs-fusible : unionfs-fuse /tmp.new:/.root.only/tmp /tmp
.
Si vous ne souhaitez pas accéder à la racine de montage d'union (par exemple, car elle n'est pas disponible sur votre plate-forme ou parce que cela pose trop de problèmes), au moins ne supprimez pas l'ancien répertoire. Déplacez- le pour que les programmes en cours d'exécution continuent d'utiliser l'ancien répertoire et que les nouveaux programmes utilisent le nouveau. (Bien sûr, les nouveaux programmes ne pourront pas communiquer avec les anciens programmes via des sockets ou des tuyaux à /tmp
moins que vous ne les définissiez TMPDIR
ou leur disiez où chercher.)
mv /tmp /tmp.old && mkdir /tmp