98d0bf53a624d13c5b53797ec91c80c947fe8697
[metze/ctdb/wip.git] / tools / ctdb_diagnostics
1 #!/bin/sh
2 # a script to test the basic setup of a CTDB/Samba install 
3 # tridge@samba.org September 2007
4
5 PATH="$PATH:/sbin:/usr/sbin:/usr/lpp/mmfs/bin"
6
7 CONFIG_FILES="/etc/krb5.conf /etc/hosts /etc/ctdb/nodes /etc/sysconfig/ctdb /etc/ctdb/public_addresses /etc/resolv.conf /etc/nsswitch.conf /etc/sysctl.conf /etc/samba/smb.conf /etc/fstab"
8
9 2>&1
10
11 cat <<EOF
12 --------------------------------------------------------------------
13 ctdb_diagnostics starting. This script will gather information about
14 your ctdb cluster. You should send the output of this script along
15 with any ctdb or clustered Samba bug reports.
16 --------------------------------------------------------------------
17 EOF
18
19 date
20
21 error() {
22     msg="$1"
23     echo "ERROR: $msg"
24     NUM_ERRORS=`expr $NUM_ERRORS + 1`
25     echo " ERROR[$NUM_ERRORS]: $msg" >> $ERRORS
26 }
27
28 show_file() {
29     fname="$1"
30     echo "  ================================"
31     echo "  File: $fname"
32     echo "  `ls -l $fname`"
33     cat "$fname" | sed 's/^/  /'
34     echo "  ================================"
35 }
36
37 show_all() {
38     echo "running $1 on all nodes"
39     onnode all "hostname; date; $1 2>&1 | sed 's/^/  /'"
40 }
41
42 ERRORS="/tmp/diag_err.$$"
43 NUM_NODES=`wc -l < /etc/ctdb/nodes`
44 MAX_NODE=`expr $NUM_NODES - 1`
45 NUM_ERRORS=0
46 cat <<EOF
47 Diagnosis started on a $NUM_NODES node cluster. The following node list will be used:
48 EOF
49 show_file /etc/ctdb/nodes
50
51
52 cat <<EOF
53 --------------------------------------------------------------------
54 Comping critical config files on all nodes
55 EOF
56
57 for f in $CONFIG_FILES; do
58  [ -r "$f" ] || {
59     error "$f is missing"
60     next;
61  }
62  show_file $f
63  for i in `seq 0 $MAX_NODE`; do
64      echo "Testing for same config file $f on node $i"
65      tmpf=/tmp/`basename $f`.node$i
66      onnode $i cat $f > $tmpf
67      cmp $f $tmpf || {
68          error "File $f is different on node $i"
69          diff -u $f $tmpf
70      }
71      rm -f $tmpf
72  done
73 done
74
75 cat <<EOF
76 --------------------------------------------------------------------
77 Checking for clock drift
78 EOF
79 t=`date +%s`
80 for i in `seq 0 $MAX_NODE`; do
81     t2=`onnode $i date +%s`
82     d=`expr $t2 - $t`
83     if [ $d -gt 30 -o $d -lt -30 ]; then
84         error "time on node $i differs by $d seconds"
85     fi
86 done
87
88 cat <<EOF
89 --------------------------------------------------------------------
90 Showing software versions
91 EOF
92 show_all "uname -a"
93 [ -x /bin/rpm ] && {
94     show_all "rpm -qa | egrep 'samba|ctdb|gpfs'"
95 }
96
97
98 cat <<EOF
99 --------------------------------------------------------------------
100 Showing ctdb status and recent log entries
101 EOF
102 show_all "ctdb status; ctdb ip"
103 show_all "ctdb statistics"
104
105 echo "Showing log.ctdb"
106 show_all "tail -100 /var/log/log.ctdb"
107
108 echo "Showing log.ctdb"
109 show_all "tail -100 /var/log/log.ctdb"
110
111
112 cat <<EOF
113 --------------------------------------------------------------------
114 Showing system and process status
115 EOF
116 show_all "df; df -i; mount"
117 show_all uptime
118 show_all "ps axfw"
119 show_all "dmesg"
120 show_all "/sbin/lspci"
121 show_all "/sbin/ifconfig -a"
122 show_all "/sbin/ip addr list"
123 show_all "/sbin/route -n"
124 show_all "crontab -l"
125 show_all "sysctl -a"
126
127 [ -d /usr/lpp/mmfs ] && {
128 cat <<EOF
129 --------------------------------------------------------------------
130 Showing GPFS status and recent log entries
131 EOF
132  echo "Showing mmfs.log.latest"
133  show_all "tail -100 /var/adm/ras/mmfs.log.latest"
134  show_all "/usr/lpp/mmfs/bin/mmlsconfig"
135  show_all "/usr/lpp/mmfs/bin/mmlsfs all"
136  show_all "/usr/lpp/mmfs/bin/mmlsnsd"
137  show_all "/usr/lpp/mmfs/bin/mmfsadm dump version"
138  show_all "/usr/lpp/mmfs/bin/mmfsadm dump waiters"
139  show_all "/usr/lpp/mmfs/bin/mmlsmount all"
140  show_all "/usr/lpp/mmfs/bin/mmlsquota"
141  show_all "/usr/lpp/mmfs/bin/mmlscluster"
142  show_all "/usr/lpp/mmfs/bin/mmlsmgr"
143  fslist=`mount|grep type.gpfs|awk '{print $1}'`
144  for fs in $fslist; do
145      show_all "/usr/lpp/mmfs/bin/mmlssnapshot $fs"
146      show_all "/usr/lpp/mmfs/bin/mmlsdisk $fs"
147      show_all "/usr/lpp/mmfs/bin/mmlsfileset $fs"
148  done
149 }
150
151 cat <<EOF
152 --------------------------------------------------------------------
153 Showing Samba status
154 EOF
155 show_all "smbstatus -n -B"
156 show_all "net ads testjoin"
157 show_all "lsof -n | grep smbd"
158 show_all "netstat -tan"
159 show_all "net ads info"
160 show_all "date"
161 show_all "smbclient -U% -L 127.0.0.1"
162 WORKGROUP=`testparm -s --parameter-name=WORKGROUP 2> /dev/null`
163 show_all id "$WORKGROUP/Administrator"
164 show_all "wbinfo -p"
165 show_all "wbinfo --sequence"
166 show_all "smbd -b"
167
168 date
169 echo "Diagnostics finished with $NUM_ERRORS errors"
170
171 [ -r $ERRORS ] && {
172     cat $ERRORS
173     rm -f $ERRORS
174 }
175 exit $NUM_ERRORS
176