После просмотра комментария от Anonymous по вопросу Как очищается каталог / tmp? , я обнаружил, что было бы неплохо реализовать в моей системе, так как у меня есть 16 ГБ оперативной памяти, и я никогда не использовал все это.
Мои временные файлы никогда не записываются на диск. Они записываются на RAM-диск. Я поместил
blockquote>tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
в /etc/fstab.Мой вопрос:
Могу ли я установить максимальное значение для использования ОЗУ для
/tmp
? И в таком случае, что произойдет, если максимальный объем будет превышен, будет ли он записан на жесткий диск?Я прочитал решение, которое гласит:
blockquote>mkdir -p /tmp/ram sudo mount -t tmpfs -o size=512M tmpfs /tmp/ram/
Но, насколько я понимаю, это не будет постоянным решением. Если мне нужно, чтобы он был постоянным, его нужно добавить в файл конфигурации
/etc/fstab
.Если это правильное решение, как я могу преобразовать эту команду монтирования в строку в
/etc/fstab
?
В системах, использующих 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 в единицы монтирования динамически. Я не думаю, что любой подход лучше.
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
[ 117]
/var/log/apt
(используйте только defaults,noatime
без mode=
или nosuid
)
Но будьте осторожны: применяются те же правила, что и выше, заканчиваются пространства может вызвать серьезные проблемы. Например. представьте, что нехватка места для / var / log / apt сделает вас неспособным установить какие-либо программы! Кроме того, загрузка папок /var/log
в ramdisk удалит все ваши файлы журналов после перезагрузки, поэтому вы не сможете отладить вашу систему, если произойдет что-то непредвиденное. Поэтому используйте эти настройки на свой страх и риск!
От редакции: Я удалил опцию монтирования /run
в tmpfs
, так как эта папка и ее подпапки уже смонтированы в tmpfs
с помощью по умолчанию.