#!/usr/bin/env bash # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. ######################################################################################### # # Given a WWID, cleanup/remove any multipath and devices associated with this WWID. This # may not always have lasting result because if the storage array still has the volume # visable to the host, it may be rediscovered. The cleanupStaleMaps.sh script should # catch those cases # ######################################################################################### WWID=${1:?"WWID required"} WWID=$(echo $WWID | tr '[:upper:]' '[:lower:]') echo "$(date): Removing ${WWID}" systemctl is-active multipathd || systemctl restart multipathd || { echo "$(date): Multipathd is NOT running and cannot be started. This must be corrected before this host can access this storage volume." logger -t "CS_SCSI_VOL_REMOVE" "${WWID} cannot be disconnected from this host because multipathd is not currently running and cannot be started" exit 1 } # first get dm- name DM_NAME=$(ls -lrt /dev/mapper/3${WWID} | awk '{ print $NF }' | awk -F'/' '{print $NF}') SLAVE_DEVS="" if [ -z "${DM_NAME}" ]; then logger -t CS_SCSI_VOL_REMOVE "${WWID} has no active multimap so no removal performed" logger -t CS_SCSI_VOL_REMOVE "WARN: dm name could not be found for ${WWID}" dmsetup remove /dev/mapper/*${WWID} logger -t CS_SCSI_VOL_REMOVE "${WWID} removal via dmsetup remove /dev/mapper/${WWID} finished with return code $?" else # now look for slave devices and save for deletion for dev in $(ls /sys/block/${DM_NAME}/slaves/ 2>/dev/null); do SLAVE_DEVS="${SLAVE_DEVS} ${dev}" done fi # delete the path map last multipath -f 3${WWID} # now delete slave devices # https://bugzilla.redhat.com/show_bug.cgi?id=1949369 if [ ! -z "${SLAVE_DEVS}" ]; then for dev in ${SLAVE_DEVS}; do multipathd del path /dev/${dev} echo "1" > /sys/block/${dev}/device/delete logger -t CS_SCSI_VOL_REMOVE "${WWID} removal of device ${dev} complete" done fi logger -t CS_SCSI_VOL_REMOVE "${WWID} successfully purged from multipath along with slave devices" echo "$(date): ${WWID} removed" exit 0