iprutils: implementing "dump" command
This patch implements 'iprconfig -c dump' command which creates an sos-report like file with log information about the adapters and the environment. It also introduces a bash script "iprsos" that triggers the new command and creates the log file at /var/log/iprsos.log Signed-off-by: Daniel Kreling <kreling@linux.vnet.ibm.com> Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
This commit is contained in:
parent
6223ba13cd
commit
2f183e53f3
5 changed files with 182 additions and 1 deletions
2
Makefile
2
Makefile
|
|
@ -72,8 +72,10 @@ install: all
|
||||||
install --mode=755 iprdump $(INSTALL_MOD_PATH)/sbin/iprdump
|
install --mode=755 iprdump $(INSTALL_MOD_PATH)/sbin/iprdump
|
||||||
install --mode=755 iprinit $(INSTALL_MOD_PATH)/sbin/iprinit
|
install --mode=755 iprinit $(INSTALL_MOD_PATH)/sbin/iprinit
|
||||||
install --mode=700 iprdbg $(INSTALL_MOD_PATH)/sbin/iprdbg
|
install --mode=700 iprdbg $(INSTALL_MOD_PATH)/sbin/iprdbg
|
||||||
|
install --mode=755 iprsos $(INSTALL_MOD_PATH)/sbin/iprsos
|
||||||
install -d $(INSTALL_MOD_PATH)/usr/share/man/man8
|
install -d $(INSTALL_MOD_PATH)/usr/share/man/man8
|
||||||
install iprconfig.8.gz $(INSTALL_MOD_PATH)/usr/share/man/man8/iprconfig.8.gz
|
install iprconfig.8.gz $(INSTALL_MOD_PATH)/usr/share/man/man8/iprconfig.8.gz
|
||||||
|
install iprsos.8.gz $(INSTALL_MOD_PATH)/usr/share/man/man8/iprsos.8.gz
|
||||||
install iprupdate.8.gz $(INSTALL_MOD_PATH)/usr/share/man/man8/iprupdate.8.gz
|
install iprupdate.8.gz $(INSTALL_MOD_PATH)/usr/share/man/man8/iprupdate.8.gz
|
||||||
install iprdump.8.gz $(INSTALL_MOD_PATH)/usr/share/man/man8/iprdump.8.gz
|
install iprdump.8.gz $(INSTALL_MOD_PATH)/usr/share/man/man8/iprdump.8.gz
|
||||||
install iprinit.8.gz $(INSTALL_MOD_PATH)/usr/share/man/man8/iprinit.8.gz
|
install iprinit.8.gz $(INSTALL_MOD_PATH)/usr/share/man/man8/iprinit.8.gz
|
||||||
|
|
|
||||||
11
iprconfig.8
11
iprconfig.8
|
|
@ -730,6 +730,17 @@ ipr-CCIN-PCI_ADDRESS-dump-TIMESTAMP.
|
||||||
Example:
|
Example:
|
||||||
.br
|
.br
|
||||||
.B iprconfig -c get-live-dump sg5
|
.B iprconfig -c get-live-dump sg5
|
||||||
|
.br
|
||||||
|
.TP
|
||||||
|
.B dump
|
||||||
|
Display detailed hardware and system information on standard output.
|
||||||
|
In case a report file is needed, the iprsos command will create one at
|
||||||
|
/var/log/iprsos.log.
|
||||||
|
.br
|
||||||
|
Example:
|
||||||
|
.br
|
||||||
|
.B iprconfig -c dump
|
||||||
|
.br
|
||||||
.RE
|
.RE
|
||||||
.TP
|
.TP
|
||||||
.B \-\-version
|
.B \-\-version
|
||||||
|
|
|
||||||
82
iprconfig.c
82
iprconfig.c
|
|
@ -13336,7 +13336,7 @@ static int format_for_raid(char **args, int num_args)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* raid_create -
|
* raid_create
|
||||||
* @args: argument vector
|
* @args: argument vector
|
||||||
* @num_args: number of arguments
|
* @num_args: number of arguments
|
||||||
*
|
*
|
||||||
|
|
@ -17790,6 +17790,85 @@ static int show_perf (char **args, int num_args)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int dump (char **args, int num_args)
|
||||||
|
{
|
||||||
|
struct ipr_ioa *ioa;
|
||||||
|
struct ipr_dev *dev;
|
||||||
|
|
||||||
|
if (!ipr_ioa_head)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
printf("\n === Running 'show-config' ===\n");
|
||||||
|
show_config(NULL,0);
|
||||||
|
|
||||||
|
printf("\n === Running 'show-alt-config' ===\n");
|
||||||
|
show_alt_config(NULL,0);
|
||||||
|
|
||||||
|
printf("\n === Running 'show-ioas' ===\n");
|
||||||
|
show_ioas(NULL, 0);
|
||||||
|
|
||||||
|
printf("\n === Running 'show-arrays' ===\n");
|
||||||
|
show_arrays(NULL,0);
|
||||||
|
|
||||||
|
printf("\n === Running 'show-hot-spares' ===\n");
|
||||||
|
show_hot_spares(NULL, 0);
|
||||||
|
|
||||||
|
printf("\n === Running 'show-af-disks' ===\n");
|
||||||
|
show_af_disks(NULL, 0);
|
||||||
|
|
||||||
|
printf("\n === Running 'show-all-af-disks' ===\n");
|
||||||
|
show_all_af_disks(NULL, 0);
|
||||||
|
|
||||||
|
printf("\n === Running 'show-jbod-disks' ===\n");
|
||||||
|
show_jbod_disks(NULL, 0);
|
||||||
|
|
||||||
|
printf("\n === Running show-details ===\n");
|
||||||
|
for_each_ioa(ioa){
|
||||||
|
for_each_dev(ioa, dev){
|
||||||
|
printf("Device %s:\n", dev->gen_name);
|
||||||
|
show_dev_details(dev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n === Running show-battery-info ===\n");
|
||||||
|
for_each_ioa(ioa){
|
||||||
|
char *array[] = { ioa->ioa.gen_name };
|
||||||
|
printf("Device %s:\n", ioa->ioa.gen_name);
|
||||||
|
battery_info(array, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n === Running 'query-path-status' ===\n");
|
||||||
|
for_each_primary_ioa(ioa){
|
||||||
|
for_each_dev(ioa, dev){
|
||||||
|
char *array[] = { dev->gen_name };
|
||||||
|
printf("\nDevice %s:\n", dev->gen_name);
|
||||||
|
query_path_status(array, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n\n === Running 'query-path-details' ===\n");
|
||||||
|
for_each_primary_ioa(ioa){
|
||||||
|
for_each_dev(ioa, dev){
|
||||||
|
char *array[] = { dev->gen_name };
|
||||||
|
printf("\nDevice: %s\n", dev->gen_name);
|
||||||
|
query_path_details(array, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n === Running 'show-perf' ===\n");
|
||||||
|
for_each_ioa(ioa){
|
||||||
|
for_each_dev(ioa, dev){
|
||||||
|
if (ipr_is_af_dasd_device(dev)) {
|
||||||
|
char *array[] = { dev->gen_name };
|
||||||
|
printf("\nDevice: %s\n", dev->gen_name);
|
||||||
|
show_perf(array, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static const struct {
|
static const struct {
|
||||||
char *cmd;
|
char *cmd;
|
||||||
int min_args;
|
int min_args;
|
||||||
|
|
@ -17900,6 +17979,7 @@ static const struct {
|
||||||
{ "suspend-disk-enclosure", 1, 0, 1, suspend_disk_enclosure, "sg8"},
|
{ "suspend-disk-enclosure", 1, 0, 1, suspend_disk_enclosure, "sg8"},
|
||||||
{ "resume-disk-enclosure", 1, 0, 1, resume_disk_enclosure, "sg8 "},
|
{ "resume-disk-enclosure", 1, 0, 1, resume_disk_enclosure, "sg8 "},
|
||||||
{ "show-perf", 1, 0, 1, show_perf, "sg8"},
|
{ "show-perf", 1, 0, 1, show_perf, "sg8"},
|
||||||
|
{ "dump", 0, 0, 0, dump, "" },
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
60
iprsos
Normal file
60
iprsos
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# This script creates an sos report with iprutils information at $dir
|
||||||
|
|
||||||
|
dir="/var/log/iprsos.log"
|
||||||
|
|
||||||
|
echo Creating a new file `echo $dir` ...
|
||||||
|
if [ -f $dir ]; then
|
||||||
|
rm -f $dir
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo === Running 'iprconfig -c dump' === >> $dir
|
||||||
|
/sbin/iprconfig -c dump >> $dir
|
||||||
|
|
||||||
|
echo >> $dir
|
||||||
|
echo "=== Running 'lspci' ===" >> $dir
|
||||||
|
/sbin/lspci >> $dir
|
||||||
|
|
||||||
|
echo >> $dir
|
||||||
|
echo "=== Running 'lsscsi' ===" >> $dir
|
||||||
|
/usr/bin/lsscsi >> $dir
|
||||||
|
|
||||||
|
echo >> $dir
|
||||||
|
echo "=== Running 'lsscsi -H' ===" >> $dir
|
||||||
|
/usr/bin/lsscsi -H >> $dir
|
||||||
|
|
||||||
|
if [ -d "/usr/lib/systemd/system" ]; then
|
||||||
|
echo >> $dir
|
||||||
|
echo === IPR daemons: Running 'systemctl status ipr{init,dump,update}.service' === >> $dir
|
||||||
|
/usr/bin/systemctl status iprdump.service >> $dir
|
||||||
|
/usr/bin/systemctl status iprinit.service >> $dir
|
||||||
|
/usr/bin/systemctl status iprupdate.service >> $dir
|
||||||
|
else
|
||||||
|
echo >> $dir
|
||||||
|
echo === IPR daemons: Running 'service ipr* status' === >> $dir
|
||||||
|
/sbin/service iprinit status >> $dir
|
||||||
|
/sbin/service iprdump status >> $dir
|
||||||
|
/sbin/service iprupdate status >> $dir
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo >> $dir
|
||||||
|
echo "=== Contents of '/etc/ipr/ ' ===" >> $dir
|
||||||
|
if [ -d /etc/ipr ]; then
|
||||||
|
/bin/ls /etc/ipr/ >> $dir
|
||||||
|
else
|
||||||
|
echo "No files at /etc/ipr/" >> $dir
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo >> $dir
|
||||||
|
echo "=== Contents of '/var/log/iprdump*' ===" >> $dir
|
||||||
|
if [ -f /var/log/iprdump.? ]; then
|
||||||
|
/bin/ls -lh /var/log/iprdump* >> $dir
|
||||||
|
else
|
||||||
|
echo "No iprdump files found at /var/log." >> $dir
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo >> $dir
|
||||||
|
echo "=== Contents of '/var/log/messages' ===" >> $dir
|
||||||
|
/bin/cat /var/log/messages >> $dir
|
||||||
28
iprsos.8
Normal file
28
iprsos.8
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
.\" (C) Copyright 2015
|
||||||
|
.\" International Business Machines Corporation and others.
|
||||||
|
.\" All Rights Reserved. This program and the accompanying
|
||||||
|
.\" materials are made available under the terms of the
|
||||||
|
.\" Common Public License v1.0 which accompanies this distribution.
|
||||||
|
.TH IPRSOS 8 "December 2014"
|
||||||
|
.SH NAME
|
||||||
|
iprsos \- IBM Power RAID report generator
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.BI "iprsos"
|
||||||
|
.sp
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B iprsos
|
||||||
|
is used to generate an sosreport-like report by collecting hardware
|
||||||
|
information from the system, along with other system calls such
|
||||||
|
as lspci, lscsi, and others. The information is collected from 'iprconfig'
|
||||||
|
commands and appended to the /var/log/iprsos.log file
|
||||||
|
.br
|
||||||
|
.SH FILES
|
||||||
|
.br
|
||||||
|
A detailed report file is created at /var/log/iprsos.log with the
|
||||||
|
information collected from the hardware and system information.
|
||||||
|
.br
|
||||||
|
.SH AUTHORS
|
||||||
|
Daniel B. Kreling <kreling@linux.vnet.ibm.com>
|
||||||
|
.br
|
||||||
|
Brian King <brking@us.ibm.com>
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue