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

93

После просмотра комментария от 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?

Дэн
источник
это также хорошая идея, если у вас есть и SSD, поскольку вы не будете «потреблять» его с бесполезными записями ...
Postadelmaga
Ха ха точно такой же вопрос привел меня сюда: D
Тедди Марков

Ответы:

80

Вы абсолютно правы. Соответствующая запись в 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 удалит все ваши файлы журналов после перезагрузки, поэтому вы не сможете отладить вашу систему, если случится что-то непредвиденное. Так что используйте эти настройки на свой страх и риск!

Примечание редактора: я удалил опцию /runin tmpfsmount, так как эта папка и ее подпапки уже подключены tmpfsпо умолчанию.

FuzzyQ
источник
11
Если я не ошибаюсь, / var / tmp / для хранения файлов после перезагрузки. В этом основная разница между этим и / tmp /, поэтому ВЫ не должны перемещать / var / tmp в ram.
3
Если в Ubuntu не хватает 4 ГБ файлов tmpfs, будет ли он использовать мой раздел 20 ГБ SWAP?
Лоустро
3
Да, мне нужно добавить это тоже. Как только tmpfs превысит свои пределы, он распространится на раздел подкачки (пусть есть).
FuzzyQ
5
Означает ли выделение половины ОЗУ этому значению, что половина ОЗУ зарезервирована для ОЗУ RAMDISK, или это всего лишь ограничение того, что может потреблять ОЗУ RAMDISK, и что не используется, так это свободная ОЗУ, которая назначается любой программе, нуждающейся в ОЗУ ??
Мат
6
@matt Это только кепка.
FuzzyQ 19.01.15
35

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

Для того, чтобы установить максимальный лимит для ОЗУ в соответствии с запросом, необходимо добавить size=512Mк Optionsстроке, разделенной запятой.

Рик Рамштеттер
источник
2
Вам понадобится systemctl enable tmp.mountпосле того, как cp иначе systemctl потерпит неудачу с сообщением " Failed to start tmp.mount: Unit tmp.mount not found."
vimdude
4
@ Рик, еще лучше использовать systemctl edit tmp.mountэто, было бы нейтральным. Это помещает ваши изменения в файл override.conf, чтобы вы не могли изменить tmp.mount по умолчанию и легко удалить override.conf, чтобы вернуться к конфигурации по умолчанию.
Булат М.
То же самое сказал Булат об использовании systemctl edit, а также об использовании, ln -sа не cpна первом шаге.
Майкл Граттон