Como montar / tmp em / mnt no EC2?

10

Eu queria saber qual é a melhor maneira de montar o endpoint /tmp no armazenamento efêmero /mnt em uma instância do EC2 e fornecer as permissões de gravação padrão do usuário ubuntu .

Alguns sugerem editar o /etc/rc.local desta forma:

mkdir -p /mnt/tmp && mount --bind -o nobootwait /mnt/tmp /tmp

No entanto, isso não funciona para mim (os arquivos diferem).

Eu tentei editar a entrada fstab padrão:

/dev/xvdb /mnt auto defaults,nobootwait,comment=cloudconfig 0 2

substituindo / mnt por / tmp e dando-lhe umask = 0777, no entanto, não funciona devido ao cloudconfig.

Estou usando o Ubuntu 12.04. Obrigado.

    
por Claudio Poli 14.09.2012 / 23:39

3 respostas

13

Existem alguns problemas com a sugestão inicial que você lista, embora pareça estar indo bem:

  1. Por motivos de segurança, o comando mkdir deve criar o diretório com o bit fixo definido no modo:

    mkdir -m 1777 /mnt/tmp
    
  2. O -o nobootwait não parece necessário, pois isso não está sendo salvo em /mnt/fstab .

Então, eu recomendo tentar isso em /etc/rc.local :

test -d /mnt/tmp || mkdir -m 1777 /mnt/tmp
mount --bind /mnt/tmp /tmp

Qualquer tentativa de colocar a montagem de ligação em /etc/fstab terá problemas quando você parar / iniciar a instância ou quando você criar uma AMI e executar uma nova instância, pois / mnt é armazenamento efêmero e todo o conteúdo (incluindo o /mnt/tmp directory) vão desaparecer.

    
por 15.09.2012 / 00:24
13

Uma abordagem mais robusta, já que você está executando o Ubuntu, seria colocar a sugestão de Eric Hammond dentro de um Upstart script, e mande o bind imediatamente após a montagem /mnt :

# File /etc/init/mounted-mnt.conf

# mounted-mnt - Binds /tmp to /mnt/tmp

description     "Binds /tmp to /mnt/tmp"

start on mounted MOUNTPOINT=/mnt

task

script
    test -d /mnt/tmp || mkdir -m 1777 /mnt/tmp
    mount --bind /mnt/tmp /tmp
end script

Alguns servidores, como o Apache / Passenger, podem criar arquivos temporários importantes em /tmp . Uma vez que rc.local - o último na seqüência de inicialização - correu, eles se escondiam e confundiam os servidores.

    
por 01.05.2013 / 22:58
1

A idéia de usando um script Upstart sugerido por Romulo Ceccon é ótima. No entanto, você pode não querer esconder a magia dentro de um script obscuro. É perfeitamente correto adicionar a montagem dentro do fstab, por exemplo

LABEL=cloudimg-rootfs   /    ext4   defaults    0 0

# auto mount ephemeral storage (if any)
# init contents in /etc/init/mounted-local*.conf
/dev/xvdb  /mnt/local1  auto  defaults,nofail,nobootwait,comment=cloudconfig  0 2
/dev/xvdc  /mnt/local2  auto  defaults,nofail,nobootwait,comment=cloudconfig  0 2
/dev/xvdd  /mnt/local3  auto  defaults,nofail,nobootwait,comment=cloudconfig  0 2
/dev/xvde  /mnt/local4  auto  defaults,nofail,nobootwait,comment=cloudconfig  0 2

# bind /tmp to /mnt/local1, might still be on / if no ephemeral storage
/mnt/local1  /tmp  none  bind

E este é o script do Upstart:

# File /etc/init/mounted-local1.conf

# mounted-local1 - init ephemeral storage in /mnt/local1

description     "Initializes ephemeral storage in /mnt/local1"

start on mounted MOUNTPOINT=/mnt/local1

# provide defult, see /etc/init/mounted-tmp.conf for details
env MOUNTPOINT=/mnt/local1

task

script
    # fix permissions if needed
    test -d $MOUNTPOINT && chmod 1777 $MOUNTPOINT

    # log to /var/log/upstart/mounted-local1.log
    #echo "initialized $MOUNTPOINT"

end script

Dessa forma, você poderia criar qualquer estrutura de diretórios e o que não fosse o armazenamento efêmero.

Tudo o que resta é mkdir -p /mnt/local{1..4} e uma reinicialização (eu não montaria / tmp sem como você esconderia os arquivos atuais lá).

    
por 27.02.2014 / 14:20