2 # Filename: prepare_ramdisk.sh
3 # Purpose: set up a ramdisk of a selected directory
4 # Authors: grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
5 # Bug-Reports: see http://grml.org/bugs/
6 # License: This file is licensed under the GPL v2.
7 # Latest change: Sam Okt 06 13:23:35 CEST 2007 [mika]
8 ################################################################################
10 if [ $UID != 0 ]; then
11 echo "Error: $0 requires root permissions. Exiting."
18 echo "Usage: $0 <directory> <start|stop>"
21 if ! [ -n "$1" -a -n "$2" ] ; then
27 FILENAME=$(echo $DIRECTORY | sed 's#/#_#g')
28 CACHE_FILE="/ramdisk_cache/$FILENAME"
32 if ! mount | grep -q "tmpfs on /ramdisk_cache" ; then
33 echo -n "Setting up ramdisk /ramdisk_cache: "
34 [ -d /ramdisk_cache ] || mkdir /ramdisk_cache
35 mount -t tmpfs tmpfs /ramdisk_cache && echo "done"
38 if ! mount | grep -q "${DIRECTORY}.*loop" ; then
39 if [ -d "$DIRECTORY" ] ; then
40 if ! mount | grep -q "loop.*${DIRECTORY}" ; then
41 mv $DIRECTORY/ $DIRECTORY.tmpfile && \
44 echo -n "Setting up cachefile $CACHE_FILE for $DIRECTORY: "
45 dd if=/dev/zero of=${CACHE_FILE} bs=1M count=${CACHE_FILE_SIZE} \
46 seek=${CACHE_FILE_SIZE} &>/dev/null && \
47 mkfs.ext2 -F ${CACHE_FILE} &>/dev/null && \
48 mount -o loop ${CACHE_FILE} $DIRECTORY && \
49 cp -a $DIRECTORY.tmpfile/* $DIRECTORY &>/dev/null
50 cp -a $DIRECTORY.tmpfile/.* $DIRECTORY &>/dev/null
51 echo "done" || echo "failed."
53 echo "Error: $DIRECTORY already mounted as loopback device. Exiting."
56 echo "Error: $DIRECTORY does not exist. Exiting."
60 echo "Error: $DIRECTORY already mounted loop back."
65 if mount | grep -q $DIRECTORY ; then
66 echo -n "Unmounting cachefile ${CACHE_FILE}: "
67 cp -a $DIRECTORY/* $DIRECTORY.tmpfile/ &>/dev/null
68 cp -a $DIRECTORY/.* $DIRECTORY.tmpfile/ &>/dev/null
69 if umount $DIRECTORY ; then
71 mv $DIRECTORY.tmpfile/ $DIRECTORY
74 echo "error [while unmounting ${DIRECTORY}]"
77 echo "Error: $DIRECTORY not mounted."
83 prepare_start || exit 1
86 prepare_stop || exit 1
95 ## END OF FILE #################################################################