View Source

!http://www.sun.com/bigadmin/home/images/bigadminHeaderWikiThumb.jpg!
{section:border=false}
{column:width=20%}
{include:TOC for Tech Tips}
{column}
{column:width=55%}

h1. Talking about /tmp and RAM disks in the Solaris OS in general

by Bernd Schemmer,  last update: December 2008

Homepage: [http://www.bnsmb.de/|http://www.bnsmb.de/]

In Solaris /tmp is by default a memory based file system mounted on swap:
    
{code}
# df -k /tmp
Filesystem kbytes used avail capacity Mounted on
swap 1961928 504 1961424 1% /tmp
{code}
This has some advantages:
*  the access of /tmp is fast
*  there is always a writable directory even if Solaris can not mount the disks in read/write mode or if Solaris is booted from a read-only NFS share    
*  you do not need to think about cleaning up /tmp after or before a reboot
*  It's not neccessary to create a filesystem for tmp - just mount it und use it

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
    
{code}
swap - /tmp tmpfs - yes -
{code}
to
{code}
swap - /tmp tmpfs - yes size=1024m
{code}
(replace 1024m with an approbiate value for the machine)
    
Unfortunately you can not change the size for /tmp while Solaris is running:
{code}
# lockfs /tmp
/tmp: Inappropriate ioctl for device

# mount -o remount,size=512m swap /tmp
mount: Operation not supported
{code}
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:
{code}
[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
{code}
To create this new filesystem every time the machine boots up simply add another line to the /etc/vfstab:
{code}
swap - /mytmp tmpfs - yes size=1024m
{code}
There are some restrictions for tmpfs Filesystems:
*  There is not really a device for a memory based filesystems like /dev/dsk/c#t#d#s#.. for harddisks or /dev/lofi/# for lofi mounts.  Especially there is no raw device for the memory based filesystems.
* There are some restrictions in tmpfs (see tmpfs(7FS) )
* And you can only use the tmpfs filesystem on memory based file systems; you can not use for example ufs or vxfs on these kind of file systems.

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:
{code}
# 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 /]
{code}
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 [wiki entry|http://wikis.sun.com/display/BigAdmin/Using+a+SVM+submirror+on+a+ramdisk+to+increase+read+performance].

*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|http://wikis.sun.com/display/BigAdmin/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?|http://blogs.sun.com/jtc/entry/are_solaris_ram_disks_swappable]\\
{column}
{section}

The individuals who post here are part of the extended Sun Microsystems community and they might not be employed or in any way formally affiliated with Sun Microsystems. The opinions expressed here are their own, are not necessarily reviewed in advance by anyone but the individual authors, and neither Sun nor any other party necessarily agrees with them.

Copyright 1994-2009 Sun Microsystems, Inc.
Powered by Atlassian Confluence
Sun Guidelines on Public Discourse Privacy Policy Terms of Use Trademarks Site Map Employment Investor Relations Contact