Wie mounte ich / tmp in / mnt auf EC2?

10

Ich habe mich gefragt, wie ich den /tmpEndpunkt am besten im kurzlebigen Speicher /mnteiner EC2-Instanz bereitstellen und dem ubuntuBenutzer Standardschreibberechtigungen erteilen kann .

Einige schlagen vor, /etc/rc.local folgendermaßen zu bearbeiten:

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

Dies funktioniert jedoch bei mir nicht (Dateien unterscheiden sich).

Ich habe versucht, den Standard-fstab-Eintrag zu bearbeiten:

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

Ersetzen Sie / mnt durch / tmp und geben Sie ihm eine umask = 0777, dies funktioniert jedoch aufgrund von cloudconfig nicht.

Ich benutze Ubuntu 12.04. Vielen Dank.

Claudio Poli
quelle
Ich kann nicht herausfinden, was Sie von mir verlangen. Können Sie ein Beispiel für die erwartete Ausgabe mit touchund ls -langeben?
Jeff Ferland
Beispiel: Das Auflisten von Dateien in /mnt/tmpsollte dieselben Dateien zurückgeben /tmpund hinzufügen, dass eine touch /tmp/testfilevom ubuntuBenutzer ausgegebene Datei ohne Verwendung funktionieren sollte sudo.
Claudio Poli

Antworten:

13

Es gibt ein paar Probleme mit dem ersten Vorschlag, den Sie auflisten, obwohl es so aussieht, als ob es in eine gute Richtung geht:

  1. Aus Sicherheitsgründen sollte der mkdirBefehl das Verzeichnis mit dem im Modus gesetzten Sticky-Bit erstellen:

    mkdir -m 1777 /mnt/tmp
    
  2. Das -o nobootwaitscheint nicht notwendig zu sein, da dies nicht gespeichert wird /mnt/fstab.

Daher würde ich empfehlen, dies zu versuchen in /etc/rc.local:

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

Jeder Versuch, das Bind-Mount /etc/fstabeinzufügen, führt zu Problemen, wenn Sie die Instanz stoppen / starten oder wenn Sie eine AMI erstellen und eine neue Instanz ausführen, da / mnt ein kurzlebiger Speicher ist und alle Inhalte (einschließlich des /mnt/tmpVerzeichnisses) verschwinden .

Eric Hammond
quelle
Können Sie empfehlen, dies in Benutzerdatenskripten einzufügen?
Claudio Poli
1
Ich würde den Ansatz der Codierung von rc.local verfolgen, um zuerst eine Bereitstellung des kurzlebigen Geräts zu versuchen (hat er es bereits unter / mnt bereitgestellt?). Wenn dies fehlschlägt, formatieren Sie es und versuchen Sie es erneut. Auf diese Weise sollte ein Stopp und ein Neustart es beibehalten (Beenden wäre der Weg, um wie gewohnt neu zu starten). Ich sehe keine definitive Notwendigkeit, es in / etc / fstab zu haben, da rc.local es einbindet, aber wenn rc.local es anhängt, wird es wahrscheinlich nicht schaden.
Skaperen
1
@ClaudioPoli: Das Problem beim Einfügen in Benutzerdaten besteht darin, dass das Benutzerdatenskript nur beim ersten Start ausgeführt wird. Sie möchten, dass dies bei jedem Start ausgeführt wird. Sie könnten dies von Benutzerdaten zu /etc/rc.local hinzufügen lassen, aber stellen Sie sicher, dass sie vor jeder "exit" -Anweisung in dieser Datei eingefügt werden.
Eric Hammond
1
@Skaperen: / mnt wird im Allgemeinen sauber formatiert und bei jedem Lauf oder Start einer Instanz gemountet. Ein Stopp / Start gibt Ihnen ein sauberes, frisches / mnt ohne Daten, die vom vorherigen Lauf übrig geblieben sind. Jede Änderung, die Sie an / etc / fstab vornehmen möchten, wird durch Stop / Start beibehalten, sodass es nicht sinnvoll wäre, sie von rc.local bei jedem Start ändern zu lassen.
Eric Hammond
13

Ein robusterer Ansatz, da Sie Ubuntu ausführen, besteht darin, den Vorschlag von Eric Hammond in ein Upstart- Skript einzufügen und die Bindung sofort nach dem Mounten durchzuführen /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

Einige Server, wie Apache / Passenger, erstellen möglicherweise wichtige temporäre Dateien auf /tmp. Sobald rc.local- der letzte in der Startsequenz - ausgeführt wurde, wurden sie ausgeblendet und verwirrten die Server.

Rômulo Ceccon
quelle
Faszinierende Idee ..
Tom O'Connor
1

Die Idee , ein Upstart-Skript zu verwenden, wie von Romulo Ceccon vorgeschlagen, ist großartig. Möglicherweise möchten Sie die Magie jedoch nicht in einem obskuren Skript verbergen. Es ist vollkommen in Ordnung, das Mount in fstab hinzuzufügen, z

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

Und das ist das Upstart-Skript:

# 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

Auf diese Weise können Sie jede Verzeichnisstruktur erstellen und was nicht im kurzlebigen Speicher.

Alles was übrig bleibt ist mkdir -p /mnt/local{1..4}ein Neustart (ohne würde ich / tmp nicht mounten, da Sie dort aktuelle Dateien verstecken würden).

sfussenegger
quelle
Wird das Mount über fstab erfolgreich sein, wenn es kein gibt /mnt/local1? Vielleicht ist das Montageereignis sicherer.
Rômulo Ceccon
Ja, ich habe angenommen, dass / mnt / local1 verfügbar ist. Ich hätte erklären sollen, dass auf / mnt nichts montiert ist, was normalerweise der Fall ist. Das Erstellen dieses Verzeichnisses ist daher Teil des Setups. Ich habe nicht versucht, das Mounting-Ereignis zu verwenden, aber vielleicht haben Sie Recht. Der Hauptpunkt meiner Antwort ist, dass es möglicherweise besser ist, Mounts in der fstab-Datei zu behalten und Dinge wie das chmod 1777oder mkir -p in Upstart-Skripten zu tun .
Sfussenegger