reverted rev 82
[grml-scripts.git] / usr_sbin / prepare_ramdisk.sh
1 #!/bin/zsh
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 ################################################################################
9
10 if [ $UID != 0 ]; then
11   echo "Error: $0 requires root permissions. Exiting."
12   exit 1
13 fi
14
15 setopt nonomatch
16
17 usage(){
18   echo "Usage: $0 <directory> <start|stop>"
19 }
20
21 if ! [ -n "$1" -a -n "$2" ] ; then
22   usage
23   exit 1
24 fi
25
26 [ -d /UNIONFS ] && UNIONFS="/UNIONFS" # running from live-CD?
27
28 DIRECTORY="$1"
29 FILENAME=$(echo $DIRECTORY | sed 's#/#_#g')
30 CACHE_FILE="/ramdisk_cache/$FILENAME"
31 CACHE_FILE_SIZE=64
32
33 prepare_start () {
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"
38   fi
39
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 && \
44       mkdir $DIRECTORY
45
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."
54     else
55       echo "Error: $DIRECTORY already mounted as loopback device. Exiting."
56     fi
57    else
58     echo "Error: $DIRECTORY does not exist. Exiting."
59     exit 1
60    fi
61   else
62    echo "Error: $DIRECTORY already mounted loop back."
63   fi
64 }
65
66 prepare_stop () {
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
72       rmdir $DIRECTORY
73 #      LOOPDEVICE=$(losetup -a | grep $CACHE_FILE | awk -F: '{print $1}')
74 #      losetup -d $LOOPDEVICE && echo "done" || echo "failed"
75       mv $DIRECTORY.tmpfile/ $DIRECTORY
76     else
77       echo "Error when unmounting $DIRECTORY."
78     fi
79   else
80     echo "Error: $DIRECTORY not mounted."
81   fi
82 }
83
84 case "$2" in
85   start)
86      prepare_start || exit 1
87      ;;
88   stop)
89      prepare_stop || exit 1
90      ;;
91   *)
92      usage
93      exit 1
94 esac
95
96 exit 0
97
98 ## END OF FILE #################################################################