Переместить / TMP в RAM

16

Я пытаюсь перейти /tmpв оперативную память и соблюдать хорошую практику:

  • /var/tmpНЕ ДОЛЖЕН быть помещен в tmpfs, поскольку это должно пережить перезагрузки

  • не монтировать /tmpкак отдельный tmpfs, но полагаться /dev/shmили/run/shm

Однако в ядрах 2.6 и 3.2 все изменилось:

Изменения в конфигурации и значения по умолчанию для файловых систем tmpfs

На ядре 3.2 используйте RAMTMP=yesв /etc/default/tmpfs.

Мой вопрос: как я могу достичь этой цели с более старыми ядрами?

Мой выбор - ни изменять / etc / fstab, ни это:

mkdir /dev/shm/tmp
chmod 1777 /dev/shm/tmp
mount --bind /dev/shm/tmp /tmp

Есть что-то вроде RAMTMPдля ядер 2.6?

Massimo
источник
1
tmpfsсчитается вредным . Пища для размышлений.
sr_
8
@sr_ Извините, я категорически не согласен со связанной статьей. /tmpможно и нужно использовать для временных файлов, вот и весь смысл. /tmpне должен пережить перезагрузку (используйте /var/tmpдля этого), и кто составляет электронную почту в два раза меньше оперативной памяти + подкачки (без сохранения)?
Марко
@ Марко, конечно, я просто добавлял что-то, что мне показалось связанным.
sr_
Дополнительный контекст: fedoraproject.org/wiki/Features/tmp-on-tmpfs
Nemo

Ответы:

19

Вы не должны делать все , что вы можете просто установить , /tmpкак tmpfsс помощью линии , как следующее /etc/fstab:

tmpfs /tmp tmpfs mode=1777,nosuid,nodev 0 0

Вы также можете сделать это вживую (но имейте в виду, что вещи, которые в настоящее время находятся в /tmpвашей текущей файловой системе, не будут доступны, кроме как через inode и открытые в настоящее время файловые дескрипторы, так что вы действительно должны сделать это путем изменения /etc/fstabи перезагрузки):

mount -o mode=1777,nosuid,nodev -t tmpfs tmpfs /tmp

Обратите внимание, что tmpfsможет поменяться. Если вы хотите по-настоящему оперативную файловую систему, используйте ramfs.

Крис Даун
источник
Крис, моя точка зрения - "лучшие практики". Разработчики установили встроенную поддержку монтирования / tmp поверх ... / shm; Я читал, что лучше использовать те же самые tmpfs.
Массимо
3
@Massimo Мое мнение таково, что лучшая практика - не связывать маунта. Это добавляет ненужную сложность.
Крис Даун
5
@Massimo Где вы находите «лучшие практики»? Единственная причина, по которой я не вижу монтирования /tmpкак tmpfs, заключается в том, что теперь у вас есть 2 потенциальные файловые системы tmpfs, которые могут заполняться и использовать больше памяти ( /tmpи /dev/shm). Но если вы действительно хотите заполнить 2 монтирования tmpfs, вы можете уменьшить максимальный размер монтирования tmpfs.
Патрик
@ChrisDown, что плохого в bind mount? Также наличие одного tmpfs могло бы упростить ситуацию, не так ли?
CMCDragonkai
2
@CMCDragonkai Внутренние привязки совсем не просты, они содержат несколько не интуитивно понятных предостережений, которые вы, вероятно, не намерены (особенно известной является драматическое окружение, требующее перемонтирования для монтируемых только для чтения). Просто используйте два tmpfsкрепления вместо.
Крис Даун
17

/etc/default/tmpfsдля sysvinit, для systemd(Debian по умолчанию начиная с jessie) вам нужно всего лишь сделать:

systemctl enable tmp.mount

и на Debian Stretch

cp /usr/share/systemd/tmp.mount /etc/systemd/system/
systemctl enable tmp.mount

см. список изменений на https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=787542#74

Lluís
источник
Благодарность! Это верный способ переместить / tmp в tmpfs в Jessie.
Ясиру Ги
Спасибо большое! на gentoo я не понял, почему у меня / tmp монтируется tmpfs. системный скрипт tmp.mount делает это.
UFK
4

Я знаю, что это довольно старо, но в дистрибутивах типа Debian настройка RAMTMP, RAMRUN и RAMLOCK в / etc / default / tmpfs (/ etc / default / rcS или перед wheezy) выполняет ту же работу.

luison
источник