前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >运维天地-服务器05-X86-PCServer磁盘信息获取

运维天地-服务器05-X86-PCServer磁盘信息获取

作者头像
大话IT架构
发布2020-04-03 09:49:16
4200
发布2020-04-03 09:49:16
举报
文章被收录于专栏:大话IT架构大话IT架构

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

获取方法概述

  1. 磁盘信息是通过raid卡工具来获取的
  2. 市面上主流的raid厂家:lsi|adaptec|hp
  3. 接下来就是字符串的处理(过滤、分割、拼接)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大话IT架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档