#!/bin/sh
+[ -f /etc/sysconfig/hdparm ] || exit 0
+
+blockdevs=$(awk -F= '!/^#/ && !/^$/ {if ($2) print $1}' /etc/sysconfig/hdparm)
+if [ -z "$blockdevs" ]; then
+ exit 0
+fi
+
# Source function library
. /etc/rc.d/init.d/functions
-# Get service config
-[ -f /etc/sysconfig/hdparm ] && . /etc/sysconfig/hdparm
-
-while read major minor blocks name ; do
- if [ "$minor" = "0" -o "$minor" = "64" ] ; then
- case "$major" in
- 3)
- [ $minor = 0 ] && drive="hda"
- [ $minor = 64 ] && drive="hdb"
- ;;
- 22)
- [ $minor = 0 ] && drive="hdc"
- [ $minor = 64 ] && drive="hdd"
- ;;
- 33)
- [ $minor = 0 ] && drive="hde"
- [ $minor = 64 ] && drive="hdf"
- ;;
- 34)
- [ $minor = 0 ] && drive="hdg"
- [ $minor = 64 ] && drive="hdh"
- ;;
- 56)
- [ $minor = 0 ] && drive="hdi"
- [ $minor = 64 ] && drive="hdj"
- ;;
- 57)
- [ $minor = 0 ] && drive="hdk"
- [ $minor = 64 ] && drive="hdl"
- ;;
- 88)
- [ $minor = 0 ] && drive="hdm"
- [ $minor = 64 ] && drive="hdn"
- ;;
- 89)
- [ $minor = 0 ] && drive="hdo"
- [ $minor = 64 ] && drive="hdp"
- ;;
- 90)
- [ $minor = 0 ] && drive="hdq"
- [ $minor = 64 ] && drive="hdr"
- ;;
- 91)
- [ $minor = 0 ] && drive="hds"
- [ $minor = 64 ] && drive="hdt"
- ;;
- esac
- eval PARAMS=\$HDPARM_${drive}
- if [ -n "${PARAMS}" ] ; then
- show "Setting parameters for drive %s" "$drive"
- busy
- /sbin/hdparm ${PARAMS} /dev/$drive
- deltext
- ok
+# Source hdparm configuration.
+. /etc/sysconfig/hdparm
+
+for var in $blockdevs; do
+ drive=${var#HDPARM_}
+
+ # check if it is some ID
+ if [ -L /dev/disk/by-id/ata-$drive ]; then
+ dev=$(readlink -f /dev/disk/by-id/ata-$drive)
+ elif [ -L /dev/disk/by-id/scsi-$dev ]; then
+ dev=$(readlink -f /dev/disk/by-id/scsi-$drive)
+ else
+ dev=$drive
fi
- fi
-done < /proc/partitions
+
+ # strip /dev
+ dev=${dev#/dev/}
+
+ if [ -L "/proc/ide/$dev" -o -d "/sys/block/$dev" ]; then
+ eval PARAMS=\$$var
+ if [ -n "$PARAMS" ]; then
+ show "Setting parameters for drive %s (%s)" "$drive" "$PARAMS"
+ busy
+ /sbin/hdparm $PARAMS /dev/$dev
+ ok
+ fi
+ fi
+done
+
exit 0