Как я могу использовать память 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 в модули монтирования. Я не думаю, что любой подход лучше.