Мне было интересно, как лучше всего установить /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
- последний в последовательности загрузки - запускается, они будут скрыты и запутают серверы.
Есть пара проблем с первоначальным предложением, которое вы перечисляете, хотя, похоже, оно движется в правильном направлении:
В целях безопасности mkdir
команда должна создать каталог с липким битом, установленным в режиме:
mkdir -m 1777 /mnt/tmp
В -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 без него, так как вы бы скрывали там текущие файлы).