]> sourceware.org Git - lvm2.git/blob - scripts/lvm_dump.sh
Add lvm_dump.sh script to create a tarball of debugging info from a system.
[lvm2.git] / scripts / lvm_dump.sh
1 #!/bin/bash
2 #
3 # lvm_dump: This script is used to collect pertinent information for
4 # the debugging of lvm issues.
5 #
6
7 function usage {
8 echo "$0 [options]"
9 echo " -h print this message"
10 echo " -a advanced collection - warning: if lvm is already hung,"
11 echo " then this script may hang as well if -a is used"
12 echo " -m gather LVM metadata from the PVs"
13 echo " -d dump directory to place data in (default=/tmp/lvm_dump.\$\$)"
14 echo " -c if running clvmd, gather cluster data as well"
15 echo ""
16
17 exit 1
18 }
19
20 advanced=0
21 clustered=0
22 metadata=0
23 while getopts :acd:hm opt; do
24 case $opt in
25 a) advanced=1 ;;
26 c) clustered=1 ;;
27 d) lvm_dir=$OPTARG ;;
28 h) usage ;;
29 m) metadata=1 ;;
30 :) echo "$0: $OPTARG requires a value:"; usage ;;
31 \?) echo "$0: unknown option $OPTARG"; usage ;;
32 *) usage ;;
33 esac
34 done
35
36 dir=`mktemp -d -p /tmp lvm_dump.XXXXXX` || exit 2
37 lvm_dir="$dir/lvm_dump"
38
39 echo " "
40 echo "Creating dump directory: $lvm_dir"
41 echo " "
42
43 mkdir -p $lvm_dir || exit 3
44
45 if (( $advanced )); then
46 echo "Gathering LVM volume info..."
47
48 echo " vgscan..."
49 vgscan -vvvv > $lvm_dir/vgscan 2>&1
50
51 echo " pvscan..."
52 pvscan -v >> $lvm_dir/pvscan 2>/dev/null
53
54 echo " lvs..."
55 lvs -a -o +devices >> $lvm_dir/lvs 2>/dev/null
56
57 echo " pvs..."
58 pvs -a -v > $lvm_dir/pvs 2>/dev/null
59
60 echo " vgs..."
61 vgs -v > $lvm_dir/vgs 2>/dev/null
62 fi
63
64 if (( $clustered )); then
65 echo "Gathering cluster info..."
66 echo "STATUS: " > $lvm_dir/cluster_info
67 echo "----------------------------------" >> $lvm_dir/cluster_info
68 cman_tool status >> $lvm_dir/cluster_info
69 echo " " >> $lvm_dir/lvm_info
70
71 echo "SERVICES: " >> $lvm_dir/cluster_info
72 echo "----------------------------------" >> $lvm_dir/cluster_info
73 cman_tool services >> $lvm_dir/cluster_info
74 echo " " >> $lvm_dir/lvm_info
75 fi
76
77 echo "Gathering LVM & device-mapper version info..."
78 echo "LVM VERSION:" > $lvm_dir/versions
79 lvs --version >> $lvm_dir/versions
80 echo "DEVICE MAPPER VERSION:" >> $lvm_dir/versions
81 dmsetup --version >> $lvm_dir/versions
82
83 echo "Gathering dmsetup info..."
84 dmsetup info -c > $lvm_dir/dmsetup_info
85 dmsetup table > $lvm_dir/dmsetup_table
86 dmsetup status > $lvm_dir/dmsetup_status
87
88 echo "Gathering process info..."
89 ps alx > $lvm_dir/ps_info
90
91 echo "Gathering console messages..."
92 tail -n 75 /var/log/messages > $lvm_dir/messages
93
94 echo "Gathering /etc/lvm info..."
95 cp -a /etc/lvm $lvm_dir/lvm
96
97 echo "Gathering /dev listing..."
98 ls -la /dev > $lvm_dir/dev_listing
99
100 if (( $metadata )); then
101 echo "Gathering LVM metadata from Physical Volumes..."
102
103 mkdir -p $lvm_dir/metadata
104
105 for pv in `pvs --noheadings -o name`
106 do
107 echo " $pv"
108 name=`basename $pv`
109 dd if=$pv of=$lvm_dir/metadata/$name bs=512 count=`pvs --noheadings --nosuffix --units s -o pe_start $pv | tr -d \ `
110 done 2>/dev/null
111 fi
112
113 lvm_dump=$lvm_dir.tgz
114 echo "Creating tarball $lvm_dump..."
115 tar czf $lvm_dump $lvm_dir 2>/dev/null
116
117 exit 0
118
This page took 0.503159 seconds and 6 git commands to generate.