Wednesday, November 19, 2008

sdparm: a utility for SCSI device

You may have heard of hdparm - a utility for getting info and changing certain parameters for IDE-type hard disk. It can't be used for SCSI hard disk though. So is there any similar utility for scsi hard disk? Yes there's one utility called with almost the same name: sdparm.

You may think that it has the same or at least similar to hdparm. No it is not. Well let's see what we can do with it below.

How to install it?
Ubuntu/Debian: apt-get install sdparm
Mandriva: urpmi sdparm
Redhat: yum install sdparm

A few examples:
list common mode parameters of a disk
sdparm /dev/sda

Sample output:
/dev/sda: COMPAQ BF03697B5A HPB2
Read write error recovery mode page:
AWRE 1 [cha: y, def: 1, sav: 1]
ARRE 1 [cha: y, def: 1, sav: 1]
PER 1 [cha: y, def: 1, sav: 1]
Caching (SBC) mode page:
WCE 0 [cha: y, def: 1, sav: 0]
RCD 0 [cha: y, def: 0, sav: 0]
Control mode page:
SWP 0 [cha: y, def: 0, sav: 0]
Informational exceptions control mode page:
EWASC 1 [cha: y, def: 1, sav: 1]
DEXCPT 0 [cha: y, def: 0, sav: 0]
MRIE 4 [cha: y, def: 4, sav: 4]


To list the designators within the device identification VPD page of a disk
sdparm --inquiry /dev/sda

Sample output:
/dev/sda: COMPAQ BF03697B5A HPB2
Device identification VPD page:
Addressed logical unit:
id_type: EUI-64 based, code_set: Binary
[0x0010b9fd080c1129]
id_type: T10 vendor identification, code_set: ASCII
vendor id: COMPAQ
vendor specific: E20C9MKK


To see all parameters for the caching mode page
sdparm --page=ca /dev/sdc

Sample output:
/dev/sda: COMPAQ BF03697B5A HPB2
Caching (SBC) mode page:
IC 0 [cha: y, def: 0, sav: 0]
ABPF 0 [cha: n, def: 0, sav: 0]
CAP 0 [cha: n, def: 0, sav: 0]
DISC 0 [cha: n, def: 0, sav: 0]
SIZE 0 [cha: y, def: 0, sav: 0]
WCE 0 [cha: y, def: 1, sav: 0]
MF 0 [cha: y, def: 0, sav: 0]
RCD 0 [cha: y, def: 0, sav: 0]
DRRP 0 [cha: y, def: 0, sav: 0]
WRP 0 [cha: y, def: 0, sav: 0]
DPTL 512 [cha: y, def:512, sav:512]
MIPF 256 [cha: y, def:256, sav:256]
MAPF 512 [cha: y, def:512, sav:512]
MAPFC 512 [cha: y, def:512, sav:512]
FSW 0 [cha: n, def: 0, sav: 0]
LBCSS 0 [cha: y, def: 0, sav: 0]
DRA 1 [cha: y, def: 1, sav: 1]
NV_DIS 0 [cha: n, def: 0, sav: 0]
NCS 226 [cha: y, def:226, sav:226]
CSS 0 [cha: y, def: 0, sav: 0]

To set the "Writeback Cache Enable" bit in the current values page
# sdparm --set=WCE /dev/sda

Sample output:
/dev/sda: COMPAQ BF03697B5A HPB2

References:
Cyberciti.biz
sdparm manpage

2 comments:

Sebastian Muñiz said...

I have done a silly script to enable WCE at boot time.
Copy on a file and modify DISKS variable.
-----------------------------------
[root@jarvis ~]# cat /etc/init.d/scsi_write_cache
#!/bin/bash
#
# scsi_write_cache: Enables write cache for scsi disks that supports it
# chkconfig: 2345 95 20
# description: This script enables write cache for scsi disks
# processname: scsi_write_cache

DISKS="/dev/sg0 /dev/sg1"

start() {
echo -n $"Setting up Write Cache Enabled: ";echo
if [ $UID -ne 0 ]; then
RETVAL=1
echo "I need to be root..."
exit
else
for i in $DISKS
do
/usr/bin/sdparm --set WCE=1 $i
done
fi;
echo
return $RETVAL
}

stop() {
echo -n $"Setting up Write Cache Enabled to 0 (batateitor comming :-S): ";echo
if [ $UID -ne 0 ]; then
RETVAL=1
failure
else
for i in $DISKS
do
/usr/bin/sdparm --set WCE=0 $i
done

fi;
echo
return $RETVAL
}

restart() {
echo -n $"Aca no hay restart... reallity.sys corrupted.. restart universe?";echo
}
RETVAL=0

status() {
for i in $DISKS
do
/usr/bin/sdparm --get WCE $i
done
RETVAL=0
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart|reload)
restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart}"
exit 1
esac

exit $?

-----------------------------------
Enjoy!
Tristezo2k

zamri said...

Thanks for the script. Of course, we can always use rc.local for it too.