¿Cómo (con seguridad) mover / tmp a un volumen diferente?

17

Hoy el /tmpdirectorio se llenó en una máquina en el trabajo. El problema era que estaba en la partición raíz que no era muy grande. Para solucionar esto, un compañero de trabajo creó un /new/tmpdirectorio en otro lugar, copió todo el contenido en el nuevo directorio, eliminó el original /tmpe hizo un enlace simbólico /tmp -> /new/tmp.

Cuando copió los archivos (¡en realidad, se trataba de alguien más, no de mí!) No los usó, -apor lo que el propietario de todos los archivos que /new/tmptenía debajo era root. Además, no estableció los permisos del /new/tmpdirectorio, por lo que era el 0755 predeterminado. Esto causó un sinfín de problemas e incluso el modo de ajuste y los bits de propiedad no pudieron restaurar la máquina a un estado aceptablemente operativo. Terminé teniendo que bombardear todo /tmpy reiniciar.

El /tmpdirectorio contenía varios enchufes y tuberías y demás, ya que un grupo de personas ejecuta Gnome a través de VNC, y yo uso el screenque tiene sus propias tuberías.

¿Hay alguna forma segura de mover un /tmpdirectorio a un volumen diferente en un sistema en ejecución? No estoy seguro de lo que habría hecho para mantener todo funcionando. Tengo particular curiosidad por lo que sucede con las tuberías y los enchufes.

Greg Hewgill
fuente

Respuestas:

20

En las máquinas "cliente", la forma segura de moverse /tmpes reiniciar. Aquí, por cliente, me refiero a todo lo que ejecuta programas que ponen sockets /tmp, en particular servidores X y pantalla.

El nuevo /tmpdefinitivamente necesita tener los permisos correctos (1777), de lo contrario no puede esperar tener un sistema que funcione.

Porque /tmpprácticamente no puedes copiar ningún archivo. Eso es porque la mayoría de las veces, los programas que ponen cosas /tmpabren los archivos. Si copia el archivo, eso copia el contenido, pero los programas todavía tienen abiertos los archivos antiguos. Es posible que pueda acceder a ellos con un depurador ( ptrace), pero esto será mucho más complicado que reiniciar, y con muchos programas todo lo que haría sería bloquearlos de todos modos.

Si /tmpestá lleno y desea cambiar a uno nuevo en vivo, debe reiniciar todos los programas que tengan archivos abiertos allí. Como eso significa reiniciar X y sesiones de pantalla, no es mucho mejor que reiniciar.

Debería poder cambiar por nuevos programas pero mantener los archivos abiertos existentes en su lugar utilizando un montaje de unión . (El principio es sólido, pero nunca lo he intentado, por lo que puede haber problemas inesperados). Aquí hay una manera de hacer esto en Linux.

  1. Mantenga todos los archivos existentes /tmpexcepto algunos grandes seleccionados manualmente.
  2. Crea un /tmp.new(modo 1777).
  3. Exponer /tmpen un camino diferente: mount --bind / /.root.only. Esto es necesario porque el siguiente paso se sombreará /tmp. Puede haber diferentes implementaciones de montaje de unión que no requieren este paso.
  4. Haga un montaje de unión de /.root.only/tmpy /tmp.new, montado en /tmp. De esta manera los nuevos archivos creados en /tmpserá escrito en /tmp.new, pero en los archivos /.root.only/tmptambién están bajo visibles /tmp. Una posibilidad es unionfs-fusible : unionfs-fuse /tmp.new:/.root.only/tmp /tmp.

Si no desea ir a la raíz de montaje de la unión (por ejemplo, porque no está disponible en su plataforma o porque es demasiado problema), al menos no elimine el directorio anterior. Muévalo para que los programas en ejecución sigan usando el directorio antiguo y los nuevos programas usen el nuevo. (Por supuesto, los programas nuevos no podrán comunicarse con los programas antiguos a través de enchufes o conexiones a /tmpmenos que establezca TMPDIRo les indique dónde buscar).

mv /tmp /tmp.old && mkdir /tmp
Gilles 'SO- deja de ser malvado'
fuente
¿Le importaría aclarar cómo hacer que la nueva ubicación de / tmp persista mediante un reinicio?
FoxDeploy
@FoxDeploy Pon una entrada para ello/etc/fstab
Gilles 'SO- deja de ser malvado'
¿Podrías dar más detalles sobre eso?
FoxDeploy
@FoxDeploy No estoy seguro de lo que estás preguntando aquí. Si desea /tmpestar en otro lugar que no sea el sistema de archivos raíz, enumérelo, /etc/fstabcomo cualquier otro sistema de archivos que desee montar en el momento del arranque. Si eso no es lo que está preguntando, debe hacer una nueva pregunta con suficiente contexto.
Gilles 'SO- deja de ser malvado'