[lvm-devel] LVM2 ./WHATS_NEW scripts/lvm_dump.sh
agk at sourceware.org
agk at sourceware.org
Thu Nov 23 17:23:14 UTC 2006
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: agk at sourceware.org 2006-11-23 17:23:14
Modified files:
. : WHATS_NEW
scripts : lvm_dump.sh
Log message:
Improve lvm_dump.sh robustness.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.506&r2=1.507
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/scripts/lvm_dump.sh.diff?cvsroot=lvm2&r1=1.2&r2=1.3
--- LVM2/WHATS_NEW 2006/11/21 22:41:55 1.506
+++ LVM2/WHATS_NEW 2006/11/23 17:23:14 1.507
@@ -1,5 +1,6 @@
Version 2.02.16 -
====================================
+ Improve lvm_dump.sh robustness.
Update lvm2create_initrd to support gentoo.
Version 2.02.15 - 21st November 2006
--- LVM2/scripts/lvm_dump.sh 2006/11/16 16:44:48 1.2
+++ LVM2/scripts/lvm_dump.sh 2006/11/23 17:23:14 1.3
@@ -1,8 +1,41 @@
#!/bin/bash
-#
+# we use some bash-isms (getopts?)
+
# lvm_dump: This script is used to collect pertinent information for
# the debugging of lvm issues.
-#
+
+# following external commands are used throughout the script
+# which, echo and test are internal in bash at least
+MKDIR=mkdir # need -p
+TAR=tar # need czf
+RM=rm # need -rf
+CP=cp
+TAIL=tail # we need -n
+LS=ls # need -la
+PS=ps # need alx
+SED=sed
+DD=dd
+CUT=cut
+DATE=date
+BASENAME=basename
+
+# user may override lvm and dmsetup location by setting LVM_BINARY
+# and DMSETUP_BINARY respectively
+LVM=${LVM_BINARY-lvm}
+DMSETUP=${DMSETUP_BINARY-dmsetup}
+
+die() {
+ code=$1; shift
+ echo "$@" 1>&2
+ exit $code
+}
+
+# which should error out if the binary is not executable, although i
+# am not sure we can rely on this
+which $LVM >& /dev/null || die 2 "Fatal: could not find lvm binary '$LVM'"
+test -x `which $LVM` || die 2 "Fatal: lvm binary '$LVM' not executable"
+which $DMSETUP >& /dev/null || die 2 "Fatal: could not find dmsetup binary '$DMSETUP'"
+test -x `which $DMSETUP` || die 2 "Fatal: dmsetup binary '$DMSETUP' not executable"
function usage {
echo "$0 [options]"
@@ -34,23 +67,16 @@
esac
done
-DATE=`/bin/date -u +%G%m%d%k%M%S | /usr/bin/tr -d ' '`
+NOW=`$DATE -u +%G%m%d%k%M%S | /usr/bin/tr -d ' '`
if test -n "$userdir"; then
dir="$userdir"
else
- dirbase="lvmdump-$HOSTNAME-$DATE"
+ dirbase="lvmdump-$HOSTNAME-$NOW"
dir="$HOME/$dirbase"
fi
-if test -e $dir; then
- echo $dir already exists, aborting >&2
- exit 2
-fi
-
-if ! mkdir -p $dir; then
- echo Could not create $dir >&2
- exit 3
-fi
+test -e $dir && die 3 "Fatal: $dir already exists"
+$MKDIR -p $dir || die 4 "Fatal: could not create $dir"
log="$dir/lvmdump.log"
@@ -72,19 +98,19 @@
myecho "Gathering LVM volume info..."
myecho " vgscan..."
- log "vgscan -vvvv > $dir/vgscan 2>&1"
+ log "$LVM vgscan -vvvv > $dir/vgscan 2>&1"
myecho " pvscan..."
- log "pvscan -v >> $dir/pvscan 2>> $log"
+ log "$LVM pvscan -v >> $dir/pvscan 2>> $log"
myecho " lvs..."
- log "lvs -a -o +devices >> $dir/lvs 2>> $log"
+ log "$LVM lvs -a -o +devices >> $dir/lvs 2>> $log"
myecho " pvs..."
- log "pvs -a -v > $dir/pvs 2>> $log"
+ log "$LVM pvs -a -v > $dir/pvs 2>> $log"
echo " vgs..."
- log "vgs -v > $dir/vgs 2>> $log"
+ log "$LVM vgs -v > $dir/vgs 2>> $log"
fi
if (( $clustered )); then
@@ -102,41 +128,42 @@
myecho "Gathering LVM & device-mapper version info..."
echo "LVM VERSION:" > $dir/versions
-lvs --version >> $dir/versions 2>> $log
+$LVM lvs --version >> $dir/versions 2>> $log
echo "DEVICE MAPPER VERSION:" >> $dir/versions
-dmsetup --version >> $dir/versions 2>> $log
+$DMSETUP --version >> $dir/versions 2>> $log
myecho "Gathering dmsetup info..."
-log "dmsetup info -c > $dir/dmsetup_info 2>> $log"
-log "dmsetup table > $dir/dmsetup_table 2>> $log"
-log "dmsetup status > $dir/dmsetup_status 2>> $log"
+log "$DMSETUP info -c > $dir/dmsetup_info 2>> $log"
+log "$DMSETUP table > $dir/dmsetup_table 2>> $log"
+log "$DMSETUP status > $dir/dmsetup_status 2>> $log"
myecho "Gathering process info..."
-log "ps alx > $dir/ps_info 2>> $log"
+log "$PS alx > $dir/ps_info 2>> $log"
myecho "Gathering console messages..."
-log "tail -n 75 /var/log/messages > $dir/messages 2>> $log"
+log "$TAIL -n 75 /var/log/messages > $dir/messages 2>> $log"
myecho "Gathering /etc/lvm info..."
-log "cp -a /etc/lvm $dir/lvm 2>> $log"
+log "$CP -a /etc/lvm $dir/lvm 2>> $log"
myecho "Gathering /dev listing..."
-log "ls -la /dev > $dir/dev_listing 2>> $log"
+log "$LS -la /dev > $dir/dev_listing 2>> $log"
if (( $metadata )); then
myecho "Gathering LVM metadata from Physical Volumes..."
- log "mkdir -p $dir/metadata"
+ log "$MKDIR -p $dir/metadata"
- pvs="$(pvs --separator , --noheadings --units s --nosuffix -o name,pe_start 2>> $log | \
- sed -e 's/^ *//')"
+ pvs="$($LVM pvs --separator , --noheadings --units s --nosuffix -o \
+ name,pe_start 2>> $log | $SED -e 's/^ *//')"
for line in "$pvs"
do
- pv="$(echo $line | cut -d, -f1)"
- pe_start="$(echo $line | cut -d, -f2)"
- name="$(basename $pv)"
+ test -z "$line" && continue
+ pv="$(echo $line | $CUT -d, -f1)"
+ pe_start="$(echo $line | $CUT -d, -f2)"
+ name="$($BASENAME $pv)"
myecho " $pv"
- log "dd if=$pv of=$dir/metadata/$name bs=512 count=$pe_start 2>> $log"
+ log "$DD if=$pv of=$dir/metadata/$name bs=512 count=$pe_start 2>> $log"
done
fi
@@ -144,8 +171,14 @@
lvm_dump="$dirbase.tgz"
myecho "Creating report tarball in $HOME/$lvm_dump..."
cd $HOME
- tar czf $lvm_dump $dirbase 2>/dev/null
- rm -rf $dir
+ $TAR czf $lvm_dump $dirbase 2>/dev/null
+ $RM -rf $dir
+fi
+
+if test "$UID" != "0" && test "$EUID" != "0"; then
+ myecho
+ myecho "WARNING! Running as non-privileged user, dump is likely incomplete!"
+ myecho
fi
exit 0
More information about the lvm-devel
mailing list