-#!/bin/bash
-#
-# lvm_dump: This script is used to collect pertinent information for
-# the debugging of lvm issues.
-#
-
-function usage {
- echo "$0 [options]"
- echo " -h print this message"
- echo " -a advanced collection - warning: if lvm is already hung,"
- echo " then this script may hang as well if -a is used"
- echo " -m gather LVM metadata from the PVs"
- echo " -d dump directory to place data in (default=/tmp/lvm_dump.\$\$)"
- echo " -c if running clvmd, gather cluster data as well"
- echo ""
-
- exit 1
-}
-
-advanced=0
-clustered=0
-metadata=0
-while getopts :acd:hm opt; do
- case $opt in
- a) advanced=1 ;;
- c) clustered=1 ;;
- d) lvm_dir=$OPTARG ;;
- h) usage ;;
- m) metadata=1 ;;
- :) echo "$0: $OPTARG requires a value:"; usage ;;
- \?) echo "$0: unknown option $OPTARG"; usage ;;
- *) usage ;;
- esac
-done
-
-dir=`mktemp -d -p /tmp lvm_dump.XXXXXX` || exit 2
-lvm_dir="$dir/lvm_dump"
-
-echo " "
-echo "Creating dump directory: $lvm_dir"
-echo " "
-
-mkdir -p $lvm_dir || exit 3
-
-if (( $advanced )); then
- echo "Gathering LVM volume info..."
-
- echo " vgscan..."
- vgscan -vvvv > $lvm_dir/vgscan 2>&1
-
- echo " pvscan..."
- pvscan -v >> $lvm_dir/pvscan 2>/dev/null
-
- echo " lvs..."
- lvs -a -o +devices >> $lvm_dir/lvs 2>/dev/null
-
- echo " pvs..."
- pvs -a -v > $lvm_dir/pvs 2>/dev/null
-
- echo " vgs..."
- vgs -v > $lvm_dir/vgs 2>/dev/null
-fi
-
-if (( $clustered )); then
- echo "Gathering cluster info..."
- echo "STATUS: " > $lvm_dir/cluster_info
- echo "----------------------------------" >> $lvm_dir/cluster_info
- cman_tool status >> $lvm_dir/cluster_info
- echo " " >> $lvm_dir/lvm_info
-
- echo "SERVICES: " >> $lvm_dir/cluster_info
- echo "----------------------------------" >> $lvm_dir/cluster_info
- cman_tool services >> $lvm_dir/cluster_info
- echo " " >> $lvm_dir/lvm_info
-fi
-
-echo "Gathering LVM & device-mapper version info..."
-echo "LVM VERSION:" > $lvm_dir/versions
-lvs --version >> $lvm_dir/versions
-echo "DEVICE MAPPER VERSION:" >> $lvm_dir/versions
-dmsetup --version >> $lvm_dir/versions
-
-echo "Gathering dmsetup info..."
-dmsetup info -c > $lvm_dir/dmsetup_info
-dmsetup table > $lvm_dir/dmsetup_table
-dmsetup status > $lvm_dir/dmsetup_status
-
-echo "Gathering process info..."
-ps alx > $lvm_dir/ps_info
-
-echo "Gathering console messages..."
-tail -n 75 /var/log/messages > $lvm_dir/messages
-
-echo "Gathering /etc/lvm info..."
-cp -a /etc/lvm $lvm_dir/lvm
-
-echo "Gathering /dev listing..."
-ls -la /dev > $lvm_dir/dev_listing
-
-if (( $metadata )); then
- echo "Gathering LVM metadata from Physical Volumes..."
-
- mkdir -p $lvm_dir/metadata
-
- for pv in `pvs --noheadings -o name`
- do
- echo " $pv"
- name=`basename $pv`
- dd if=$pv of=$lvm_dir/metadata/$name bs=512 count=`pvs --noheadings --nosuffix --units s -o pe_start $pv | tr -d \ `
- done 2>/dev/null
-fi
-
-lvm_dump=$lvm_dir.tgz
-echo "Creating tarball $lvm_dump..."
-tar czf $lvm_dump $lvm_dir 2>/dev/null
-
-exit 0
-