1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-10-28 20:25:52 +03:00
lvm2/scripts/lvm_dump.sh

119 lines
2.8 KiB
Bash
Executable File

#!/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