Come spostare (in modo sicuro) / tmp su un volume diverso?


17

Oggi la /tmpdirectory riempito su una macchina al lavoro. Il problema era che era sulla partizione di root che non era molto grande. Per risolvere questo problema, un collega ha creato una /new/tmpdirectory altrove, copiato tutto il contenuto nella nuova directory, rimosso l'originale /tmpe creato un collegamento simbolico /tmp -> /new/tmp.

Quando ha copiato i file (in realtà, questo è stato qualcun altro, non io!) Non ha usato -acosì il proprietario di ogni file sotto /new/tmpera root. Inoltre, non ha impostato le autorizzazioni della /new/tmpdirectory, quindi era l'impostazione predefinita 0755. Ciò non causava la fine del problema e nemmeno la modifica della modalità e i bit di proprietà non riuscivano a ripristinare la macchina in uno stato accettabilmente funzionante. Ho finito per dover annusare tutto /tmpe riavviare.

La /tmpdirectory conteneva vari socket e pipe e quant'altro, dal momento che un gruppo di persone esegue Gnome attraverso VNC, e io uso screenche ha le sue pipe.

Esiste un modo sicuro per spostare una /tmpdirectory su un volume diverso su un sistema in esecuzione? Non sono sicuro di cosa avrei effettivamente fatto per far funzionare tutto. Sono particolarmente curioso di sapere cosa succede a tubi e prese.

Risposte:


20

Su macchine "client", il modo sicuro per spostarsi /tmpè riavviare. Qui, per cliente, intendo tutto ciò che esegue programmi che inseriscono socket /tmp, in particolare server X e schermo.

Il nuovo /tmpdeve sicuramente avere le giuste autorizzazioni (1777), altrimenti non puoi sperare di avere un sistema funzionante.

Perché /tmp, praticamente non puoi copiare alcun file. Questo perché la maggior parte delle volte, i programmi che mettono le cose in /tmpaperto aprono i file. Se copi il file, questo copia i contenuti, ma i programmi hanno ancora i vecchi file aperti. Potresti essere in grado di raggiungerli con un debugger ( ptrace), ma questo sarà molto più complicato del riavvio e con molti programmi tutto ciò che faresti è bloccarli comunque.

Se sei /tmppieno e vuoi passare a uno nuovo dal vivo, devi riavviare tutti i programmi che hanno file aperti lì. Dal momento che ciò significa riavviare X e le sessioni dello schermo, non è molto meglio del riavvio.

Dovresti essere in grado di passare a nuovi programmi ma mantenere i file aperti esistenti in posizione utilizzando un mount sindacato . (Il principio è valido, ma non ci ho mai provato, quindi potrebbero esserci problemi inaspettati.) Ecco un modo per farlo su Linux.

  1. Conserva tutti i file esistenti, /tmptranne alcuni di quelli grandi selezionati manualmente.
  2. Creare un /tmp.new(modalità 1777).
  3. Esporre /tmpsu un percorso diverso: mount --bind / /.root.only. Ciò è necessario perché il passaggio successivo verrà oscurato /tmp. Potrebbero esserci diverse implementazioni di montaggio unione che non richiedono questo passaggio.
  4. Realizzare un attacco a innesto di /.root.only/tmpe /tmp.new, montato su /tmp. In questo modo /tmpverranno scritti i nuovi file creati in /tmp.new, ma anche i file in /.root.only/tmpsono visibili sotto /tmp. Una possibilità è unionfs-fusibile : unionfs-fuse /tmp.new:/.root.only/tmp /tmp.

Se non vuoi andare alla radice di mount mount (ad esempio perché non è disponibile sulla tua piattaforma, o perché è troppo disturbo), almeno non cancellare la vecchia directory. Spostalo , in modo che i programmi in esecuzione continuino a utilizzare la vecchia directory e i nuovi programmi utilizzeranno la nuova. (Naturalmente i nuovi programmi non saranno in grado di comunicare con i vecchi programmi tramite socket o pipe a /tmpmeno che tu non li imposti TMPDIRo non dica altrimenti dove cercare.)

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

Ti dispiacerebbe chiarire come rendere persistente la nuova posizione di / tmp attraverso un riavvio?
FoxDeploy

@FoxDeploy Inserisci una voce in esso/etc/fstab
Gilles 'SO- smetti di essere malvagio'

Potresti approfondire questo?
FoxDeploy

@FoxDeploy Non sono sicuro di ciò che stai chiedendo qui. Se vuoi trovarti /tmpin un posto diverso dal filesystem di root, elencalo /etc/fstab, proprio come qualsiasi altro filesystem che vuoi montare all'avvio. Se non è quello che stai chiedendo, dovresti porre una nuova domanda con un contesto sufficiente.
Gilles 'SO- smetti di essere malvagio' il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.