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 ################################################################################
10 echo "Error: $0 requires root permissions. Exiting."
17 echo "Usage: $0 <directory> <start|stop>"
20 if ! [ -n "$1" -a -n "$2" ] ; then
26 FILENAME=$(echo $DIRECTORY | sed 's#/#_#g')
27 CACHE_FILE="/ramdisk_cache/$FILENAME"
31 if ! mount | grep -q "tmpfs on /ramdisk_cache" ; then
32 echo -n "Setting up ramdisk /ramdisk_cache: "
33 [ -d /ramdisk_cache ] || mkdir /ramdisk_cache
34 mount -t tmpfs tmpfs /ramdisk_cache && echo "done"
37 if ! mount | grep -q "${DIRECTORY}.*loop" ; then
38 if [ -d "$DIRECTORY" ] ; then
39 if ! mount | grep -q "loop.*${DIRECTORY}" ; then
40 mv $DIRECTORY/ $DIRECTORY.tmpfile && \
43 echo -n "Setting up cachefile $CACHE_FILE for $DIRECTORY: "
44 dd if=/dev/zero of=${CACHE_FILE} bs=1M count=${CACHE_FILE_SIZE} \
45 seek=${CACHE_FILE_SIZE} &>/dev/null && \
46 mkfs.ext2 -F ${CACHE_FILE} &>/dev/null && \
47 mount -o loop ${CACHE_FILE} $DIRECTORY && \
48 cp -a $DIRECTORY.tmpfile/* $DIRECTORY &>/dev/null
49 cp -a $DIRECTORY.tmpfile/.* $DIRECTORY &>/dev/null
50 echo "done" || echo "failed."
52 echo "Error: $DIRECTORY already mounted as loopback device. Exiting."
55 echo "Error: $DIRECTORY does not exist. Exiting."
59 echo "Error: $DIRECTORY already mounted loop back."
64 if mount | grep -q $DIRECTORY ; then
65 echo -n "Unmounting cachefile ${CACHE_FILE}: "
66 cp -a $DIRECTORY/* $DIRECTORY.tmpfile/ &>/dev/null
67 cp -a $DIRECTORY/.* $DIRECTORY.tmpfile/ &>/dev/null
68 if umount $DIRECTORY ; then
70 mv $DIRECTORY.tmpfile/ $DIRECTORY
73 echo "error [while unmounting ${DIRECTORY}]"
76 echo "Error: $DIRECTORY not mounted."
82 prepare_start || exit 1
85 prepare_stop || exit 1
94 ## END OF FILE #################################################################