#!/bin/bash
# ramdisk.sh

#  I borrowed this script from Mendel Cooper's "Advanced Bash-Scripting Guide"
#  online at http://www.pantek.com/library/linux/Advanced-Bash-Scripting/index.html.
#  I made a few very minor adjustments (e.g.-# of blocks) for my own purposes.  
#  Paul W. 11/03/03

#  A "ramdisk" is a segment of system RAM memory
#+ that acts as if it were a filesystem.
#  Its advantage is very fast access (read/write time).
#  Disadvantages: volatility, loss of data on reboot or powerdown.
#                 less RAM available to system.
#
#  What good is a ramdisk?
#  Keeping a large dataset, such as a table or dictionary on ramdisk
#+ speeds up data lookup, since memory access is much faster than disk access.


E_NON_ROOT_USER=70             # Must run as root.
ROOTUSER_NAME=root

MOUNTPT=/mnt/ramdisk
SIZE=4096                      # 4K blocks (change as appropriate)
BLOCKSIZE=1024                 # 1K (1024 byte) block size
DEVICE=/dev/ram0               # First ram device

username=`id -nu`
if [ "$username" != "$ROOTUSER_NAME" ]
then
  echo "Must be root to run \"`basename $0`\"."
  exit $E_NON_ROOT_USER
fi

if [ ! -d "$MOUNTPT" ]         #  Test whether mount point already there,
then                           #+ so no error if this script is run
  mkdir $MOUNTPT               #+ multiple times.
fi

dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE  # Zero out RAM device.
mke2fs -m 0 -N 2000 $DEVICE                 # Create an ext2 filesystem on it.
mount $DEVICE $MOUNTPT         # Mount it.
chmod 777 $MOUNTPT             # So ordinary user can access ramdisk.
                               # However, must be root to unmount it.

echo "\"$MOUNTPT\" now available for use."
# The ramdisk is now accessible for storing files, even by an ordinary user.

#  Caution, the ramdisk is volatile, and its contents will disappear
#+ on reboot or power loss.
#  Copy anything you want saved to a regular directory.

# After reboot, run this script again to set up ramdisk.
# Remounting /mnt/ramdisk without the other steps will not work.

exit 0
