01
PART
知识回顾
本篇文章,我们重点介绍服务器"磁盘"信息的获取。
前期知识储备和回顾,请参考以下文章
01)运维天地-服务器01-X86-PCServer属性介绍
02)运维天地-服务器01-X86-PCServer资产信息获取
03)运维天地-服务器01-X86-PCServer CPU信息获取
04)运维天地-服务器01-X86-PCServer内存信息获取
特别说明:本文的服务器特指X86-PCServer硬件服务器
02
PART
X86-PCServer 硬盘信息获取
A
获取脚本
#!/usr/bin/python
#-*- coding: utf-8 -*-
#author: wangzhiguo
#date: 2020.01.29
import commands
class StorageInfo():
def __init__(self):
return
def get_raid_card_manufacturer(self):
status, output = commands.getstatusoutput("lspci | grep -i raid")
if output.find("Adaptec") != -1:
raid_card_manufacturer = "adaptec"
return raid_card_manufacturer
elif output.find("MegaRAID") != -1:
raid_card_manufacturer = "lsi"
return raid_card_manufacturer
elif output.find("Hewlett") != -1:
raid_card_manufacturer = "hp"
return raid_card_manufacturer
else:
raid_card_manufacturer = "other"
return raid_card_manufacturer
def adaptec_disk(self):
disk_type1 = ""
disk_type2 = ""
disk_type3 = ""
disk_type1_num = 0
disk_type2_num = 0
disk_type3_num = 0
status, output = commands.getstatusoutput("/usr/Arcconf/arcconf getconfig 1 ld | grep Segment | awk '{print $5$6$7}'")
output = output.replace("(", "").split()
if output:
disk_type1 = output[0]
disk_type1_num = output.count(disk_type1)
for i in range(len(output)-1, -1, -1):
if output[i] == disk_type1:
output.pop(i)
if output:
disk_type2 = output[0]
disk_type2_num = output.count(disk_type2)
for i in range(len(output)-1, -1, -1):
if output[i] == disk_type2:
output.pop(i)
if output:
disk_type3 = output[0]
disk_type3_num = output.count(disk_type3)
for i in range(len(output)-1, -1, -1):
if output[i] == disk_type3:
output.pop(i)
disk_type1 = disk_type1.rstrip(",")
disk_type2 = disk_type2.rstrip(",")
disk_type3 = disk_type3.rstrip(",")
return disk_type1, disk_type1_num, disk_type2, disk_type2_num, disk_type3, disk_type3_num
def lsi_disk(self):
disk_type1 = ""
disk_type2 = ""
disk_type3 = ""
disk_type1_num = 0
disk_type2_num = 0
disk_type3_num = 0
status, output = commands.getstatusoutput("/opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL | grep Size | grep Raw | awk '{print $3$4}'")
disk_capacity = output.split()
status, output = commands.getstatusoutput("/opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL | grep PD | awk '{print $3}'")
disk_interface = output.split()
status, output = commands.getstatusoutput("/opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL | grep Media | grep Type | awk '{print$3$4$5}'")
disk_type = output.split()
i = 0
while(i < len(disk_type)):
if disk_type[i] == "HardDiskDevice":
disk_type[i] = "HDD"
i = i + 1
output = zip(disk_capacity, disk_interface, disk_type)
if output:
disk_type1 = output[0]
disk_type1_num = output.count(disk_type1)
for i in range(len(output)-1, -1, -1):
if output[i] == disk_type1:
output.pop(i)
if output:
disk_type2 = output[0]
disk_type2_num = output.count(disk_type2)
for i in range(len(output)-1, -1, -1):
if output[i] == disk_type2:
output.pop(i)
if output:
disk_type3 = output[0]
disk_type3_num = output.count(disk_type3)
for i in range(len(output)-1, -1, -1):
if output[i] == disk_type3:
output.pop(i)
if disk_type1:
disk_type1 = disk_type1[0] + "," + disk_type1[1] + "," + disk_type1[2]
if disk_type2:
disk_type2 = disk_type2[0] + "," + disk_type2[1] + "," + disk_type2[2]
if disk_type3:
disk_type3 = disk_type3[0] + "," + disk_type3[1] + "," + disk_type3[2]
return disk_type1, disk_type1_num, disk_type2, disk_type2_num, disk_type3, disk_type3_num
def hp_disk(self):
disk_type1 = ""
disk_type2 = ""
disk_type3 = ""
disk_type1_num = 0
disk_type2_num = 0
disk_type3_num = 0
status, output = commands.getstatusoutput("/sbin/ssacli ctrl all show config | grep physicaldrive | awk '{print $9$10}'")
disk_capacity = output.replace(",", "").split()
status, output = commands.getstatusoutput("/sbin/ssacli ctrl all show config | grep physicaldrive | awk '{print $7}'")
disk_interface = output.split()
status, output = commands.getstatusoutput("/sbin/ssacli ctrl all show config | grep physicaldrive | awk '{print $8}'")
disk_type = output.replace(",", "").split()
output = zip(disk_capacity, disk_interface, disk_type)
if output:
disk_type1 = output[0]
disk_type1_num = output.count(disk_type1)
for i in range(len(output)-1, -1, -1):
if output[i] == disk_type1:
output.pop(i)
if output:
disk_type2 = output[0]
disk_type2_num = output.count(disk_type2)
for i in range(len(output)-1, -1, -1):
if output[i] == disk_type2:
output.pop(i)
if output:
disk_type3 = output[0]
disk_type3_num = output.count(disk_type3)
for i in range(len(output)-1, -1, -1):
if output[i] == disk_type3:
output.pop(i)
if disk_type1:
disk_type1 = disk_type1[0] + "," + disk_type1[1] + "," + disk_type1[2]
if disk_type2:
disk_type2 = disk_type2[0] + "," + disk_type2[1] + "," + disk_type2[2]
if disk_type3:
disk_type3 = disk_type3[0] + "," + disk_type3[1] + "," + disk_type3[2]
return disk_type1, disk_type1_num, disk_type2, disk_type2_num, disk_type3, disk_type3_num
def get_all(self):
raid_card_manufacturer = self.get_raid_card_manufacturer()
if raid_card_manufacturer == "adaptec":
disk_info = self.adaptec_disk()
return raid_card_manufacturer, disk_info
elif raid_card_manufacturer == "lsi":
disk_info = self.lsi_disk()
return raid_card_manufacturer, disk_info
elif raid_card_manufacturer == "hp":
disk_info = self.hp_disk()
return raid_card_manufacturer, disk_info
else:
return 0
def main():
temp = StorageInfo()
print(temp.get_all())
if __name__ == '__main__':
main()
B
获取方法概述