1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

lvmdump: add -s to gather system info and context (currently systemd-related only)

This is sort of info we always ask people to retrieve when
inspecting problems in systemd environment so let's have this
as part of lvmdump directly.

The -s option does not need to be bound to systemd only. We could
add support for initscripts or any other system-wide/service tracking
info that can help us with debugging problems.
This commit is contained in:
Peter Rajnoha 2014-04-15 15:27:30 +02:00
parent 704609b17e
commit a6763c64a7
3 changed files with 49 additions and 7 deletions

View File

@ -1,5 +1,6 @@
Version 2.02.107 -
==================================
Add lvmdump -s to collect system info and context (currently systemd only).
Refactor allocation code to make A_POSITIONAL_FILL explicit.
Use thread-safe ctime_r() for clvmd debug logging.
Skip adding replies to already finished reply thread.

View File

@ -10,6 +10,7 @@ lvmdump - create lvm2 information dumps for diagnostic purposes
.RB [ \-h ]
.RB [ \-l ]
.RB [ \-m ]
.RB [ \-s ]
.RB [ \-u ]
.SH DESCRIPTION
lvmdump is a tool to dump various information concerning LVM2.
@ -40,6 +41,8 @@ The content of the tarball is as follows:
.br
- if enabled with \-l, lvmetad state if running
.br
- if enabled with \-s, system info and context
.br
- if enabled with \-u, udev info and context
.SH OPTIONS
.TP
@ -72,6 +75,12 @@ This option generates a 1:1 dump of the metadata area from all PVs visible
to the system, which can cause the dump to increase in size considerably.
However, the metadata dump may represent a valuable diagnostic resource.
.TP
.B \-s
Gather system info and context. Currently, this encompasses systemd info
and context only: overall state of systemd units present in the system,
more detailed status of units controlling LVM functionality and the content
of systemd journal for current boot.
.TP
.B \-u
Gather udev info and context: /etc/udev/udev.conf file, udev daemon version
(output of 'udevadm info --version' command), udev rules currently used in the system

View File

@ -56,11 +56,12 @@ function usage {
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 <directory> dump into a directory instead of tarball"
echo " -c if running clvmd, gather cluster data as well"
echo " -u gather udev info and context"
echo " -d <directory> dump into a directory instead of tarball"
echo " -l gather lvmetad state if running"
echo " -m gather LVM metadata from the PVs"
echo " -s gather system info and context"
echo " -u gather udev info and context"
echo ""
exit 1
@ -69,17 +70,18 @@ function usage {
advanced=0
clustered=0
metadata=0
sysreport=0
udev=0
while getopts :acd:hmul opt; do
while getopts :acd:hlmus opt; do
case $opt in
s) sysreport=1 ;;
a) advanced=1 ;;
c) clustered=1 ;;
d) userdir=$OPTARG ;;
h) usage ;;
m) metadata=1 ;;
u) udev=1 ;;
l) lvmetad=1 ;;
m) metadata=1 ;;
s) sysreport=1 ;;
u) udev=1 ;;
:) echo "$0: $OPTARG requires a value:"; usage ;;
\?) echo "$0: unknown option $OPTARG"; usage ;;
*) usage ;;
@ -234,6 +236,36 @@ if (( $metadata )); then
done
fi
if (( $sysreport )); then
myecho "Gathering system info..."
sysreport_dir="$dir/sysreport"
log_lines=10000
SYSTEMCTL=$(which systemctl 2>> $log)
JOURNALCTL=$(which journalctl 2>> $log)
if test -z "$SYSTEMCTL"; then
myecho "WARNING: systemctl not found"
elif test -z "$JOURNALCTL"; then
myecho "WARNING: journalctl not found"
else
log "$MKDIR -p \"$sysreport_dir\""
log "$JOURNALCTL -b --no-pager -o short-precise > \"$sysreport_dir/journal_content\" 2>> \"$log\""
log "$SYSTEMCTL status -l --no-pager -n $log_lines -o short-precise dm-event.socket dm-event.service \
lvm2-monitor.service \
lvm2-lvmetad.socket lvm2-lvmetad.service \
lvm2-cluster-activation.service \
lvm2-clvmd.service \
lvm2-cmirrord.service \
> \"$sysreport_dir/systemd_lvm2_services_status\" 2>> \"$log\""
log "$SYSTEMCTL list-units -l --no-legend --no-pager > \"$sysreport_dir/systemd_unit_list\" 2>> \"$log\""
for unit in $(cat $sysreport_dir/systemd_unit_list | grep lvm2-pvscan | cut -d " " -f 1); do
log "$SYSTEMCTL status -l --no-pager -n $log_lines -o short-precise $unit >> \"$sysreport_dir/systemd_lvm2_pvscan_service_status\""
done
fi
fi
if (( $udev )); then
myecho "Gathering udev info..."