一、计算机核心基础部件:BIOS 、BMC

1、BIOS 是什么?

BIOS(Basic Input Output System),即基础输入输出系统,是刻在主板 ROM 芯片上不可篡改的启动程序,BIOS 负责计算系统自检程序(POST,Power On Self Test)和系统自启动程序,因此是计算机系统启动后的第一道程式。由于不可篡改性,故程序存储在 ROM 芯片中,并且在断电后,依然可以维持原有设置。

BIOS 主要功能是控制计算机启动后的基本程式,包括硬盘驱动(如装机过程中优先选择 DVD 或者 USB 启动盘),键盘设置,软盘驱动,内存和相关设备。

BMC与BIOS bmc与bios区别_串口

 

 

2、BMC和IPMI 是什么?

BMC(Baseboard Management Controller)与IPMI(Intelligent Platform Management Interface),即基板管理控制器与智能型平台管理接口,是服务器的基本核心功能子系统,负责服务器的硬件状态管理、操作系统管理、健康状态管理、功耗管理等核心功能。

BMC 是独立于服务器系统之外的小型操作系统是一个集成在主板上的芯片,也有产品是通过 PCIE 等形式插在主板上,对外表现形式只是一个标准的 RJ45 网口,拥有独立 IP 的固件系统。服务器集群一般使用 BMC 指令进行大规模无人值守操作,包括服务器的远程管理、监控、安装、重启等。

IPMI 是一组交互标准管理规范,由 Intel、HP、Dell 和 NEC 公司于1998年9月16日共同提出,主要用于服务器系统集群自治,监视服务器的物理健康特征,如温度、电压、风扇工作状态、电源状态等。同时,IPMI 还负责记录各种硬件的信息和日志记录,用于提示用户和后续问题的定位。目前,IPMI 已经为超过 200 多家计算机供应商所支持。

IPMI 是独立于主机系统 CPU、BIOS/UEFI 和 OS 之外,可独立运行的板上部件,其核心部件即为 BMC。或者说,BMC 与其他组件如 BIOS/UEFI、CPU 等交互,都是经由 IPMI 来完成。在 IPMI 协助下,用户可以远程对关闭的服务器进行启动、重装、挂载 ISO 镜像等。

 

 

BMC与BIOS bmc与bios区别_串口_02

 

 

 

服务器除了装linux,windows系统外,相应还有一个可通过网线(服务器默认带外地址--可改)连接具体厂商服务器的BMC(Baseboard Management Controller,基板管理控制器)

 

BMC与BIOS bmc与bios区别_串口_03

  BMC系统独立,管理硬件(cpu,风扇等信息),打开控制台(一般使用java)

  智能平台管理接口 (IPMI) 是一种开放标准的硬件管理接口规格,定义了嵌入式管理子系统进行通信的特定方法。IPMI 信息通过基板管理控制器 (BMC)(位于 IPMI 规格的硬件组件上)进行交流。使用低级硬件智能管理而不使用操作系统进行管理,具有两个主要优点: 首先,此配置允许进行带外服务器管理;其次,操作系统不必负担传输系统状态数据的任务。一般统称Mgmt管理网口,华为的白皮书叫iBMC,戴尔叫idrac,其实都是兼容ipmi协议的网口而已。

  服务器一般分带外地址与业务地址,带外地址即与BMC联系,业务地址即与安装的系统的使用,一个便于底层的管理,一个便于业务的使用。


在介绍BMC之前需要了解一个概念,即平台管理(platform management)。平台管理表示的是一系列的监视和控制功能,操作的对象是系统硬件。比如通过监视系统的温度,电压,风扇、电源等等,并做相应的调节工作,以保证系统处于健康的状态。当然如果系统真的不正常了,也可以通过复位的方式来重新启动系统。同时平台管理还负责记录各种硬件的信息和日志记录,用于提示用户和后续问题的定位。

下图是平台管理涉及到的功能概述:

 

以上的这些功能可以集成到一个控制器上来实现,这个控制器被称为基板管理控制器(Baseboard Manager Controller,简称BMC)。需要说明的是,BMC是一个独立的系统,它不依赖与系统上的其它硬件(比如CPU、内存等),也不依赖与BIOS、OS等(但是BMC可以与BIOS和OS交互,这样可以起到更好的平台管理作用,OS下有系统管理软件可以与BMC协同工作以达到更好的管理效果)。一般我们的电脑不会带BMC,因为用处不大,一些温度、电源等的管理,CPU(或者EC,这就是另外一个话题了)来控制就够了。但是对于系统要求高的设备,比如服务器,就会用到BMC。当然因为BMC是一个独立的系统,对于某些嵌入式设备,可能不需要其它处理器,光一个BMC就能完成工作。说到底BMC本身也是一个带外处理器(一般都是ARM处理器)的小系统,单独用来处理某些工作也完全是可以的。不过这里既然叫做BMC,那么总的来说重点还是在平台管理,所以本文主要说的是服务器中的BMC。

 

BMC通过不同的接口与系统中的其它组件连接。LPC、I2C、SMBUS,Serial等,这些都是比较基本的接口,而IPMI,它是与BMC匹配的接口,所有的BMC都需要实现这种接口,这里需要特别的介绍。

IPMI
IPMI的全称是Intelligent Platform Management Interface,智能平台管理接口。看了名字也不需要特别介绍它用来干什么的了,关于它的详细介绍可以参看https://www.intel.com/content/www/us/en/servers/ipmi/ipmi-home.html,这里只做简单的说明。

IPMI就是对“平台管理”这个概念的具体的规范定义,该规范定义了“平台管理”的软硬件架构,交互指令,事件格式,数据记录,能力集等。而BMC是IPMI中的一个核心部分,属于IPMI硬件架构。下图灰色部分就是IPMI涉及的范围:

BMC与BIOS bmc与bios区别_.net_04

 

 

 

可以看到BMC在硬件的最底层,而上层白色部分是系统中的管理软件。由于本文是介绍BMC的,所以这里只介绍BMC相关的IPMI硬件模块。

IPMI硬件模块
IPMI规定了很多的东西,BMC是其中最重要的一个部分,此外还有一些”卫星“控制器通过IPMB与BMC相连,这些”卫星“控制器一般控制特定的设备。

IPMB全称Intelligent Platform Management Bus,是一种基于I2C的串行总线,它用于BMC与”卫星“控制器的通信,其上传递的是IPMI命令。对于相对简单的系统来说,BMC已经能够满足要求,但是当系统比较复杂,由多个子系统构成时,那么通过IPMB和“卫星”控制器,就能够更好地管理复杂系统。

下面的图描述了与IPMI有关的各个硬件模块:

 

BMC与BIOS bmc与bios区别_.net_05

 

 

下面简单的介绍各个部分。

MOTHERBOARD
首先是图中的左下角部分,名称写着Mother Board。

 

BMC与BIOS bmc与bios区别_服务器_06

 

 

通常,在服务器中,这一部分是主角,它包含了CPU,PCH等主要的部件。这里我们可以看到它连接除了数个组件:网卡,串口和IPMI总线,其实还有一个部分在图中最上面中间的PCI总线。

网卡:服务器需要用到网卡,这个本身没有什么好介绍的,重点其实在于BMC到网卡的连接,后续会介绍。

串口:串口用于输出服务器的调试信息,但是这里值得注意的是其中的Serial Port Sharing,它使得服务器的串口输出可以直接输出,也可以输出到BMC。至于为什么要输出到BMC,这里其实需要注意的是一种常用的场景。服务器位于机房,而工作人员通常不会直接在机房操作,而是通过网络(这也是为什么BMC会连接网卡的原因)进行操作,这个时候过需要获取服务器的串口信息,就不方便直接去机房,这个时候通过BMC来获取服务器串口信息就是一个好主意。

IPMI总线:这是BMC与服务器通信并进行控制的主体,当然少不了。

PCI总线:这个部分的作用跟串口很像。服务器除了输出串口信息,当然还需要输出图形界面之类的东西。从服务器端来看,它通过PCI连接的就是一个显卡,通过它来输出显示。

IPMB
再来到图中的右上角,其中描述的是通过IPMB连接的设备。

 

BMC与BIOS bmc与bios区别_.net_07

 

 

这些设备跟BMC类似,也是用来进行管理芯片。它们是对BMC的补充,从而扩展BMC的功能。

Non-volatile Storage
我们知道BMC其实是一个独立的芯片,那么它肯定也需要运行系统。通过BMC里面运行的是一个类Unix系统,而该系统就存放再Non-volatile Storage中,通常就是SPI Flash里面。

 

BMC与BIOS bmc与bios区别_BMC与BIOS_08

 

 

跟一般的存储介质没有本质的区别。除了系统本身之后,还包含一系列BMC会存放的信息。比如从服务器上面获取到的串口信息;系统本身的报警信息;FRU信息等。

Sensors & Control Circuitry
这一部分虽然图中只占很小的一部分,但却是BMC最基本的功能:获取信息和控制环境。

 

BMC与BIOS bmc与bios区别_串口_09

 

 

BMC会通过I2C/PECI等总线去获取设备的温度,然后根据预先设定的策略去调整温度。调整的方式两种,一种就是调整风扇,属于主动降温;另一种是调整供电,比如CPU的P状态,或者关闭多余的硬盘等,属于被动降温。

FRU
FRU的全称是Field Replaceable Unit。

 

BMC与BIOS bmc与bios区别_串口_10

 

 

从图中也可以看出,类似内存条,CPU等就属于FRU,它们在服务器中通常是可以更换的。BMC会检测这些设备并保存相关的信息。当这些设备的在位情况发生变化时,BMC会发生相关的告警。

IPMI软件模块
IPMI软件模块包含一个完整的操作系统以及运行其上的IPMI应用。


通常,BMC分为BMC芯片BMC固件两部分,它独立于服务器计算单元,通常每一台现代服务器中都有一个

BMC。它对服务器的监控管理体现在很多方面,例如监视运行状况记录事件并进行故障分析部署配置系统,也可以提供一系列其他远程管理功能。

BMC与BIOS bmc与bios区别_串口_11

正因为如此,BMC比主机服务器享有更大的权限。

BMC可以持续访问主机服务器的文件、内存(使用DMA)、键盘/显示器和固件(这是必需的,因为它需要能够重新安装/重新配置)。

此外,BMC能够将数据发送到外部网络,甚至可能重新配置主机服务器网络接口。这为攻击者提供了偷偷全面控制受害者系统所需要的全部工具。
当服务器出现漏洞,我们的各种数据会丢失,电脑无法正常工作,这将危害到我们生活和工作的方方面面。


服务器端IPMI的配置:
物理连接: 将BMC 的专用网口连接网络

直接在BIOS中设置IPMI即可,都不必到OS中去进行设置了.

开启服务器,进入BIOS,选择:BMC 激活IPMI。

可以IP地址,比如改为192.168.111.111,子网掩码:255.255.0.0 (当然也可以设置为dynamic动态获取IP)。

在下面User configuration设置中Enable一些user,将有管理权限的用户enable起来,也可以设置管理密码、修改用户名等工作。

设置好后,就reboot系统,在局域网中另外的系统上ping一下刚才设置的IP 192.168.111.111,看看通不通.

 

在客户端的IPMI远程操作:
在远程操作的机器上也需要安装impitool,然后通过一些命令来操作被控制的机器。

# ipmitool -H yourIP -U myuser -P mypassword power status (查看服务器的电源状态)

# ipmitool -H yourIP -U myuser -P mypassword power reset (关闭电源并重启机器)

# ipmitool -H yourIP -U myuser -P mypassword power on (开电源启动机器)

# ipmitool -H yourIP -U myuser -P mypassword power on (关闭电源)

# ipmitool -H yourIP -I lanplus -U myuser -P mypassword sdr type Temperature (服务器温度)

# ipmitool -H yourIP -I lanplus -U myuser -P mypassword sol activate (连接串口)

# ipmitool -H yourIP -I lanplus -U myuser -P mypassword sol deactivate (断开串口)

 

在介绍BMC之前需要了解一个概念,即平台管理(platform management)。

平台管理表示的是一系列的监视和控制功能,操作的对象是系统硬件。比如通过监视系统的温度,电压,风扇、电源等等,并做相应的调节工作,以保证系统处于健康的状态。

当然如果系统真的不正常了,也可以通过复位的方式来重新启动系统。

同时平台管理还负责记录各种硬件的信息和日志记录,用于提示用户和后续问题的定位。

下图是平台管理涉及到的功能概述:

BMC与BIOS bmc与bios区别_.net_12

以上的这些功能可以集成到一个控制器上来实现,这个控制器被称为基板管理控制器(Baseboard Manager Controller,简称BMC)。BMC是整个服务器单板的大管家。从一款服务器上电时刻,它的所有部件都归BMC来负责和管理。说到这里,大家可能已经了解BMC是与服务器有关的,但还是会有疑惑,BMC到底是啥?它在服务器哪里?它在干什么?

简单提下服务器,服务器从功能上来讲,跟我们日常学习办公使用的台式机和笔记本没有本质区别,主要也是由最为关键的三大件CPU、内存、硬盘组成,但是服务器的应用场景主要是提供给企业等角色用来支撑形形色色业务,不仅仅是用来安装浏览器访问网页、安装播放器看看电影,因此服务器会使用更强的配置,即更强劲的CPU、更大的内存、更大的硬盘存储。从外形上来说,服务器存在多种外形,如机架式、刀片式、塔式等等,最主要的区别在于服务器一般不会配置显示器、键盘、鼠标等部件用于近端操作,一般通过IP远程连接的方式访问即可。因为服务器一般情况下都会放置于单独的机房,而且风扇噪音会比家用电脑更大些。

说到这里,大家可能觉得我懂了,BMC就是跑在服务器上的一个软件是吧?错误。

BMC是一款服务器AC上电起始即运行的软件,运行在服务器上一款单独的ARM芯片上,这个ARM芯片就是BMC软件的CPU,同时会芯片外围会配置自己的RAM、Flash等器件,只要服务器插上电源线,BMC软件便快速运行起来,此时有可能我们通常意义上的x86服务器侧的OS都还没有安装呢。BMC是整个服务器的大管家,主要用于服务器各个部件(CPU、内存、硬盘、风扇、机框等)的温度、电压等健康状态进行检测,同时根据各个温度采集点情况实时调整风扇转速保证服务器不产生过温、而且控制总体功耗又不能过高,如果单板部件出现任何异常则通过SNMP协议、SMTP协议、Redfish协议等多种业界通用规范讲信息及时上报给上层网管,以便运维人员及时处理,保证业务无损。

此处介绍下带外管理和带内的概念,通常情况下x86侧执行的运维管理动作被称作带内的方式,而BMC是脱离x86侧独立运行的服务器管理软件,被称作带外管理软件。

简单来说,BMC可以采集任何服务器上的除x86侧运行的私有业务本身之外的任何信息,本文不展开讲到底可以采集哪种信息,但是请注意,现在业界的BMC带外管理软件有各种解决方案,可以采集到任何你想要的信息,是的,任何。因为即使从带外无法获取的信息,当前业界也存在带外和带内监控结合、带外统一提供接口的方案,可以实现通过BMC获取任何想要获得信息。

从功能上来讲,BMC主要用于采集单个服务器上各种信息,同时提供给上层运维网管软件。主要有两种手段,第一种BMC会提供各种各样的接口供上层网管查询,如web、命令行等人机接口、SNMP、IPMI、Restful等机机接口;第二种是主动上报,当检测到有故障产生时,BMC可以通过SNMP trap消息、SMTP 邮件消息、Redfish http json报文等手段上报给上层网管软件的服务端,以便运维人员及时识别处理故障。一般情况下,BMC软件上报的消息中都会明确的指明具体是哪个部件产生了故障、处理建议是怎样的等等。

此时大家可能存在疑问,在x86侧OS上部署一套自研的Agent,也可以采集到我想要的各种信息,对于少量与硬件强相关的信息,我在带内OS上通过BMC接口查询补全,这种带内结合带外管理的方式不是也挺好吗?

全带外管理,是当前各大服务器厂商推出的单板运维管理的解决方案。各大服务器厂商当前均自研统一的带内Agent信息补全工具,最终汇集信息至BMC侧统一对外提供接口。理论上来说,可以满足单板运维管理的诉求。对于服务器用户来说,这是零成本的解决方案,强烈建议采用,何必自己再研发一套增加成本呢?

另外需要说明的是,BMC是一个独立的系统,它不依赖与系统上的其它硬件(比如CPU、内存等),也不依赖与BIOS、OS等(但是BMC可以与BIOS和OS交互,这样可以起到更好的平台管理作用,OS下有系统管理软件可以与BMC协同工作以达到更好的管理效果)。

一般我们的电脑不会带BMC,因为用处不大,一些温度、电源等的管理,CPU来控制就够了。

但是对于系统要求高的设备,比如服务器,就会用到BMC。

当然因为BMC是一个独立的系统,对于某些嵌入式设备,可能不需要其它处理器,光一个BMC就能完成工作。

说到底BMC本身也是一个带处理器(一般都是ARM处理器)的小系统,单独用来处理某些工作也完全是可以的。