How can I use RAM storage for the /tmp directory and how to set a maximum amount of RAM usage for it?
You are absolutely right. The according fstab entry would look like this:
tmpfs /tmp tmpfs defaults,noatime,nosuid,nodev,noexec,mode=1777,size=512M 0 0
Please note:
As tmpfs
gets filled up, it will behave as any physical hard drive by giving an "not enough space" error. While rebooting (and thus emptying the cache) will fix this, you may run into trouble when a single operation consumes more space to begin with than there's space on tmpfs
. In this case your computer will start to swap from ram to disk, which will make your system crawl to a halt, given you've got a swap partition to begin with, of course.
Considering this, a size of 512MB might be far too less nowadays, since much more ram is in existence in modern machines and it has become much cheaper. Since you've already got 16GB of ram, using the default value of half your ram for tmpfs
should more than suffice for almost all scenarios. To use the default value, simply leave out the size=512M
entry in your /etc/fstab
file.
Another note:
You can quite as easily mount other system folders into ramdisk as well, such as
/var/cache
/var/games
/var/log/apt
(use only defaults,noatime
without mode=
or nosuid
)
But beware: the same rules apply as above, running out of space might cause major trouble. E.g. imagine running out of space for /var/log/apt will render you unable to install any programs!
Furthermore, loading /var/log
folders into ramdisk will delete all your log files upon reboot, so you won't be able to debug your system if anything unexpected happens.
So use these settings at your own risk!
Editorial note:
I removed the /run
in tmpfs
mount option since this folder and its subfolders are already mounted in tmpfs
by default.
On systems using systemd
, you have the option of using a systemd unit file instead of fstab to accomplish the goal of using tmpfs
to mount tmp
. On my Ubuntu 16.04 system, I ran:
sudo cp /usr/share/systemd/tmp.mount /etc/systemd/system/tmp.mount
sudo systemctl enable tmp.mount
sudo systemctl start tmp.mount
The file /usr/share/systemd/tmp.mount
looks like:
# 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
Using FuzzyQ's fstab approach, systemd translates your fstab entries into mount units dynamically. I don't think either approach is better.
In order to set the maximum limit for the RAM as asked, one would need to add size=512M
to the Options
line, separated by a comma.