如何在EC2上挂载/ tmp到/ mnt?

我想知道在EC2实例的临时存储/mnt挂载/tmp端点的最好方法是什么,并给ubuntu用户默认的写入权限。

有些人build议这样编辑/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

用/ tmpreplace/ mnt,然后给它一个umask = 0777,但是由于cloudconfig的原因,它不起作用。

我使用Ubuntu 12.04。 谢谢。

你列出的最初build议有几个问题,但它似乎朝着一个好的方向发展:

  1. 为了安全起见, mkdir命令应该在模式下设置sticky位来创build目录:

     mkdir -m 1777 /mnt/tmp 
  2. -o nobootwait似乎不是必须的,因为这不会被保存在/mnt/fstab

所以,我build议在/etc/rc.local尝试:

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

当你停止/启动实例,或者当你创build一个AMI并运行一个新的实例,/ mnt是临时存储和所有内容(包括/mnt/tmp任何试图将bind mount放入/etc/fstab都会遇到问题/mnt/tmp目录)将消失。

更强大的方法,因为你正在运行Ubuntu,将把埃里克·哈蒙德的build议放在一个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上创build重要的临时文件。 一旦rc.local (引导序列中的最后一个)运行,它们将被隐藏起来并混淆服务器。

Romulo Cecconbuild议使用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 

这样,你可以创build任何目录结构,什么不在临时存储。

剩下的就是mkdir -p /mnt/local{1..4}然后重新启动(我不会挂载/ tmp,因为你会隐藏当前文件)。