#!/bin/sh # the following is the LSB init header see # http://www.linux-foundation.org/spec//booksets/LSB-Core-generic/LSB-Core-generic.html#INITSCRCOMCONV # # Flashcache initscript # (C) 2012 Phattanon Duangdara # This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. # To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/. # ### BEGIN INIT INFO # Provides: flashcache # Default-Start: 3 4 5 # Short-Description: Setup flashcache # Description: Setup flashcache ### END INIT INFO # the following is chkconfig init header # # flashcache: initlize flashcacche # # chkconfig: 345 90 10 # Description: Setup flashcache # # Source function library. . /etc/rc.d/init.d/functions SERVICE=flashcache SUBSYS_LOCK="/var/lock/subsys/$SERVICE" FLASHCACHE_LOAD=/sbin/flashcache_load FLASHCACHE_CREATE=/sbin/flashcache_create DMSETUP=`/usr/bin/which dmsetup` LVM=`/usr/bin/which lvm` FLASHCACHE_MODE="writethrough" FLASHCACHE_NAME="cache0+sda3" FLASHCACHE_DEV="flashcache0" FLASHCACHE_CACHE_DEV="/dev/vg_ssd/cache0" FLASHCACHE_BACKEND_DEV="/dev/sda3" FLASHCACHE_LVM= FLASHCACHE_MOUNT= FLASHCACHE_SKIP_THRESH_KB=64 FLASHCACHE_RECLAIM_POLICY=1 test -f /etc/sysconfig/$SERVICE && . /etc/sysconfig/$SERVICE start() { echo -n $"Starting flashcache: " /sbin/modprobe flashcache RETVAL=$? if [ $RETVAL -ne 0 ]; then echo $"Error loading flashcache kernel module" return -1 fi if [ "$FLASHCACHE_MODE" = "writeback" ]; then $FLASHCACHE_LOAD $FLASHCACHE_CACHE_DEV $FLASHCACHE_DEV elif [ "$FLASHCACHE_MODE" = "writearound" ]; then $FLASHCACHE_CREATE -p around $FLASHCACHE_DEV $FLASHCACHE_CACHE_DEV $FLASHCACHE_BACKEND_DEV elif [ "$FLASHCACHE_MODE" = "writethrough" ]; then $FLASHCACHE_CREATE -p thru $FLASHCACHE_DEV $FLASHCACHE_CACHE_DEV $FLASHCACHE_BACKEND_DEV else echo $"FLASHCACHE_MODE not set or invalid" return -1 fi RETVAL=$? [ "$RETVAL" -eq 0 ] && success || failure echo $FLASHCACHE_SKIP_THRESH_KB > /proc/sys/dev/flashcache/$FLASHCACHE_NAME/skip_seq_thresh_kb echo $FLASHCACHE_RECLAIM_POLICY > /proc/sys/dev/flashcache/$FLASHCACHE_NAME/reclaim_policy if [ -n "$FLASHCACHE_LVM" ]; then echo -n $"Starting flashcache LVM $FLASHCACHE_LVM:" $LVM vgscan > /dev/null 2>&1 $LVM vgchange -ay $FLASHCACHE_LVM > /dev/null 2>&1 RETVAL2=$? [ "$RETVAL2" -eq 0 ] && success || failure fi if [ -n "$FLASHCACHE_MOUNT" ]; then echo -n $"Mount flashcache $FLASHCACHE_MOUNT:" /bin/mount $FLASHCACHE_MOUNT RETVAL2=$? [ "$RETVAL2" -eq 0 ] && success || failure fi touch $SUBSYS_LOCK return $RETVAL } stop() { if [ -n "$FLASHCACHE_MOUNT" ]; then echo -n $"Unmount flashcache $FLASHCACHE_MOUNT:" /bin/umount $FLASHCACHE_MOUNT RETVAL2=$? [ "$RETVAL2" -eq 0 ] && success || failure fi if [ -n "$FLASHCACHE_LVM" ]; then echo -n $"Shutdown flashcache LVM $FLASHCACHE_LVM:" $LVM vgchange -an $FLASHCACHE_LVM > /dev/null 2>&1 RETVAL2=$? [ "$RETVAL2" -eq 0 ] && success || failure fi echo -n $"Stopping flashcache: " $DMSETUP remove flashcache0 RETVAL=$? [ "$RETVAL" -eq 0 ] && success || failure rm -f $SUBSYS_LOCK return $RETVAL } status() { [ -f $SUBSYS_LOCK ] && echo "Flashcache started" || echo "Flashcache not started"; $DMSETUP status $FLASHCACHE_DEV exit $? } restart() { stop start } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) status ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 2 ;; esac exit $RETVAL