Comment monter / tmp dans / mnt sur EC2?

10

Je me demandais quelle est la meilleure façon de monter le /tmppoint de terminaison dans le stockage éphémère /mntsur une instance EC2 et de donner à l' ubuntuutilisateur des autorisations d'écriture par défaut.

Certains suggèrent de modifier /etc/rc.local de cette façon:

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

Cependant, cela ne fonctionne pas pour moi (les fichiers diffèrent).

J'ai essayé de modifier l'entrée fstab par défaut:

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

remplacer / mnt par / tmp et lui donner un umask = 0777, mais cela ne fonctionne pas à cause de cloudconfig.

J'utilise Ubuntu 12.04. Merci.

Claudio Poli
la source
Je n'arrive pas à comprendre ce que tu me demandes de faire. Pouvez-vous fournir un exemple de la sortie attendue en utilisant touchet ls -l?
Jeff Ferland
Par exemple: répertorier les fichiers dans /mnt/tmpdoit renvoyer les mêmes fichiers /tmp, ajoutant qu'un touch /tmp/testfileémis par l' ubuntuutilisateur doit fonctionner sans utiliser sudo.
Claudio Poli

Réponses:

13

Il y a quelques problèmes avec la suggestion initiale que vous énumérez, bien qu'il semble qu'elle aille dans la bonne direction:

  1. Pour des raisons de sécurité, la mkdircommande doit créer le répertoire avec le bit collant défini dans le mode:

    mkdir -m 1777 /mnt/tmp
    
  2. Le -o nobootwaitne semble pas nécessaire car il n'est pas enregistré /mnt/fstab.

Donc, je recommanderais d'essayer ceci dans /etc/rc.local:

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

Toute tentative de mise en place du montage de liaison /etc/fstabva entraîner des problèmes lorsque vous arrêtez / démarrez l'instance ou lorsque vous créez une AMI et exécutez une nouvelle instance car / mnt est un stockage éphémère et tout le contenu (y compris le /mnt/tmprépertoire) va disparaître .

Eric Hammond
la source
Pouvez-vous recommander de mettre cela dans des scripts de données utilisateur?
Claudio Poli
1
Je prendrais l'approche du codage de rc.local pour tenter d'abord un montage du périphérique éphémère (l'a-t-il déjà monté à / mnt?), Et si cela échoue, formatez-le et essayez à nouveau de monter. De cette façon, un arrêt et un redémarrage devraient le conserver (terminer serait le moyen de recommencer, comme d'habitude). Je ne vois pas un besoin certain de l'avoir dans / etc / fstab depuis que rc.local le monte, mais avoir l'ajout de rc.local ne le fera probablement pas de mal.
Skaperen
1
@ClaudioPoli: Le problème avec la mise dans les données utilisateur est que le script des données utilisateur n'est exécuté qu'au premier démarrage. Vous voulez que cela s'exécute à chaque démarrage. Vous pouvez demander à user-data de l'ajouter à /etc/rc.local, mais assurez-vous qu'il est inséré avant toute instruction "exit" dans ce fichier.
Eric Hammond
1
@Skaperen: / mnt est généralement formaté proprement et monté à chaque exécution ou démarrage d'une instance. Un arrêt / démarrage vous donne un / mnt propre et frais avec aucune donnée restante de l'exécution précédente. Toute modification que vous vouliez apporter à / etc / fstab serait conservée par stop / start, donc cela n'aurait pas de sens que rc.local la modifie à chaque démarrage.
Eric Hammond
13

Une approche plus robuste, puisque vous utilisez Ubuntu, serait de mettre la suggestion d'Eric Hammond dans un script Upstart et de faire la liaison immédiatement après le montage /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

Certains serveurs, comme Apache / Passenger, peuvent créer des fichiers temporaires importants sur /tmp. Une fois rc.local- le dernier de la séquence de démarrage - exécuté, ils seraient cachés et confondraient les serveurs.

Rômulo Ceccon
la source
Idée intrigante ..
Tom O'Connor
1

L'idée d' utiliser un script Upstart comme suggéré par Romulo Ceccon est excellente. Cependant, vous ne voudrez peut-être pas cacher la magie dans un script obscur. Il est parfaitement possible d'ajouter le support à l'intérieur de fstab, par exemple

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

Et voici le 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

De cette façon, vous pouvez créer n'importe quelle structure de répertoire et ce qui ne l'est pas sur le stockage éphémère.

Tout ce qui reste est mkdir -p /mnt/local{1..4}un redémarrage (je ne monterais pas / tmp sans car vous y cacheriez les fichiers actuels).

sfussenegger
la source
La monture via fstab réussira-t-elle s'il n'y en a pas /mnt/local1? Peut-être que l' événement de montage est plus sûr.
Rômulo Ceccon
Oui, j'ai supposé que / mnt / local1 est disponible. J'aurais dû expliquer que rien n'est monté sur / mnt, ce qui est généralement le cas. La création de ce répertoire fait donc partie de la configuration. Je n'ai pas essayé d'utiliser l'événement de montage, mais vous avez peut-être raison. Le point principal de ma réponse est qu'il pourrait être préférable de conserver les montages dans le fichier fstab et de faire des trucs comme les scripts upstart chmod 1777ou mkir -p .
sfussenegger