Skip to content

Instantly share code, notes, and snippets.

@openit
Created September 21, 2016 16:23
Show Gist options
  • Save openit/e84931ddf057de753d93f7fbf51bea11 to your computer and use it in GitHub Desktop.
Save openit/e84931ddf057de753d93f7fbf51bea11 to your computer and use it in GitHub Desktop.
readahead initscript
#!/bin/bash
#
# readahead set readhead for specific block devices
#
# chkconfig: 35 85 15
# description: set readhead for specific block devices
# processname:
#
### BEGIN INIT INFO
# Provides: readahead
# Short-Description: set readahead for specific block devices
# Description: Use blockdev utility to set readahead for specific block devices
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions
# Path to the blockdev binary.
binary=/sbin/blockdev
RETVAL=0
# initialize dev_list array
dev_list=()
# append devices below with format:
# dev_list+=("/path/to/device|readahead_val")
dev_list+=("/dev/vdb|32")
dev_list+=("/dev/dm-2|32")
start() {
for dev in "${dev_list[@]}"
do
device=${dev%%|*}
devicename=${device##*/}
value=${dev##*|}
store_file="/var/run/readahead-${devicename}.default"
# if readahead is already set to preferred value,
# skip to next iteration iteration
current_value=$(${binary} --getra ${device})
if [ ${current_value} = ${value} ]; then
echo "preferred readahead already set ${device}:${value}"
continue
fi
# store the current readahead value
cmd="${binary} --getra ${device} > $store_file"
action "storing current readahead value for ${device}:" eval "${cmd}"
RETVAL=$?
# if we couldnt store the current value, skip to next iteration
if [ $RETVAL != 0 ]; then
continue
fi
# set new the preferred readahead
cmd="${binary} --setra ${value} ${device}"
action "setting readahead for ${device} to ${value}:" eval "${cmd}"
RETVAL=$?
if [ $RETVAL = 0 ]; then
logger -t readahead "set readahead for ${device} to ${value}"
fi
done
}
stop() {
for dev in "${dev_list[@]}"
do
device=${dev%%|*}
devicename=${device##*/}
store_file="/var/run/readahead-${devicename}.default"
# if we can open $store_file, continue
if [ -f ${store_file} ]; then
value=$(cat $store_file)
cmd="${binary} --setra ${value} ${device}"
action "restoring default readahead value for ${device}:" eval "${cmd}"
RETVAL=$?
if [ $RETVAL = 0 ]; then
logger -t 'readahead' "set readahead for ${device} to ${value}"
rm -f ${store_file}
fi
else
echo "could not open ${store_file}, unable to restore default value."
fi
done
}
status() {
for dev in "${dev_list[@]}"
do
device=${dev%%|*}
devicename=${device##*/}
cmd="${binary} --getra ${device}"
echo "current readahead value for ${device}: " $(eval "${cmd}")
done
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
*)
echo $"Usage: $prog {start|stop|status|help}"
RETVAL=2
esac
exit $RETVAL
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment