早前写过一篇【利用Raid卡工具获取逻辑盘是否为SSD】的文章,大概讲述了如何通过raid卡工具判断一个逻辑磁盘对应物理磁盘是否为SSD,当时主要提到了megacli和sas3ircu这两种工具,核心是如何通过raid卡工具定位到逻辑磁盘对应的物理磁盘的位置,当时的方式现在看来在有些场景会存在缺陷。
当时的方案主要是先通过lspci获取raid卡型号,然后找到对应的raid卡型号,紧接着通过lsscsi命令获取逻辑磁盘的targetid,再通过raid卡工具根据targetid定位到对应的物理盘。当时的方案在多controller的场景下存在问题,可能会出现重复target id的情况,所以这时候只能再借助controller id来定位唯一的磁盘了。总而言之,想真正定位逻辑磁盘对应的物理磁盘,就必须要获取到磁盘的controller id,enclosure id和slot number,有了这三个参数,便可以获取该磁盘的信息,或者对该物理磁盘进行点灯、响音和做raid等操作。
那么,具体如何定位逻辑磁盘的物理位置呢?且看下文分析
获取 raid 卡信息
通过lspci命令可以获取到操作系统上所有raid卡信息,我们可以看到每个raid卡最前面都有一串数字,比如第一行是02:00.0,第二行是03:00.0,这里的02和03表示的是raid卡的busid,即raid卡控制器在pci总线上的id。
[root@tony ~]# lspci | grep "LSI Logic"
02:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS-3 3008 [Fury] (rev 02)
03:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS-3 3108 [Invader] (rev 02)
获取磁盘 pcipath
在linux中,一切皆文件,每个文件都有自己的唯一标识,对于磁盘而言,pcipath就是它的唯一标识,pci总线上面有很多控制器,比如scsi控制器,而磁盘又存在于scsi