Como (com segurança) mover / tmp para um volume diferente?

17

Hoje, o /tmpdiretório foi preenchido em uma máquina em funcionamento. O problema era que estava na partição raiz que não era muito grande. Para corrigir isso, um colega de trabalho criou um /new/tmpdiretório em outro lugar, copiou todo o conteúdo para o novo diretório, removeu o original /tmpe fez um link simbólico /tmp -> /new/tmp.

Quando ele copiou os arquivos (na verdade, isso era outra pessoa, não eu!), Ele não usou, -aentão o proprietário de todos os arquivos abaixo /new/tmpera root. Além disso, ele não definiu as permissões do /new/tmpdiretório, por isso era o 0755 padrão. Isso não causou problemas e até mesmo os modos de ajuste e bits de propriedade falharam ao restaurar a máquina para um estado aceitável de funcionamento. Acabei tendo que destruir tudo /tmpe reiniciar.

O /tmpdiretório continha vários soquetes e tubos e outros enfeites, já que muitas pessoas executam o Gnome através do VNC, e eu uso o screenque possui seus próprios tubos.

Existe uma maneira segura de mover um /tmpdiretório para um volume diferente em um sistema em execução? Não sei ao certo o que eu teria feito para manter tudo funcionando. Estou particularmente curioso sobre o que acontece com tubos e tomadas.

Greg Hewgill
fonte

Respostas:

20

Nas máquinas "clientes", a maneira segura de se mover /tmpé reiniciar. Aqui, por cliente, quero dizer qualquer coisa que execute programas que instalem soquetes /tmp, em particular servidores X e tela.

/tmpDefinitivamente, o novo precisa ter as permissões corretas (1777), caso contrário, você não pode esperar ter um sistema em funcionamento.

Pois /tmp, você praticamente não pode copiar nenhum arquivo. Isso ocorre porque na maioria das vezes, os programas que colocam coisas /tmpabrem os arquivos. Se você copiar o arquivo, ele copiará o conteúdo, mas os programas ainda terão os arquivos antigos abertos. Você pode alcançá-los com um depurador ( ptrace), mas isso será muito mais complicado do que reiniciar, e com muitos programas, tudo o que você faria é travá-los de qualquer maneira.

Se o seu /tmpestiver cheio e você desejar mudar para um novo ao vivo, será necessário reiniciar todos os programas que possuem arquivos abertos lá. Como isso significa reiniciar as sessões do X e da tela, não é muito melhor do que reiniciar.

Você deve poder mudar para novos programas, mas manter os arquivos abertos existentes no lugar usando uma montagem de união . (O princípio é sensato, mas nunca tentei, portanto pode haver problemas inesperados.) Aqui está uma maneira de fazer isso no Linux.

  1. Mantenha todos os arquivos existentes, /tmpexceto alguns grandes selecionados manualmente.
  2. Crie um /tmp.new(modo 1777).
  3. Expor /tmpem um caminho diferente: mount --bind / /.root.only. Isso é necessário porque o próximo passo será sombrio /tmp. Pode haver implementações de montagem de união diferentes que não exigem esta etapa.
  4. Faça uma montagem em união de /.root.only/tmpe /tmp.new, montada em /tmp. Dessa forma, os novos arquivos criados /tmpserão gravados /tmp.new, mas os arquivos /.root.only/tmptambém serão visíveis em /tmp. Uma possibilidade é unionfs-fusível : unionfs-fuse /tmp.new:/.root.only/tmp /tmp.

Se você não deseja acessar a raiz de montagem em união (por exemplo, porque não está disponível na sua plataforma ou porque há muitos problemas), pelo menos não exclua o diretório antigo. Mova -o para que os programas em execução continuem usando o diretório antigo e os novos programas usem o novo. (É claro que novos programas não poderão se comunicar com programas antigos através de soquetes ou tubos, a /tmpmenos que você defina TMPDIRou diga a eles onde procurar.)

mv /tmp /tmp.old && mkdir /tmp
Gilles 'SO- parar de ser mau'
fonte
Você gostaria de esclarecer como fazer com que o novo local do / tmp persista por meio de uma reinicialização?
precisa saber é o seguinte
@FoxDeploy Coloque uma entrada para ela/etc/fstab
Gilles 'SO- stop be evil' '
Você poderia elaborar sobre isso?
precisa saber é o seguinte
@FoxDeploy Não sei ao certo o que você está perguntando aqui. Se você deseja /tmpestar em outro lugar que não seja o sistema de arquivos raiz, liste-o /etc/fstabcomo qualquer outro sistema de arquivos que você deseja montar no momento da inicialização. Se não é isso que você está perguntando, faça uma nova pergunta com contexto suficiente.
Gilles 'SO- stop be evil'