如何在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

用/ tmp替换/ mnt并给它一个umask = 0777,但是由于cloudconfig,它不起作用。

我正在使用Ubuntu 12.04。谢谢。


我不知道你要我做什么。您可以使用touch和提供一个预期输出的示例ls -l吗?
杰夫·弗兰

例如:列出中的文件/mnt/tmp应返回其中的相同文件/tmp,并补充说用户touch /tmp/testfile发出的a ubuntu应该不使用而起作用sudo
克劳迪奥·波利

Answers:


13

您列出的初始建议有几个问题,尽管看起来似乎朝着正确的方向发展:

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

    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当您停止/启动实例或创建AMI并运行新实例时,任何将绑定挂载放入的尝试都会遇到问题,因为/ mnt是临时存储,所有内容(包括/mnt/tmp目录)都将消失。


您可以建议将其放在用户数据脚本中吗?
克劳迪奥·波利

1
我将采用编码rc.local的方法来首先尝试临时设备的安装(他是否已经将其安装在/ mnt吗?),如果失败,则对其进行格式化并再次尝试安装。这样一来,停止并重新启动应该保留它(终止将是照常开始的方式)。自rc.local挂载以来,我没有明确需要在/ etc / fstab中拥有它,但是将rc.local附加到它可能不会受到伤害。
Skaperen 2012年

1
@ClaudioPoli:将其放入用户数据中的问题在于用户数据脚本仅在首次启动时运行。您希望它在每次启动时运行。您可以将用户数据添加到/etc/rc.local中,但是请确保将其插入到该文件中的任何“退出”语句之前。
埃里克·哈蒙德

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吗?也许安装事件是安全的。
罗慕洛Ceccon

是的,我假设/ mnt / local1可用。我应该已经解释过,通常情况下/ mnt上没有安装任何东西。因此,创建此目录是安装程序的一部分。我没有尝试使用安装事件,但也许您是对的。我的回答的主要问题是,它可能是更好地保持坐骑在fstab文件和做的东西,如chmod 1777mkir -p 在新贵脚本。
sfussenegger 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.