Как я могу использовать память RAM для каталога /tmp и как установить для нее максимальный объем памяти?

После просмотра комментария от Anonymous на вопрос Как очищается каталог /tmp? Я обнаружил, что это было бы хорошей идеей для реализации в моей системе, так как у меня 16 ГБ ОЗУ, и я никогда не использовал все это.

Мои временные файлы никогда не записываются на диск. Они записываются на RAM-диск. Я положил tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 в /etc/fstab.

Мой вопрос:

Могу ли я установить максимальное значение для использования ОЗУ для /tmp? И в этом случае, что произойдет, если максимальный объем будет превышен, будет ли он записывать на жесткий диск?

Я прочитал решение, которое гласит:

mkdir -p /tmp/ram
sudo mount -t tmpfs -o size=512M tmpfs /tmp/ram/

Но в моем понимании это не будет постоянным решением. Если мне нужно, чтобы он был постоянным, его нужно добавить в /etc/fstab конфигурационный файл.

Если это правильное решение, как я могу преобразовать эту команду монтирования в строку /etc/fstab?

2 ответа

Решение

Вы абсолютно правы. Соответствующая запись в fstab будет выглядеть так:

tmpfs /tmp tmpfs defaults,noatime,nosuid,nodev,noexec,mode=1777,size=512M 0 0

Пожалуйста, обратите внимание:

Как tmpfs Заполняется, он будет вести себя как любой физический жесткий диск, выдавая ошибку "недостаточно места". Хотя перезагрузка (и, следовательно, очистка кеша) исправит это, вы можете столкнуться с проблемами, когда одна операция занимает для начала больше места, чем места на tmpfs, В этом случае ваш компьютер начнет переключаться с оперативной памяти на диск, что приведет к остановке системы, если, конечно, у вас есть раздел подкачки.

Учитывая это, в настоящее время размер 512 МБ может быть намного меньше, поскольку в современных машинах существует гораздо больше оперативной памяти, и она стала намного дешевле. Поскольку у вас уже есть 16 ГБ оперативной памяти, используйте значение по умолчанию, равное половине памяти для tmpfs должно более чем достаточно для почти всех сценариев. Чтобы использовать значение по умолчанию, просто опустите size=512M запись в вашем /etc/fstab файл.

Еще одна заметка:

Вы также можете легко монтировать другие системные папки в ramdisk, такие как

/var/cache

/var/games

/var/log/apt (использовать только defaults,noatime без mode= или же nosuid)

Но будьте осторожны: применяются те же правила, что и выше, из-за нехватки места могут возникнуть серьезные проблемы. Например, представьте, что нехватка места для /var/log/apt сделает вас неспособным установить какие-либо программы! Кроме того, загрузка /var/log папки в ramdisk удалят все ваши файлы журналов после перезагрузки, поэтому вы не сможете отладить вашу систему, если случится что-то непредвиденное. Так что используйте эти настройки на свой страх и риск!

От редакции: я удалил /run в tmpfs опция монтирования, так как эта папка и ее подпапки уже смонтированы в tmpfs по умолчанию.

На системах, использующих systemdу вас есть возможность использовать системный файл systemd вместо fstab для достижения цели использования tmpfs монтировать tmp, В моей системе Ubuntu 16.04 я запустил:

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

Файл /usr/share/systemd/tmp.mount похоже:

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
[Unit]
Description=Temporary Directory
Documentation=man:hier(7)
Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
ConditionPathIsSymbolicLink=!/tmp
DefaultDependencies=no
Conflicts=umount.target
Before=local-fs.target umount.target
After=swap.target

[Mount]
What=tmpfs
Where=/tmp
Type=tmpfs
Options=mode=1777,strictatime

[Install]
WantedBy=local-fs.target

Используя подход FuzzyQ fstab, systemd динамически переводит ваши записи fstab в модули монтирования. Я не думаю, что любой подход лучше.

Другие вопросы по тегам