EC2の/ mntに/ tmpをマウントする方法は?


10

EC2インスタンスの/tmp一時ストレージ/mntにエンドポイントをマウントし、ubuntuユーザーにデフォルトの書き込み権限を与えるための最良の方法は何だろうと思いました。

この方法で/etc/rc.localを編集することを提案する人もいます:

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

しかし、それは私にはうまくいきません(ファイルは異なります)。

デフォルトのfstabエントリを編集してみました。

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

/ mntを/ tmpに置き換えて、umask = 0777を指定しますが、cloudconfigが原因で機能しません。

Ubuntu 12.04を使用しています。ありがとう。


あなたが私に何を求めているのか理解できません。touchand を使用して期待される出力の例を提供できますls -lか?
ジェフファーランド2012

例:でファイルを一覧表示すると/mnt/tmp、で同じファイルが返され、ユーザーから発行されたがを使用せずに機能することを/tmp追加します。touch /tmp/testfileubuntusudo
Claudio Poli 2012

回答:


13

あなたがリストする最初の提案にはいくつかの問題がありますが、それは良い方向に向かっているようです:

  1. セキュリティ上の理由から、mkdirコマンドはモードでスティッキービットが設定されたディレクトリを作成する必要があります。

    mkdir -m 1777 /mnt/tmp
    
  2. -o nobootwaitこれは内に保存されていないなどの必要ないないようです/mnt/fstab

だから、私はこれを試してみることをお勧めし/etc/rc.localます:

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

/etc/fstab/ mntは一時的なストレージであり、すべてのコンテンツ(/mnt/tmpディレクトリを含む)が表示されなくなるため、インスタンスを停止/起動するとき、またはAMIを作成して新しいインスタンスを実行するときに、バインドマウントを配置しようとすると問題が発生します。


これをユーザーデータスクリプトに含めることをお勧めできますか?
Claudio Poli 2012

1
私はrc.localをコーディングして、最初にエフェメラルデバイスのマウントを試みます(彼がすでに/ mntにマウントしているかどうか)。それが失敗した場合は、フォーマットしてもう一度マウントしてみてください。そのようにして、停止と再起動はそれを保持するはずです(通常のように、終了は新しく開始する方法です)。/ etc / fstabにrc.localでマウントする必要があるので、明確な必要性はないと思いますが、rc.localを追加しても問題ないでしょう。
Skaperen 2012

1
@ClaudioPoli:これをuser-dataに置くことの問題は、user-dataスクリプトが最初の起動時にのみ実行されることです。これをすべてのブートで実行する必要があります。ユーザーデータでこれを/etc/rc.localに追加できますが、そのファイルの「exit」ステートメントの前に挿入されていることを確認してください。
エリックハモンド

1
@Skaperen:/ mntは通常、きれいにフォーマットされ、インスタンスの実行または開始ごとにマウントされます。停止/開始は、以前の実行から残っているデータがないクリーンでフレッシュな/ mntを提供します。/ etc / fstabに加えたい変更はすべて、stop / startを通じて保持されるため、rc.localで毎回変更するのは意味がありません。
エリックハモンド

13

Ubuntuを実行しているため、より堅牢なアプローチは、Eric Hammondの提案Upstartスクリプト内に置き、マウント 直後バインドを行うこと/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

Apache / Passengerなどの一部のサーバーでは、に重要な一時ファイルが作成される場合があります/tmp。一度rc.local–ブートシーケンスの最後–実行すると、非表示になり、サーバーを混乱させます。


興味深いアイデア..
トム・オコナー

1

Romulo Cecconによって提案されたUpstartスクリプト使用するという考えは素晴らしいです。ただし、不明瞭なスクリプト内に魔法を隠したくない場合があります。fstab内にマウントを追加しても問題ありません。たとえば、

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

そして、これは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

このようにして、任意のディレクトリ構造と一時ストレージにないものを作成できます。

残っているのはすべてmkdir -p /mnt/local{1..4}再起動です(現在のファイルを非表示にするため、/ tmpをマウントしないと)


ない場合、fstabによるマウントは成功し/mnt/local1ますか?おそらく、取り付けイベントの方が安全です。
–RômuloCeccon 2014

はい、/ mnt / local1が使用可能であると想定しました。/ mntには何もマウントされていないので、通常はそうです。したがって、このディレクトリの作成はセットアップの一部です。私はマウンティングイベントを使ったことがありませんが、多分あなたは正しいです。私の答えの主なポイントは、マウントをfstabファイルに保持し、chmod 1777またはmkir -p upstartスクリプトのようなものを実行する方が良いかもしれないということです。
sfussenegger、2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.