Come montare / tmp in / mnt su EC2?


10

Mi chiedevo quale sia il modo migliore per montare l' /tmpendpoint nella memoria /mnttemporanea su un'istanza EC2 e dare ubuntuall'utente autorizzazioni di scrittura predefinite.

Alcuni suggeriscono di modificare /etc/rc.local in questo modo:

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

Tuttavia, ciò non funziona per me (i file differiscono).

Ho provato a modificare la voce fstab predefinita:

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

sostituendo / mnt con / tmp e dandogli un umask = 0777, tuttavia non funziona a causa di cloudconfig.

Sto usando Ubuntu 12.04. Grazie.


Non riesco a capire cosa mi stai chiedendo di fare. Potete fornire un esempio dell'output previsto usando touche ls -l?
— Jeff Ferland,

Ad esempio: l'elenco dei file in /mnt/tmpdovrebbe restituire gli stessi file /tmp, aggiungendo che un utente touch /tmp/testfilerilasciato ubuntudovrebbe funzionare senza usare sudo.
— Claudio Poli,

Risposte:


13

Ci sono un paio di problemi con il suggerimento iniziale che elenchi, anche se sembra che sia diretto in una buona direzione:

  1. Per motivi di sicurezza, il mkdircomando dovrebbe creare la directory con il bit sticky impostato nella modalità:

    mkdir -m 1777 /mnt/tmp
    
  2. Il -o nobootwaitnon sembra necessaria in quanto tale non viene salvato in /mnt/fstab.

Quindi, consiglierei di provare questo in /etc/rc.local:

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

Qualsiasi tentativo di inserire il bind mount /etc/fstabsi imbatterà in problemi quando si interrompe / avvia l'istanza o quando si crea una AMI e si esegue una nuova istanza poiché / mnt è una memoria effimera e tutti i contenuti (inclusa la /mnt/tmpdirectory) scompaiono .


Puoi consigliarlo di inserirlo negli script dei dati utente?
— Claudio Poli,

1
Avrei adottato l'approccio della codifica rc.local per tentare innanzitutto un montaggio del dispositivo effimero (l'aveva già montato su / mnt?), E in caso contrario, formattarlo e provare a montarlo di nuovo. In questo modo un arresto e un riavvio dovrebbero preservarlo (terminare sarebbe il modo di ricominciare da capo, come al solito). Non vedo un preciso bisogno di averlo in / etc / fstab poiché rc.local lo monta, ma avendo rc.local append probabilmente non farà male.
— Skaperen,

1
@ClaudioPoli: il problema con l'inserimento di questo in dati utente è che lo script dati utente viene eseguito solo al primo avvio. Volete che questo avvenga ad ogni avvio. Potresti avere dati utente da aggiungere a /etc/rc.local, ma assicurati che sia inserito prima di qualsiasi istruzione "exit" in quel file.
— Eric Hammond,

1
@Skaperen: / mnt è generalmente formattato in modo pulito e montato su ogni esecuzione o inizio di un'istanza. Uno stop / start ti dà un clean, fresh / mnt senza dati rimasti dalla corsa precedente. Ogni modifica che si desidera apportare a / etc / fstab verrebbe mantenuta tramite stop / start, quindi non avrebbe senso che rc.local la modifichi ad ogni avvio.
— Eric Hammond,

13

Un approccio più solido, dal momento che stai eseguendo Ubuntu, sarebbe quello di inserire il suggerimento di Eric Hammond all'interno di uno script Upstart , e di fare il bind immediatamente dopo il montaggio /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

Alcuni server, come Apache / Passenger, potrebbero creare importanti file temporanei su /tmp. Una volta rc.local, l'ultimo nella sequenza di avvio, si nascondevano e confondevano i server.


Idea intrigante ..
— Tom O'Connor

1

L'idea di usare uno script Upstart come suggerito da Romulo Ceccon è fantastica. Tuttavia, potresti non voler nascondere la magia all'interno di una sceneggiatura oscura. Va benissimo aggiungere il supporto all'interno di fstab, ad es

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 questo è lo script 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

In questo modo, è possibile creare qualsiasi struttura di directory e cosa non nella memoria temporanea.

Tutto ciò che rimane è mkdir -p /mnt/local{1..4}un riavvio (non monterei / tmp senza come nasconderesti i file correnti lì).


Il montaggio tramite fstab avrà successo se non c'è /mnt/local1? Forse l' evento di montaggio è più sicuro.
— Rômulo Ceccon,

Sì, supponevo che / mnt / local1 fosse disponibile. Avrei dovuto spiegare che nulla è montato su / mnt, che in genere è il caso. La creazione di questa directory fa quindi parte dell'installazione. Non ho provato a utilizzare l'evento di montaggio, ma forse hai ragione. Il punto principale della mia risposta è che potrebbe essere meglio mantenere i mount nel file fstab e fare cose come gli script upstart chmod 1777o mkir -p .
— sfussenegger,
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.