¿Cómo puedo usar el almacenamiento de RAM para el directorio / tmp y cómo configurar una cantidad máxima de uso de RAM para él?

92

Después de ver el comentario de Anónimo sobre la pregunta ¿Cómo se limpia el directorio / tmp? , Descubrí que sería una gran idea implementarlo en mi sistema, ya que tengo 16 GB de RAM y nunca lo usé todo.

Mis archivos temporales nunca se escriben en el disco. Se escriben en un disco RAM. Puse tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0en / etc / fstab.

Mi pregunta es:

¿Puedo establecer un valor máximo para el uso de RAM /tmp? Y en ese caso, ¿qué sucedería si se superara la cantidad máxima, escribiría en la unidad de disco duro?

He leído una solución que dice:

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

Pero en mi opinión, esta no será una solución permanente. Si necesito que sea permanente, debe agregarse al /etc/fstabarchivo de configuración.

Si esta es la solución correcta, ¿cómo puedo transformar ese comando de montaje en una línea /etc/fstab?

Dan
fuente
esta también es una buena idea si tiene un SSD ya que no lo 'consumirá' con escritos no útiles ...
Postadelmaga 02 de
Ja, ja, exactamente la misma pregunta me trajo aquí: D
Teddy Markov

Respuestas:

80

Tienes toda la razón. La entrada correspondiente de fstab se vería así:

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

Tenga en cuenta:

A medida que tmpfsse llena, se comportará como cualquier disco duro físico al dar un error de "espacio insuficiente". Si bien el reinicio (y, por lo tanto, vaciar el caché) solucionará esto, puede tener problemas cuando una sola operación consume más espacio para empezar de lo que hay espacio tmpfs. En este caso, su computadora comenzará a cambiar de RAM a disco, lo que hará que su sistema se detenga, dado que tiene una partición de intercambio para comenzar, por supuesto.

Teniendo esto en cuenta, un tamaño de 512 MB podría ser mucho menor hoy en día, ya que existe mucho más ram en las máquinas modernas y se ha vuelto mucho más barato. Como ya tienes 16 GB de RAM, usar el valor predeterminado de la mitad de tu RAM tmpfsdebería ser más que suficiente para casi todos los escenarios. Para usar el valor predeterminado, simplemente omita la size=512Mentrada en su /etc/fstabarchivo.

Otra nota:

También puede montar fácilmente otras carpetas del sistema en ramdisk, como

/var/cache

/var/games

/var/log/apt(usar solo defaults,noatimesin mode=o nosuid)

Pero tenga cuidado: las mismas reglas se aplican como anteriormente, quedarse sin espacio puede causar grandes problemas. Por ejemplo, si se agota el espacio para / var / log / apt, no podrá instalar ningún programa. Además, al cargar /var/logcarpetas en ramdisk se eliminarán todos los archivos de registro al reiniciar, por lo que no podrá depurar su sistema si ocurre algo inesperado. ¡Utilice esta configuración bajo su propio riesgo!

Nota editorial: eliminé la opción /runin tmpfsmount ya que esta carpeta y sus subcarpetas ya están montadas tmpfsde forma predeterminada.

FuzzyQ
fuente
11
Si no me equivoco, / var / tmp / es para mantener los archivos después del reinicio. Esa es la principal diferencia entre esto y / tmp /, por lo que NO debe mover / var / tmp a ram.
3
Si Ubuntu se queda sin 4mp tmpfs, ¿usará mi partición SWAP de 20GB?
loostro
3
Sí, también tendré que agregar esto. Tan pronto como tmpfs supere sus límites, se extenderá a la partición de intercambio (dado que hay uno).
FuzzyQ
55
¿Asignar la mitad de su RAM a esto significa que la mitad de su RAM está reservada para RAMDISK, o es solo un límite a lo que el RAMDISK puede consumir, y lo que no está en uso es RAM libre que se asigna a cualquier programa que necesite RAM?
mate
66
@matt Es solo una gorra.
FuzzyQ
35

En los sistemas que usan systemd, tiene la opción de usar un archivo de unidad systemd en lugar de fstab para lograr el objetivo de usar tmpfspara montar tmp. En mi sistema Ubuntu 16.04, ejecuté:

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

El archivo se /usr/share/systemd/tmp.mountve así:

#  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

Usando el enfoque fstab de FuzzyQ, systemd traduce sus entradas fstab en unidades de montaje dinámicamente. No creo que ninguno de los enfoques sea mejor.

Para establecer el límite máximo para la RAM como se le solicitó, uno necesitaría agregar size=512Ma la Optionslínea, separados por una coma.

Rick Ramstetter
fuente
2
Necesitará systemctl enable tmp.mountdespués de cp else systemctl fallará con el mensaje " Failed to start tmp.mount: Unit tmp.mount not found."
vimdude
44
@ Rick, es incluso mejor usar systemctl edit tmp.mounteso que sería distro-neutral. Eso coloca sus cambios en override.conf para que no modifique tmp.mount predeterminado y pueda eliminar override.conf fácilmente para volver a la configuración predeterminada.
Bulat M.
Lo mismo dice Bulat sobre el uso de systemctl edit, y también usa en ln -slugar cpdel primer paso.
Michael Gratton