#!/bin/sh # # ramdisk This shell script takes care of starting and stopping # the ramdisks. # # chkconfig: 345 00 99 # description: ramdisk caches /etc and /var to two ramdisks and mounts \ # them to avoid disk accesses to save power. # Source function library. . /etc/rc.d/init.d/functions if [ $0 != "/tmp/ramdisk" ] ; then cp $0 /tmp/ramdisk exec /tmp/ramdisk $1 fi [ -f /etc/useramdisk ] || exit 0 # See how we were called. case "$1" in start) # Start daemons. echo -n "Starting ramdisk: " mkdir -p /mnt/ram /mnt/ram2 # Fix /etc/conf.modules RD_SIZE=`egrep "options rd.*rd_size" /etc/conf.modules | sed "s/^options rd.*rd_size=0*\([^ ]*\).*$/\1/"` if [ $(($RD_SIZE)) -lt 18432 ] ; then cp -f /etc/conf.modules /etc/conf.modules~ TEST1=`grep "options rd" /etc/conf.modules~` TEST2=`echo $TEST1 | grep "rd_size"` if [ -z "$TEST1" ] ; then echo >> /etc/conf.modules echo options rd rd_size=18432 >> /etc/conf.modules elif [ -z "$TEST2" ] ; then sed "s/^options rd\(.*\)/options rd\1 rd_size=18432/" /etc/conf.modules~ > /etc/conf.modules else sed "s/^options rd\(.*\)rd_size=[^ ]*\(.*\)/options rd\1rd_size=18432\2/" /etc/conf.modules~ > /etc/conf.modules fi fi # Make ramdisks if ! grep /etc /proc/mounts > /dev/null ; then dd if=/dev/zero of=/dev/ram bs=1k count=8192 > /dev/null 2>&1 mke2fs -qm0 /dev/ram 8192 > /dev/null 2>&1 ETCDIR=/etc if mount /dev/ram /mnt/ram ; then if [ -d /etc.saveme ] ; then ETCDIR=/etc.saveme fi if cp -dpfR /$ETCDIR/* /mnt/ram ; then umount /dev/ram mount /dev/ram /etc cat /proc/mounts > /etc/mtab rm -f /etc/mtab~ if [ -d /etc.saveme ] ; then rm -rf /etc.saveme fi else umount /dev/ram fi fi fi if ! grep /var /proc/mounts > /dev/null ; then dd if=/dev/zero of=/dev/ram2 bs=1k count=18432 > /dev/null 2>&1 mke2fs -qm0 /dev/ram2 18432 > /dev/null 2>&1 VARDIR=/var if mount /dev/ram2 /mnt/ram2 ; then if [ -d /var.saveme ] ; then VARDIR=/var.saveme fi if cp -dpfR /$VARDIR/* /mnt/ram2 ; then umount /dev/ram2 mount /dev/ram2 /var if [ -d /var.saveme ] ; then rm -rf /var.saveme fi else umount /dev/ram2 fi fi fi hdparm -S5 /dev/hda > /dev/null success "ramdisk startup" touch /var/lock/subsys/ramdisk echo ;; stop) # Stop daemons. echo -n "Shutting down ramdisk: " mkdir -p /mnt/ram /mnt/ram2 if grep /etc /proc/mounts > /dev/null ; then if umount /etc 2> /dev/null ; then mount -r /dev/ram /mnt/ram mkdir -p /etc.new if cp -dpfR /mnt/ram/* /etc.new ; then rm -rf /etc.old mv -f /etc /etc.old mv -f /etc.new /etc fi umount /dev/ram cat /proc/mounts > /etc/mtab rm -f /etc/mtab~ else # Uh-oh... try to save it... echo Filesystem busy, trying to recover... mkdir -p /etc.saveme cp -dpfR /etc/* /etc.saveme fi fi if grep /var /proc/mounts > /dev/null ; then if umount /var 2> /dev/null ; then mount -r /dev/ram2 /mnt/ram2 mkdir -p /var.new if cp -dpfR /mnt/ram2/* /var.new ; then rm -rf /var.old mv -f /var /var.old mv -f /var.new /var fi umount /dev/ram2 else # Uh-oh... try to save it... echo Filesystem busy, trying to recover... mkdir -p /var.saveme cp -dpfR /var/* /var.saveme fi fi success "ramdisk shutdown" rm -f /var/lock/subsys/ramdisk echo ;; status) status ramdisk exit $? ;; restart) $0 stop $1 start exit $? ;; *) echo "Usage: ramdisk {start|stop|status|restart}" exit 1 esac exit 0