Try to determine JBOD device path...

This commit is contained in:
Vincent S. Cojot 2018-09-30 14:26:05 -04:00
parent 2a8d11d88e
commit c7a75f48d1

View File

@ -530,6 +530,7 @@ def returnUnconfDiskInfo(output,controllerid):
mtype = 'Unknown' mtype = 'Unknown'
dsize = 'Unknown' dsize = 'Unknown'
temp = 'Unk0C' temp = 'Unk0C'
ospath = 'N/A'
for line in output: for line in output:
if re.match(r'Enclosure Device ID: .*$',line.strip()): if re.match(r'Enclosure Device ID: .*$',line.strip()):
# We match here early in the analysis so reset the vars if this is a new disk we're reading.. # We match here early in the analysis so reset the vars if this is a new disk we're reading..
@ -588,7 +589,7 @@ def returnUnconfDiskInfo(output,controllerid):
dbgprint('Unconfigured Disk: Arrayid: '+str(arrayid)+' DiskId: '+str(diskid)+' '+str(olddiskid)+' '+str(fstate)) dbgprint('Unconfigured Disk: Arrayid: '+str(arrayid)+' DiskId: '+str(diskid)+' '+str(olddiskid)+' '+str(fstate))
elif subfstate == 'Online, Spun Up': elif subfstate == 'Online, Spun Up':
dbgprint('Online Unconfed Disk: Arrayid: '+str(arrayid)+' DiskId: '+str(diskid)+' '+str(olddiskid)+' '+str(fstate)) dbgprint('Online Unconfed Disk: Arrayid: '+str(arrayid)+' DiskId: '+str(diskid)+' '+str(olddiskid)+' '+str(fstate))
table.append([ mtype, model, dsize, fstate, speed, temp, enclid, slotid, diskid]) table.append([ mtype, model, dsize, fstate, speed, temp, enclid, slotid, diskid, ospath])
return table return table
cmd = '%s -adpCount -NoLog' % (megaclipath) cmd = '%s -adpCount -NoLog' % (megaclipath)
@ -860,12 +861,16 @@ if totalunconfdrivenumber:
print '-- Unconfigured Disk information --' print '-- Unconfigured Disk information --'
controllerid = 0 controllerid = 0
pcipath = ''
while controllerid < controllernumber: while controllerid < controllernumber:
arrayid = 0 arrayid = 0
cmd = '%s -LDInfo -lall -a%d -NoLog' % (megaclipath, controllerid) cmd = '%s -LDInfo -lall -a%d -NoLog' % (megaclipath, controllerid)
output = getOutput(cmd) output = getOutput(cmd)
arraynumber = returnArrayNumber(output) arraynumber = returnArrayNumber(output)
cmd = '%s -AdpGetPciInfo -a%d -NoLog' % (megaclipath, controllerid)
output = getOutput(cmd)
pcipath = returnHBAPCIInfo(output)
#### BUG: -LdPdInfo shows all PD on the adapter, not just for given LD.. #### BUG: -LdPdInfo shows all PD on the adapter, not just for given LD..
#### while arrayid <= arraynumber: #### while arrayid <= arraynumber:
@ -880,18 +885,33 @@ if totalunconfdrivenumber:
bad = True bad = True
nagiosbaddisk += 1 nagiosbaddisk += 1
# JBOD disks has a real device path and are not masked. Try to find a device name here, if possible.
if pcipath:
if array[3] in [ 'JBOD' ]:
diskprefix = str('/dev/disk/by-path/pci-' + pcipath + '-scsi-0:0:')
dbgprint('Will look for DISKprefix : ' + diskprefix)
# RAID disks are usually with a channel of '2', JBOD disks with a channel of '0'
diskpath = diskprefix + str(array[8]) + ':0'
dbgprint('Looking for DISKpath : ' + diskpath)
if os.path.exists(diskpath):
dbgprint('Found DISK match: ' + diskpath + ' -> ' + array[9])
array[9] = os.path.realpath(diskpath)
else:
dbgprint('DISK NOT present: ' + diskpath)
array[9] = 'N/A'
mlen = returnWdthFromArrayCol(arraydisk,1) mlen = returnWdthFromArrayCol(arraydisk,1)
flen = returnWdthFromArrayCol(arraydisk,3) flen = returnWdthFromArrayCol(arraydisk,3)
# Adjust print format with widths computed above # Adjust print format with widths computed above
drvfmt = "%-7s | %-4s | %-"+str(mlen)+"s | %-8s | %-"+str(flen+2)+"s | %-8s | %-4s | %-8s | %-8s" drvfmt = "%-7s | %-4s | %-"+str(mlen)+"s | %-8s | %-"+str(flen+2)+"s | %-8s | %-4s | %-8s | %-6s | %-8s"
i = 0 i = 0
for array in arraydisk: for array in arraydisk:
# Header # Header
if ( i == 0 ): if ( i == 0 ):
if not nagiosmode: if not nagiosmode:
print drvfmt % ( print drvfmt % (
"-- ID", "Type", "Drive Model", "Size", "Status", "Speed", "Temp", "Slot ID", "LSI Device ID") "-- ID", "Type", "Drive Model", "Size", "Status", "Speed", "Temp", "Slot ID", "LSI ID", "Path")
# Drive information # Drive information
if not nagiosmode: if not nagiosmode:
print drvfmt % ( print drvfmt % (
@ -903,8 +923,9 @@ if totalunconfdrivenumber:
array[4], # Speed array[4], # Speed
array[5], # Temp array[5], # Temp
str('['+array[6]+':'+array[7]+']'), # Slot ID str('['+array[6]+':'+array[7]+']'), # Slot ID
array[8]) # LSI ID array[8], # LSI ID
i = i + 1 array[9]) # OS path, if any
i += 1
controllerid += 1 controllerid += 1
if not nagiosmode: if not nagiosmode:
print '' print ''