Як встановити / tmp в / mnt на EC2?


10

Мені було цікаво, який найкращий спосіб встановити /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. Дякую.


Я не можу зрозуміти, що ти просиш мене зробити. Чи можете ви навести приклад очікуваного випуску за допомогою touchта ls -l?
Джефф Ферланд

Наприклад: перелік файлів у файлі /mnt/tmpповинен повертати ті самі файли /tmp, додаючи, що touch /tmp/testfileвиданий ubuntuкористувачем повинен працювати без використання sudo.
Клаудіо Полі

Відповіді:


13

Є кілька проблем із початковою пропозицією, яку ви перераховуєте, хоча здається, що вона спрямована в хорошому напрямку:

  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каталог) зникне .


Чи можете ви порекомендувати ввести це в сценарії даних користувачів?
Клаудіо Полі

1
Я б скористався підходом кодування rc.local, щоб спершу спробувати встановити ефемерний пристрій (він уже встановив його в / mnt?), А якщо це не вдасться, відформатуйте його та спробуйте встановити ще раз. Таким чином, зупинка та перезапуск повинні зберегти її (припинення - це спосіб почати свіжий, як завжди). Я не бачу певної необхідності мати його в / etc / fstab, оскільки rc.local монтує його, але додавання rc.local, ймовірно, не зашкодить.
Скаперен

1
@ClaudioPoli: Проблема з введенням цього даних у дані користувача полягає в тому, що сценарій даних користувача виконується лише під час першого завантаження. Ви хочете, щоб це працювало на кожному завантаженні. Ви можете мати дані користувача, щоб додати це до /etc/rc.local, але переконайтеся, що він вставлений перед будь-яким оператором "вихід" у цьому файлі.
Ерік Хаммонд

1
@Skaperen: / mnt, як правило, чисто форматується та встановлюється під час кожного запуску або запуску екземпляра. Зупинка / старт дає вам чистий, свіжий / mnt, без даних, що залишилися від попереднього запуску. Будь-яка модифікація, яку ви хотіли зробити в / etc / fstab, зберігалася б через stop / start, тому не має сенсу rc.local змінювати її під час кожного завантаження.
Ерік Хаммонд

13

Більш надійний підхід, оскільки ви працюєте з Ubuntu, полягає в тому, щоб помістити пропозицію Еріка Хаммонда всередині сценарію 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

Ідея використання сценарію 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? Можливо, монтажний захід безпечніший.
Ромуло Секкон

Так, я припустив, що / mnt / local1 доступний. Я повинен був пояснити, що нічого не встановлено на / mnt, що зазвичай так і є. Тому створення цього каталогу є частиною налаштування. Я не намагався використовувати монтажний захід, але, можливо, ти маєш рацію. Основний момент моєї відповіді полягає в тому, що, можливо, краще буде зберігати кріплення у файлі fstab і виконувати такі речі, як скрипти chmod 1777або mkir -p на початку.
sfussenegger
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.