How to use a Ramdisk for Linux
by Mark Nielsen
from The Computer Underground
If this document changes, it will be available here: http://www.tcu-inc.com/mark/articles/Ramdisk.html.
Index:
- Changes since
publication.
- Introduction to
RamDisk
- How to use
RamDisk
- Changing the
size of the ramdisks
- Example of
how to use a RamDisk for a webserver.
- Comments
Changes since publication.
These are the changes and notes I have
made after publication.
- Roland Smith said
"
AFAIK Linux uses all the memory that is not in use
by programs as a
unified buffer-cache. So I'd guess that all
frequently used files will
probably be cached in RAM, assuming you've got
enough RAM.
So why go to all the trouble of using ramdisks? Is
there really an
substantial speed increase?"
I guess my only response to this would be, yes, it does. If you need
to constantly use use certain files, it does. I notice when we use a ramdisk
for 800linux.com, copying files into the ramdisk goes very very fast. I guess
in response to his question, I am forcing ram for certain files to give them
top priority. Also, using a ramdisk for "/tmp" can be kind of cool, since you
always know it is going to get wiped on the next reboot!
Introduction to RamDisk
Hello! This is a brief article about how to
setup a RamDisk on a RedHat 6.0 system. It should be very similar for other
Linux distributions.
What is a RamDisk? A RamDisk is a portion of memory that you allocate to use
as a partition. Or, in other words, you are taking memory, pretending to treat
it as a hard drive, and you are saving your files to it. Why would you want to
use a RamDisk? Well, if you know that certain files you have are constantly
going to be used, putting the files into memory will increase the performance of
your computer since your memory is faster than your hard drive. Things like web
servers with lots of data can be sped up in the this way. Or, if you are insane,
and you have a PII 550 Mhz computer with 1 gig of memory and an old 500 meg hard
drive, you can use it just to increase your hard drive space. Then again, if you
want an almost diskless machine, it might not be that crazy afterall.
Here are some more resources to help you.
- http://metalab.unc.edu/LDP/HOWTO/Kernel-HOWTO.html
- http://metalab.unc.edu/LDP/HOWTO/mini/LILO.html
- /usr/src/linux/Documentation/ramdisk.txt
How to use RamDisk
Well, it is very easy to use a ramdisk. First of all,
the default installation of RedHat 6.0 comes with ramdisk support. All you have
to do is format a ramdisk and then mount it to a directory. To find out all the
ramdisks you have available, do a "ls -al /dev/ram*". This gives you the preset
ramdisks available to your liking. These ramdisks don't actually grab memory
until you use them somehow (like formatting them). Here is a very simple example
of how to use a ramdisk. mkdir -p /tmp/ramdisk0
mkfs -t ext2 /dev/ram0
mount /dev/ram0 /tmp/ramdisk0
Those three commands will make a directory for the ramdisk to be located
at, format a ramdisk (default being 4 megs), and mount the ramdisk to the
directory "/tmp/ramdisk0". Now you can treat that directory as a pretend
partition! Go ahead and use it like any other directory or as any other
partition.
What are some catches? Well, when the computer reboots, it gets wiped. Don't
put any data there that isn't copied somewhere else or if it is critical data.
If you make changes to that directory, and you need to keep the changes, figure
out some way to back them up.
Changing the size of the ramdisks
Well, how do I change the size of the
ramdisks? Well, personally, I could only find two ways to change them. Neither
of the options will let you change the size of the ramdisks after the computer
has started. That sucks.
Here is the hard way first. Look at this file :
/usr/src/linux/drivers/block/rd.c
then edit it, change
this line
int rd_size = 4096; /*Size of the ramdisks */
by changing the number to whatever size you want in kilobytes. Then compile
the kernel, install the kernel, and reboot the computer.
Okay, now the easy way. Add this line to your lilo.conf file:
ramdisk=10000
and it will make the default ramdisks 10
megs after you type the "lilo" command and reboot the computer. Here is an
example of my /etc/lilo.conf file.
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz-2.2.5-15
label=linux
root=/dev/hda2
read-only
ramdisk=10000
Actually, I got a little over 9 megs of usable space.
Example of how to use a RamDisk for a webserver.
Okay, here is an
example of how to use 3 ramdisks for a webserver. Let us say you are 99%
confident that your default installation of Apache for RedHat 6.0 won't use more
than 9 megs for its cgi-scripts, html, and icons. Here is how to install one.
First, issue this command to move the real copy of home directory for the
webserver to a different place. Also, make the directories to mount the ramdisks
to. mv /home/httpd/ /home/httpd_real
mkdir /home/httpd
mkdir /home/httpd/cgi-bin
mkdir /home/httpd/html
mkdir /home/httpd/icons
Then, add these commands to your /etc/rc.d/rc.local file.
### Make the ramdisk partitions
/sbin/mkfs -t ext2 /dev/ram0
/sbin/mkfs -t ext2 /dev/ram1
/sbin/mkfs -t ext2 /dev/ram2
### Mount the ramdisks to their appropriate places
mount /dev/ram0 /home/httpd/cgi-bin
mount /dev/ram1 /home/httpd/icons
mount /dev/ram2 /home/httpd/html
### Copying real directory to ramdisks
tar -C /home/httpd_real -c . | tar -C /home/httpd -x
#### Restarting the webserver
/etc/rc.d/init.d/httpd restart
I would reboot your computer, even though you really don't have to if you
just issue this command to start the rc.local file again: /etc/rc.d/rc.local
Comments
- Please remember one thing, BACKUP YOUR DATA if you change it and you need
it. When the computer reboots, any changes are lost. A cron job should do it.
Have it check every 5 minutes and see if any files have changed and backup any
changes. There are better ways of doing this, but I won't get into it. Another
thing you could do is make your changes to the real directory, and then copy
over the changes to the ramdisks. That is much safer.
- One thing to note, some motherboards for IBM PC compatible systems only
cache memory below 256 megs (or even 128 megs). If you use a lot of ram, take
that into consideration.
- A cool use of this would be to have a computer with 1 gig of memory and
then use 256 megs for "/tmp". If you have lots of processes that use "/tmp",
it should help speed up your system. Also, anything in /tmp would get lost
when the computer reboots, which can be a good thing.
- At first, I tried to use lilo.conf to change the sizes of the ramdisks,
but it didn't work. After Rob Funk asked me why I was trying to do it the hard
way (recompiling the kernel and such), I tried it again, and it worked. I
don't know what I did wrong the first time. Thanks Rob!
Mark Nielsen works for The Computer Underground as a file clerk and
as a professional (suit and tie) consultant at 800linux.com. In his spare time, he does
volunteer stuff, like writing these documents for The Linux Gazette and
linux.com. This document was edited using Nedit and ispell.