如何在 EC2 上的 /mnt 中挂载 /tmp?

如何在 EC2 上的 /mnt 中挂载 /tmp?

我想知道在EC2 实例上的/tmp临时存储中安装端点并授予用户默认写权限的最佳方法是什么。/mntubuntu

有人建议按如下方式编辑 /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。谢谢。

答案1

您列出的初始建议似乎朝着好的方向发展,但仍然有几个问题:

  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

当您停止/启动实例或者创建 AMI 并运行新实例时,任何尝试绑定挂载/etc/fstab都会遇到问题,因为 /mnt 是临时存储并且所有内容(包括目录/mnt/tmp)都会消失。

答案2

一个更强大的方法是,因为你运行的是 Ubuntu,Eric Hammond 的建议在里面暴发户脚本,并立即完成绑定安装后 /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(启动顺序中的最后一个)运行,它们就会被隐藏,并使服务器感到困惑。

答案3

的想法按照 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,因为你会隐藏那里的当前文件)。

相关内容