Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.1
s390-tools
mkdump.sh
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File mkdump.sh of Package s390-tools
#!/bin/bash # # mkdump # # Copyright (c) 2004 Hannes Reinecke, SuSE AG # # Preparing a disk device for use as S/390 dump device # # Return values: # 0 Success # 11 Invalid or unuseable disk (fatal) # 12 Minor error, can be corrected with -f # 13 Missing support programs # other Support program failed # DEBUG= FORCE= VOLID=/sbin/vol_id MKFS=/sbin/mke2fs SFDISK=/sbin/sfdisk FDASD=/sbin/fdasd DASDVIEW=/sbin/dasdview DASDFMT=/sbin/dasdfmt ZIPL=/sbin/zipl UDEVINFO=/sbin/udevinfo MNTPOINT=/var/run/mkdump.$PPID # Check for installed programs if [ ! -x ${VOLID} ]; then echo "vol_id not found, please install udev" exit 13 fi if [ ! -x ${SFDISK} ]; then echo "${SFDISK} not found, please install" exit 13 fi if [ ! -x ${ZIPL} ]; then echo "zipl not found, please install s390-tools" exit 13 fi if [ ! -x ${UDEVINFO} ]; then UDEVINFO=/usr/bin/udevinfo if [ ! -x ${UDEVINFO} ]; then UDEVINFO=false fi fi # # Subroutines # check_devsize() { local geomstr local size local mazsize geomstr=$(${SFDISK} -l $1 | grep of) if [ -z "$geomstr" ]; then echo "-1" else set -- $geomstr maxsize=`echo "2 k 10 1024 * $5 1024 / / 0.99 + 0 k 1 / p q" |dc` echo "$maxsize" fi } check_partitions() { local device local num_part num_part=0 device=${1#/dev/} while read maj min size dev; do case "$dev" in $device*) if [ "$dev" != "$device" ]; then num_part=$(expr $num_part + 1) fi ;; esac done < /proc/partitions echo "$num_part" } prepare_dasddump() { local device local fmtstr local err device=$1 fmtstr=`${DASDVIEW} -x -f $device | grep ^format | cut -f 3` case "$fmtstr" in NOT*) echo "Unformatted disk, formatting." ${ECHO} ${DASDFMT} -b 4096 -y -f $device err=$? if [ $err -ne 0 ]; then echo "dasdfmt failed with $err" return $err fi ;; LDL*) echo "Linux disk layout, reformatting." ${ECHO} ${DASDFMT} -b 4096 -y -f $device err=$? if [ $err -ne 0 ]; then echo "dasdfmt failed with $err" return $err fi ;; CDL*) echo "Compatible layout, ok to use." ;; *) echo "Unknown layout ($fmtstr), cannot use disk." return 11 ;; esac num_part=$(check_partitions $device) if [ "$num_part" -gt 1 -a -z "$FORCE" ]; then echo "$num_part partitions detected, cannot use disk." return 12 fi if [ "$FORCE" -o "$num_part" -lt 1 ]; then echo "Re-partitioning disk." ${ECHO} ${FDASD} -a $device err=$? if [ $err -ne 0 ]; then echo "FDASD failed with $err" return $err fi fi # Wait for udev to finish processing /sbin/udevsettle if [ -z "$FORCE" ]; then volid_result=$($ECHO $VOLID -t ${device}1) if [ -n "$volid_result" ]; then echo "Device ${device}1 already contains a filesystem of type $volid_result" return 12 fi fi return 0 } install_dasddump() { local device local err device=$1 echo "Creating dump record" ${ECHO} ${ZIPL} -n -d ${device}1 err=$? if [ $err -ne 0 ]; then echo "FAILED with error code $err" fi return $err } prepare_zfcpdump() { local device local err device=$1 num_part=$(check_partitions $device) max_size=$(check_devsize $device) if [ -z "$DEBUG" -a "$max_size" -lt 0 ]; then echo "Cannot get disk size information" return 11 fi if [ "$num_part" -eq 1 -a -z "$FORCE" ]; then echo "$num_part partition detected, cannot use disk." return 12 fi if [ "$num_part" -gt 2 -a -z "$FORCE" ]; then echo "$num_part partitions detected, cannot use disk." return 12 fi if [ "$FORCE" -o "$num_part" -lt 1 ]; then echo "Re-partitioning disk ${device}" ${ECHO} ${SFDISK} ${device} >/dev/null 2>&1 <<EOF 0,$max_size,L,* $max_size,,L ; ; EOF err=$? if [ $err -ne 0 ]; then echo "sfdisk failed with $err" return $err fi fi # Wait for udev to finish processing /sbin/udevsettle volid_result=`$ECHO $VOLID -t ${device}1` if [ "$volid_result" != "ext2" -a -z "$FORCE" ]; then echo "Fstype for Device ${device}1 is $volid_result, cannot use disk." return 12 fi if [ "$FORCE" ]; then echo -n "Formatting device ${device}1: " ${ECHO} ${MKFS} -q ${device}1 err=$? if [ $err -eq 0 ]; then echo "ok" else echo "failed with $err" return $err fi fi volid_result=`$ECHO $VOLID -t ${device}2` if [ "$volid_result" != "ext2" -a -z "$FORCE" ]; then echo "Fstype for Device ${device}2 is $volid_result, cannot use disk." return 11 fi if [ "$FORCE" ]; then echo -n "Formatting device ${device}2: " ${ECHO} ${MKFS} -q ${device}2 err=$? if [ $err -eq 0 ]; then echo "ok" else echo "failed with $err" return $err fi fi return 0 } install_zfcpdump() { local device local err device=$1 echo -n "Mounting device: " ${ECHO} mkdir -p ${MNTPOINT} ${ECHO} mount ${device}1 ${MNTPOINT} err=$? if [ $err -eq 0 ]; then echo "ok" else echo "failed with $err" return $err fi [ -d ${MNTPOINT}/boot ] || ${ECHO} mkdir ${MNTPOINT}/boot [ -d ${MNTPOINT}/boot/zipl ] || ${ECHO} mkdir ${MNTPOINT}/boot/zipl echo "Creating dump record" ${ECHO} ${ZIPL} -D ${device}2 -t ${MNTPOINT}/boot/zipl err=$? if [ $err -ne 0 ]; then echo "FAILED with error code $err" fi ${ECHO} umount ${MNTPOINT} ${ECHO} rmdir ${MNTPOINT} return $err } usage() { cat <<EOF Prepare a device for use as S/390 dump device. Supported devices are ECKD DASD and zfcp disks. If the device is found to be already formatted and/or configured, the script will refuse to install the dump record unless the -f switch ('force') is given. mkdump [options] device options: -d Debug mode, do not execute programs -f Force installation of dump record -h This text EOF exit 1 } # # main script program # while getopts :fh a ; do case $a in d) DEBUG=1 ;; f) FORCE=1 ;; h) usage exit 0 ;; t) TEST=1 ;; esac done shift $(expr $OPTIND - 1) if [ "$DEBUG" ]; then ECHO=echo fi if [ $# -lt 1 ] then usage fi DEVICE=$1 # Check whether the given device is valid DEVPATH=`$UDEVINFO -q path -n ${DEVICE#/dev/}` err=$? if [ $err -eq 1 ]; then DEVPATH="/block/${DEVICE#/dev/}" if [ ! -d "/sys$DEVPATH" ]; then echo "Device $DEVICE is not found" echo "either the device does not exist or refers to a partition" exit 11 fi DEVNODE=${DEVICE#/dev/} elif [ $err -eq 0 ]; then DEVNODE=$($UDEVINFO -q name -p $DEVPATH) DEVICE=/dev/$DEVNODE fi if [ ! -d "/sys$DEVPATH/device" ]; then echo "Invalid dump device $DEVICE (no device link)" exit 11 fi # Check for DASD if [ -r "/sys$DEVPATH/device/discipline" ]; then read DEVTYPE < "/sys$DEVPATH/device/discipline" # Only newer zipl-versions support dump to FBA disks if [ "$DEVTYPE" = "FBA" ]; then echo "Dump to FBA disks not yet supported" exit 11 fi fi # Check for zfcp if [ -e "/sys$DEVPATH/device/hba_id" ]; then read DEVTYPE < "/sys$DEVPATH/device/type" # SCSI type '0' is disks; we can't really dump to anything else if [ "$DEVTYPE" -eq 0 ]; then DEVTYPE="ZFCP" else DEVTYPE= fi fi if [ -z "$DEVTYPE" ]; then echo Unsupported disk type exit 11 fi if [ "$DEVTYPE" = "ZFCP" ]; then if [ -d ${MNTPOINT} ]; then echo "Mountpoint $MNTPOINT exists, aborting" exit 13 fi prepare_zfcpdump $DEVICE err=$? if [ $err -ne 0 ]; then exit $err fi install_zfcpdump $DEVICE err=$? if [ $err -ne 0 ]; then exit $err fi else prepare_dasddump $DEVICE err=$? if [ $err -ne 0 ]; then exit $err fi install_dasddump $DEVICE err=$? if [ $err -ne 0 ]; then exit $err fi fi exit 0
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor