85 lines
2.3 KiB
Bash
85 lines
2.3 KiB
Bash
#!/bin/sh
|
|
#
|
|
# Copyright (C) 2000-2018 Kern Sibbald
|
|
# License: BSD 2-Clause; see file LICENSE-FOSS
|
|
#
|
|
# Bacula interface to get worm status of tape
|
|
#
|
|
# isworm %l (control device name)
|
|
#
|
|
# Typical output:
|
|
# sdparm --page=0x1D -f /dev/sg0
|
|
# /dev/st0: HP Ultrium 5-SCSI I5AW [tape]
|
|
# Medium configuration (SSC) mode page:
|
|
# WORMM 1 [cha: n, def: 1, sav: 1]
|
|
# WMLR 1 [cha: n, def: 1, sav: 1]
|
|
# WMFR 2 [cha: n, def: 2, sav: 2]
|
|
#
|
|
# Where WORMM is worm mode
|
|
# WMLR is worm mode label restrictions
|
|
# 0 - No blocks can be overwritten
|
|
# 1 - Some types of format labels may not be overwritten
|
|
# 2 - All format labels can be overwritten
|
|
# WMFR is worm mode filemark restrictions
|
|
# 0-1 - Reserved
|
|
# 2 - Any number of filemarks immediately preceding EOD can be
|
|
# overwritten except file mark closest to BOP (beginning of
|
|
# partition).
|
|
# 3 - Any number of filemarks immediately preceding the EOD
|
|
# can be overwritten
|
|
# 4-FF - Reserved
|
|
#
|
|
|
|
if [ x$1 = x ] ; then
|
|
echo "First argument missing. Must be device control name."
|
|
exit 1
|
|
fi
|
|
|
|
sdparm=`which sdparm`
|
|
if [ x${sdparm} = x ] ; then
|
|
echo "sdparm program not found, but is required."
|
|
exit 0
|
|
fi
|
|
|
|
#
|
|
# This should be the correct way to determine if the tape is WORM
|
|
# but it does not work for mhvtl. Comment out the next 5 lines
|
|
# and the code that follows will detect correctly on mhtvl.
|
|
#
|
|
worm=`$sdparm --page=0x1D -f $1 |grep " *WORMM"|cut -b12-16|sed "s:^ *::"`
|
|
if [ $? = 0 ] ; then
|
|
echo $worm
|
|
exit 0
|
|
fi
|
|
|
|
tapeinfo=`which tapeinfo`
|
|
if [ x${tapeinfo} = x ] ; then
|
|
echo "tapeinfo program not found, but is required."
|
|
exit 1
|
|
fi
|
|
|
|
#
|
|
# Unfortunately IBM and HP handle the Medium Type differently,
|
|
# so we detect the vendor and get the appropriate Worm flag.
|
|
#
|
|
vendor=`$tapeinfo -f $1|grep "^Vendor ID:"|cut -b13-15`
|
|
if [ x$vendor = xHP ] ; then
|
|
worm=`$tapeinfo -f $1|grep "^Medium Type: 0x"|cut -b16-16`
|
|
echo $worm
|
|
exit 0
|
|
fi
|
|
|
|
if [ x$vendor = xIBM ] ; then
|
|
worm=`$tapeinfo -f $1|grep "^Medium Type: 0x"|cut -b17-17`
|
|
if [ x$worm = xc ]; then
|
|
echo "1"
|
|
exit 0
|
|
fi
|
|
if [ x$worm = xC ]; then
|
|
echo "1"
|
|
exit 0
|
|
fi
|
|
fi
|
|
echo "0"
|
|
exit 0
|