web-dev-qa-db-fra.com

Comment (en toute sécurité) Déplacer / TMP à un volume différent?

Aujourd'hui le /tmp répertoire rempli sur une machine au travail. Le problème était que c'était sur la partition racine qui n'était pas très grande. Afin de résoudre ce problème, un collègue a créé un /new/tmp Annuaire ailleurs, copié tout le contenu du nouveau répertoire, supprimé l'original /tmp et fait un lien symbolique /tmp -> /new/tmp.

Quand il a copié les fichiers (vraiment, c'était quelqu'un d'autre, pas moi!) Il n'a pas utilisé -a donc le propriétaire de chaque fichier sous /new/tmp était root. En outre, il n'a pas fixé les autorisations de la /new/tmp Répertoire de sorte qu'il s'agissait de la valeur par défaut 0755. Cela n'a provoqué aucune fin de problèmes et même le mode de peaufinage et les bits de propriété n'ont pas réussi à restaurer la machine à un état de fonctionnement de manière acceptable. J'ai fini par avoir à tout Nuke tout dans /tmp et redémarrez.

Les /tmp Directory contenait divers sockets et tuyaux et qu'on puisque un groupe de personnes exécutent Gnome via VNC et j'utilise screen qui a ses propres tuyaux.

Y a-t-il un coffre-fort moyen de déplacer un /tmp répertoire à un volume différent sur un système d'exécution? Je ne suis pas sûr de ce que j'aurais réellement fait pour tout travailler. Je suis particulièrement curieux de ce qui arrive aux tuyaux et aux sockets.

17
Greg Hewgill

Sur les machines "client", le moyen sûr de déplacer /tmp est de redémarrer. Ici, par client, je veux dire tout ce qui dirige des programmes qui mettent des sockets en /tmp, en particulier X serveurs et écran.

Le nouveau /tmp Il faut certainement avoir les bonnes autorisations (1777), sinon vous ne pouvez pas espérer avoir un système de travail.

Pour /tmp, vous ne pouvez pas copier aucun fichier. C'est parce que la plupart du temps, des programmes qui mettent des choses dans /tmp Ouvrez les fichiers. Si vous copiez le fichier, cela copie le contenu, mais les programmes sont toujours ouverts les anciens fichiers. Vous pourriez être capable de les atteindre avec un débogueur (ptrace), mais cela sera beaucoup plus compliqué que le redémarrage, et avec de nombreux programmes que vous feriez, c'est de les planter de toute façon.

Si votre /tmp est plein et vous souhaitez basculer vers une nouvelle Live, vous devez redémarrer tous les programmes qui ont des fichiers ouverts là-bas. Puisque cela signifie redémarrer x et sérigraphies, ce n'est pas beaucoup mieux que le redémarrage.

Vous devriez pouvoir basculer pour de nouveaux programmes, mais conserver des fichiers ouverts existants en place à l'aide d'un nion Mount . (Le principe est sonore, mais je n'ai jamais essayé, il peut donc y avoir des problèmes par moi-inattendus.) Voici un moyen de le faire sur Linux.

  1. Gardez tous les fichiers existants dans /tmp Sauf pour quelques grands sélectionnés manuellement.
  2. Créer un /tmp.new (mode 1777).
  3. Exposer /tmp sur un chemin différent: mount --bind / /.root.only. Ceci est nécessaire car la prochaine étape sera Shadow /tmp. Il peut y avoir différentes implémentations d'union sur le point d'exécution qui ne nécessitent pas cette étape.
  4. Faire un mont union de /.root.only/tmp et /tmp.new, monté sur /tmp. De cette façon de nouveaux fichiers créés dans /tmp sera écrit en /tmp.new, mais les fichiers de /.root.only/tmp sont également visibles sous /tmp. Une possibilité est Unitéfs-fusible : unionfs-Fuse /tmp.new:/.root.only/tmp /tmp.

Si vous ne voulez pas aller à la racine du mont Union (par exemple, car il n'est pas disponible sur votre plate-forme ou parce que c'est trop de problème), au moins ne supprimez pas l'ancien répertoire. Move Cela, de sorte que les programmes en cours d'exécution continueront à utiliser l'ancien répertoire et les nouveaux programmes utiliseront le nouveau. (Bien sûr, de nouveaux programmes ne seront pas en mesure de communiquer avec de vieux programmes à travers des prises ou des tuyaux dans /tmp Sauf si vous définissez TMPDIR ou dites-leur autrement où regarder.)

mv /tmp /tmp.old && mkdir /tmp