by Bernd Schemmer, last update: December 2008
Homepage: http://www.bnsmb.de/
In Solaris /tmp is by default a memory based file system mounted
on swap:
# df -k /tmp Filesystem kbytes used avail capacity Mounted on swap 1961928 504 1961424 1% /tmp
This has some advantages:
On the other hand there are some things to take care of if using
/tmp:
Because /tmp is mounted on swap you should not use it for files
which should survive a reboot - use the disk based directory
for temporary files, /var/tmp, instead for these files.
One very important point:
Every user can write to /tmp. And in the default configuration
/tmp is mounted without a size limitation. This fact results in
the possibility that every user can use the whole virtual memory
of the machine (that is physical memory and swap) by simply
filling up /tmp with garbage.
To avoid this situation you should mount /tmp with an upper limit
for the size, e.g in /etc/vfstab change the line
swap - /tmp tmpfs - yes -
to
swap - /tmp tmpfs - yes size=1024m
(replace 1024m with an approbiate value for the machine)
Unfortunately you can not change the size for /tmp while Solaris
is running:
Therefore you must reboot the machine to activate the change.
Because of the fact that tmpfs is a "normal" filesystem in
Solaris you can always add additional memory based file systems,
e.g.
to create another tmpfs on the fly use:
[Mon Mar 17 21:53:19 root@sol9 /] # mkdir /mytmp [Mon Mar 17 22:05:44 root@sol9 /] # mount -o size=100m -F tmpfs swap /mytmp [Mon Mar 17 22:06:04 root@sol9 /] # df -k /mytmp Filesystem kbytes used avail capacity Mounted on swap 102400 0 102400 0% /mytmp
To create this new filesystem every time the machine boots up simply add another line to the /etc/vfstab:
swap - /mytmp tmpfs - yes size=1024m
There are some restrictions for tmpfs Filesystems:
But because Solaris is a real Operating system there is a solution for this problem also:
Instead of using tmpfs to create a memory based file system, use
ramdiskadm. ramdiskadm is part of the Solaris OS since (at least)
version 9.
ramdiskadm is part of the SUNWcsu package and therefore should be
installed on every Solaris machine (x86 and SPARC, of course).
ramdiskadm can be used to create real ramdisk devices which can be used like any other disk device, e.g:
# create the ramdisk # [Mon Mar 17 22:15:03 root@sol9 /] # ramdiskadm -a mydisk 40m /dev/ramdisk/mydisk # check the result # [Mon Mar 17 22:15:21 root@sol9 /] # ls -l /dev/ramdisk/mydisk lrwxrwxrwx 1 root root 40 Mar 17 22:15 /dev/ramdisk/mydisk -> ../../devices/pseudo/ramdisk@1024:mydisk [Mon Mar 17 22:16:04 root@sol9 /] # ls -l /dev/rramdisk/mydisk lrwxrwxrwx 1 root root 44 Mar 17 22:15 /dev/rramdisk/mydisk -> ../../devices/pseudo/ramdisk@1024:mydisk,raw # check the fstype # [Mon Mar 17 22:16:07 root@sol9 /] # fstyp /dev/rramdisk/mydisk unknown_fstyp (no matches) # create a filesystem on the ramdisk # [Mon Mar 17 22:16:22 root@sol9 /] # newfs /dev/rramdisk/mydisk /dev/rramdisk/mydisk: Unable to find Media type. Proceeding with system determined parameters. newfs: construct a new file system /dev/rramdisk/mydisk: (y/n)? y /dev/rramdisk/mydisk: 81872 sectors in 136 cylinders of 1 tracks, 602 sectors 40.0MB in 9 cyl groups (16 c/g, 4.70MB/g, 2240 i/g) super-block backups (for fsck -F ufs -o b=#) at: 32, 9664, 19296, 28928, 38560, 48192, 57824, 67456, 77088, # mount the ramdisk # [Mon Mar 17 22:16:44 root@sol9 /] # mkdir /myramdisk [Mon Mar 17 22:16:51 root@sol9 /] # mount /dev/ramdisk/mydisk /myramdisk [Mon Mar 17 22:17:01 root@sol9 /] # df -k /myramdisk Filesystem kbytes used avail capacity Mounted on /dev/ramdisk/mydisk 38255 1041 33389 4% /myramdisk [Mon Mar 17 22:17:06 root@sol9 /]
Be aware that these ramdisks are also gone after a reboot. If you need them permanent you should create an init script or an SMF service to recreate them while booting the machine.
For more detailed information about ramdiskadm please consult the man page of ramdiskadm(1m) and ramdisk(7d); The man page of ramdiskadm also describes how to give users other than root access to create and delete ramdisks and the man page for ramdisk explains how much memory can be used for ramdisks.
And, for the records, you can use a ramdisk created with
ramdiskadm also for an SVM mirror . This can be useful if an
application is mostly reading from
the disk; in this case you can change the read policy for the
mirror to first read from the ramdisk..
But that's a story for another page .
Update 23.11.2008
A script to start and stop ramdisks in the Solaris OS can be find in this article:
A script to start and stop ramdisks in the Solaris OS
Update 06.12.2008
There's an interesting blog entry about ramdisks and swap:
Are Solaris RAM Disks swappable?
17.04.2012/bs: Blog
entry deleted by Oracle