2 # Filename: prepare_ramdisk.sh
3 # Purpose: setup a ramdisk
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 Mai 27 15:12:55 CEST 2006 [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
26 [ -d /UNIONFS ] && UNIONFS="/UNIONFS" # running from live-CD?
29 FILENAME=$(echo $DIRECTORY | sed 's#/#_#g')
30 CACHE_FILE="/ramdisk_cache/$FILENAME"
34 if ! mount | grep -q "tmpfs on /ramdisk_cache" ; then
35 echo -n "Setting up ramdisk /ramdisk_cache: "
36 [ -d /ramdisk_cache ] || mkdir /ramdisk_cache
37 mount -t tmpfs tmpfs /ramdisk_cache && echo "done"
40 if ! mount | grep -q "${DIRECTORY}.*loop" ; then
41 if [ -d $DIRECTORY ] ; then
42 if ! mount | grep -q "loop.*${DIRECTORY}" ; then
43 mv $DIRECTORY/ $DIRECTORY.tmpfile && \
46 echo -n "Setting up cachefile $CACHE_FILE for $DIRECTORY: "
47 dd if=/dev/zero of=${CACHE_FILE} bs=1M count=${CACHE_FILE_SIZE} \
48 seek=${CACHE_FILE_SIZE} &>/dev/null && \
49 mkfs.ext2 -F ${CACHE_FILE} &>/dev/null && \
50 mount -o loop ${CACHE_FILE} $DIRECTORY && \
51 cp -a $DIRECTORY.tmpfile/* $DIRECTORY &>/dev/null
52 cp -a $DIRECTORY.tmpfile/.* $DIRECTORY &>/dev/null
53 echo "done" || echo "failed."
55 echo "Error: $DIRECTORY already mounted as loopback device. Exiting."
58 echo "Error: $DIRECTORY does not exist. Exiting."
62 echo "Error: $DIRECTORY already mounted loop back."
67 if mount | grep -q $DIRECTORY ; then
68 echo -n "Unmounting cachefile ${CACHE_FILE}: "
69 cp -a $DIRECTORY/* $DIRECTORY.tmpfile/ &>/dev/null
70 cp -a $DIRECTORY/.* $DIRECTORY.tmpfile/ &>/dev/null
71 if umount $DIRECTORY ; then
73 # LOOPDEVICE=$(losetup -a | grep $CACHE_FILE | awk -F: '{print $1}')
74 # losetup -d $LOOPDEVICE && echo "done" || echo "failed"
75 mv $DIRECTORY.tmpfile/ $DIRECTORY
77 echo "Error when unmounting $DIRECTORY."
80 echo "Error: $DIRECTORY not mounted."
86 prepare_start || exit 1
89 prepare_stop || exit 1
98 ## END OF FILE #################################################################