Drop grml-postfix
[grml-scripts.git] / usr_sbin / prepare_ramdisk.sh
1 #!/bin/zsh
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 ################################################################################
8
9 if [ $(id -u) != 0 ] ; then
10   echo "Error: $0 requires root permissions. Exiting."
11   exit 1
12 fi
13
14 setopt nonomatch
15
16 usage(){
17   echo "Usage: $0 <directory> <start|stop>"
18 }
19
20 if ! [ -n "$1" -a -n "$2" ] ; then
21   usage
22   exit 1
23 fi
24
25 DIRECTORY="$1"
26 FILENAME=$(echo $DIRECTORY | sed 's#/#_#g')
27 CACHE_FILE="/ramdisk_cache/$FILENAME"
28 CACHE_FILE_SIZE=64
29
30 prepare_start () {
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"
35   fi
36
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 && \
41       mkdir $DIRECTORY
42
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."
51     else
52       echo "Error: $DIRECTORY already mounted as loopback device. Exiting."
53     fi
54    else
55     echo "Error: $DIRECTORY does not exist. Exiting."
56     exit 1
57    fi
58   else
59    echo "Error: $DIRECTORY already mounted loop back."
60   fi
61 }
62
63 prepare_stop () {
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
69       rmdir $DIRECTORY
70       mv $DIRECTORY.tmpfile/ $DIRECTORY
71       echo done
72     else
73       echo "error [while unmounting ${DIRECTORY}]"
74     fi
75   else
76     echo "Error: $DIRECTORY not mounted."
77   fi
78 }
79
80 case "$2" in
81   start)
82      prepare_start || exit 1
83      ;;
84   stop)
85      prepare_stop || exit 1
86      ;;
87   *)
88      usage
89      exit 1
90 esac
91
92 exit 0
93
94 ## END OF FILE #################################################################