Назад | Перейти на главную страницу

Как смонтировать / tmp в / mnt на EC2?

Мне было интересно, как лучше всего установить /tmp конечная точка в эфемерной памяти /mnt на экземпляре EC2 и дайте 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. Спасибо.

Более надежным подходом, поскольку вы используете Ubuntu, было бы поставить Предложение Эрика Хаммонда внутри Выскочка скрипт и сделайте привязку немедленно после монтажа /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. В целях безопасности 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 может столкнуться с проблемами при остановке / запуске экземпляра или при создании AMI и запуске нового экземпляра, поскольку / mnt - это временное хранилище и все содержимое (включая /mnt/tmp каталог) исчезнут.

Идея используя сценарий 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 без него, так как вы бы скрывали там текущие файлы).