Comment déplacer (en toute sécurité) / tmp vers un volume différent?


17

Aujourd'hui, le /tmprépertoire s'est 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/tmprépertoire ailleurs, copié tout le contenu dans le nouveau répertoire, supprimé l'original /tmpet créé un lien symbolique /tmp -> /new/tmp.

Quand il a copié les fichiers (vraiment, ce fut quelqu'un d' autre, pas moi!) , Il n'a pas utilisé de -asorte que le propriétaire de chaque sous fichier /new/tmpétait root. En outre, il n'a pas défini les autorisations du /new/tmprépertoire, il s'agissait donc du 0755 par défaut. Cela n'a causé aucun problème et même le mode de réglage et les bits de propriété n'ont pas réussi à restaurer la machine dans un état de fonctionnement acceptable. J'ai fini par devoir tout neutraliser /tmpet redémarrer.

Le /tmprépertoire contenait divers sockets et tuyaux et ainsi de suite, car un tas de gens exécutent Gnome via VNC, et j'utilise screenqui a ses propres tuyaux.

Existe-t-il un moyen sûr de déplacer un /tmprépertoire vers un volume différent sur un système en cours d'exécution? Je ne suis pas sûr de ce que j'aurais réellement fait pour que tout fonctionne. Je suis particulièrement curieux de savoir ce qui arrive aux tuyaux et aux prises.

Réponses:


20

Sur les machines «clientes», le moyen le plus sûr de se déplacer /tmpest 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 /tmpdoit 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 /tmples 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 /tmpest 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.

  1. Conservez tous les fichiers existants à l' /tmpexception de quelques gros fichiers sélectionnés manuellement.
  2. Créez un /tmp.new(mode 1777).
  3. Exposer /tmpsur 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.
  4. Faites un montage union de /.root.only/tmpet /tmp.new, monté sur /tmp. De cette façon, les nouveaux fichiers créés dans /tmpseront écrits /tmp.new, mais les fichiers dans /.root.only/tmpsont é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 à /tmpmoins que vous ne les définissiez TMPDIRou leur disiez où chercher.)

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

Pourriez-vous préciser comment rendre le nouvel emplacement de / tmp persistant lors d'un redémarrage?
FoxDeploy

@FoxDeploy Mettre une entrée pour cela dans/etc/fstab
Gilles 'SO- arrête d'être méchant'

Pourriez-vous éventuellement développer cela?
FoxDeploy

@FoxDeploy Je ne suis pas sûr de ce que vous demandez ici. Si vous souhaitez /tmpêtre ailleurs que dans le système de fichiers racine, indiquez-le, /etc/fstabcomme tout autre système de fichiers que vous souhaitez monter au démarrage. Si ce n'est pas ce que vous demandez, vous devriez poser une nouvelle question avec suffisamment de contexte.
Gilles 'SO- arrête d'être méchant'
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.