本发明涉及计算机技术领域,特别是涉及一种服务器的磁盘盘符绑定方法。
背景技术:
python语言是一种面向对象、解释型计算机程序设计语言,如今,它被越来越多地应用在it运维自动化领域。python在系统管理上的优势在于强大的开发能力和完整的工具链,python已成为运维人员手中的利器。
内核设备管理器(udev)是linux2.6内核里的一个功能,它代替了原来的devfs,成为当前linux系统默认的设备管理工具。内核设备管理器(udev)以守护进程的形式存在,通过侦听内核发出来的动作事件来管理/dev目录下的设备文件。若存在多块硬盘,在系统启动过程中,当设备添加时,内核设备管理器(udev)的守护进程侦听来自内核的动作事件,以此来添加/dev下的设备文件,内核会按照扫描到硬盘的顺序分配盘符,通常内核分配盘符的顺序是/dev/sda、/dev/sdb、/dev/sdc……在系统启动后,若热插拔硬盘,系统会按照已分配的盘符顺序,以顺延的方式来分配盘符。例如:在系统启动时,一个设备文件被分配了/dev/sdb盘符,当此设备被热插拔后,系统再次扫描时给其分配的盘符可能就是/dev/sdh。linux默认的设备管理工具显然已经不错了,但是不能覆盖全部的应用场景,比如针对同一个硬盘槽位,每次插拔或者更换硬盘后,在系统中的盘符都可能不一致。第一次插入时,盘符可能为/dev/sdb,将硬盘拔除后,再次插入硬盘,盘符可能变为/dev/sde,此情况若服务器发生重启,内核重新扫描后的盘符可能又会发生变化,出现盘符漂移。当使用系统内核分配的盘符创建oracle的asmdg,若发生盘符漂移,oracle的asmdg就会无法挂载,导致oracle数据库无法使用。
技术实现要素:
本发明针对现有技术中硬盘在插拔过程中导致服务器重启问题、磁盘盘符漂移的缺点,提供了一种服务器的磁盘盘符绑定方法。
为了解决上述技术问题,本发明通过下述技术方案得以解决。
一种服务器的磁盘盘符绑定方法,包括如下步骤:
(1)系统启动前,将主机上的各个槽位插上磁盘;
(2)系统启动过程中,内核为磁盘分配对应的系统盘符,内核会按照扫描到磁盘的顺序来进行先后分配磁盘,内核扫描顺序为按照磁盘名称的字母顺序进行扫描;
(3)系统盘符绑定根据内核设备管理器规则文件,将系统盘符与服务器上的槽位绑定,内核设备管理器向内核发送更名消息,内核根据更名消息进行修改系统盘符,修改过程包括:
①内核将linux系统目录下的该内核设备的名称由系统盘符修改为槽位盘符;
②内核将linux系统目录下的指向该内核设备的链接的名称由该系统盘符修改为槽位盘符;
(4)内核设备管理器根据步骤(3)修改的系统盘符对磁盘绑定形成绑定符,包括:
①对设备进行判断是否为磁盘设备,如否则跳出;如是,则通过内核设备管理器进行接收内核中设备的动作事件,进入下一步骤;
②通过linux命令获取磁盘设备的id路径号,调用外部的python脚本命令同时将获取的id路径号带入生成绑定符;
③然后将绑定符链接到磁盘文件夹下,在磁盘文件夹下产生与绑定符对应的磁盘设备。
作为优选,步骤(3)中,槽位的信息为磁盘所在物理槽位id号码。
作为优选,绑定符包括服务器槽位信息、和磁盘设备编码。
本发明由于采用了以上技术方案,具有显著的技术效果:使用本发明后,将磁盘槽位和盘符进行绑定,重启之后可以确保oracleasm使用得磁盘盘符不会发生变化,具有良好的稳定性。同时可支持在线更换磁盘,使更换磁盘更加方便。
附图说明
图1是本发明一种服务器的磁盘盘符绑定方法的运行过程示意图。
具体实施方式
下面通过实施例对本发明作进一步详细描述。
如图1所示,一种服务器的磁盘盘符绑定方法,包括如下步骤:
(1)系统启动前,将主机上的各个槽位插上磁盘;
(2)系统启动过程中,内核为磁盘分配对应的系统盘符,内核会按照扫描到磁盘的顺序来进行先后分配磁盘,内核扫描顺序为按照磁盘名称的字母顺序进行扫描;
(3)系统盘符绑定根据内核设备管理器规则文件,将系统盘符与服务器上的槽位信息绑定,槽位的信息为磁盘所在物理槽位id号码,内核设备管理器向内核发送更名消息,内核根据更名消息进行修改系统盘符,修改过程包括:
①内核将linux系统目录下的该内核设备的名称由系统盘符修改为槽位盘符;
②内核将linux系统目录下的指向该内核设备的链接的名称由该系统盘符修改为槽位盘符;
(4)内核设备管理器根据步骤(3)修改的系统盘符对磁盘绑定形成绑定符,包括:
①对设备进行判断是否为磁盘设备,如否则跳出;如是,则通过内核设备管理器进行接收内核中设备的动作事件,进入下一步骤;
②通过linux命令获取磁盘设备的id路径号,调用外部的python脚本命令同时将获取的id路径号带入生成绑定符,绑定符包括服务器槽位信息、和磁盘设备编码。
③然后将绑定符链接到磁盘文件夹下,在磁盘文件夹下产生与绑定符对应的磁盘设备。
udev为linux系统的内核设备管理器,用于管理/dev目录下的设备节点,当磁盘设备添加、删除或更新时,由udev守护进程侦听来自内核的热插拔事件,以此udev来添加、删除或更新/dev下的设备文件。
具体udev规则设置如下:
如果有一个设备的内核设备名称以sd开头并且发生添加或者改变行为的设备,则该条件生效:
kernel=="sd*",action=="add|change",subsystems=="block",
调用外部python脚本命令生成聚合盘符所需要的id_path号:
import{program}="/usr/bin/pythondisk2slot.pyc$env{id_path}",
生成聚合盘符p0b00s00,聚合盘符生成后,为设备文件产生符号链接,链接到/dev/qdisk/目录下,该目录为手动生成:
env{devtype}!="partition",env{qdisk_slot}!="",symlink+="qdisk/$env{qdisk_slot}"
kernel=="sd*",subsystem=="block",env{devtype}=="partition",env{qdisk_slot}!="",symlink+="qdisk/$env{qdisk_slot}p%n"。
以p0b00s00为例子,p0b00s00中的p0部分代表管理该磁盘的raid卡是插在服务器的几号槽位,例如p0就代表1号槽位,p1就代表2号槽位,依次类推;p0b00s00中的b00代表该磁盘设备的box编码;p0b00s00中的s00代表该磁盘设备在服务器上的具体槽位位置,s00表示该磁盘插在服务器磁盘槽位的第1个槽位,s01表示该磁盘插在服务器磁盘槽位的第2个槽位,原来linux系统默认的磁盘盘符是sda,sdb或者sdc这样的形式,依次按字母顺序后延,linux系统默认情况下的磁盘盘符在系统重启后会发生变化。改进后的磁盘盘符即为绑定符(p0b00sxx),在系统重启后磁盘盘符不会发生变化。
使用本发明后,将磁盘槽位和盘符进行绑定,重启之后可以确保oracleasm使用得磁盘盘符不会发生变化,具有良好的稳定性。同时可支持在线更换磁盘,使更换磁盘更加方便。
实施例1
在系统默认的磁盘盘符中,磁盘盘符的路径为/dev/sda,触发udev规则后,对磁盘设备路径名称(/dev/sda)进行更名,通过udevadmtest/sys/block/sda获得磁盘的id-path,然后通过python脚本生成磁盘盘符,脚本为disk2slot.pyc,脚本命令为/usr/bin/python/disk2slot.pyc$env{id_path},磁盘盘符生成绑定符得到为p0b00s00,进而执行symlink+="qdisk/$env{qdisk_slot}把磁盘设备链接到/dev/qdisk/目录下,最终磁盘设备的链接为/dev/qdisk/p0b00s00。
总之,以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所作的均等变化与修饰,皆应属本发明专利的涵盖范围。