Linux系统中绑定盘符的方法和装置的制造方法

文档序号:8380689阅读:1413来源:国知局
Linux系统中绑定盘符的方法和装置的制造方法
【技术领域】
[0001]本发明实施例涉及操作系统领域,并且更具体地,涉及Linux系统中绑定盘符的方法和装置。
【背景技术】
[0002]当Linux系统中存在多块硬盘时,通常由内核中的小型计算机系统接口(SmallComputer System Interface,SCSI)驱动模块为各硬盘分配盘符,例如,/dev/sda、/dev/sdb、/dev/sdc、……等。在系统启动过程中,内核会按照扫描到硬盘的顺序分配盘符。在系统启动后,热插拔硬盘时,系统则会在增加新的硬盘后顺次分配盘符。由此,对同一个硬盘槽位而言,每次启动或热插拔硬盘后,该槽位在系统中的盘符可能不一致。即Linux系统为硬盘分配的盘符与硬盘所在槽位没有关系,只与硬盘插入或被扫描到的顺序有关。例如,对一个槽位而言,第一次插入硬盘时为其分配的盘符为/dev/sdb,当系统中有进程正在读写该磁盘/dev/sdb时将硬盘拔除,稍后再次插入硬盘,系统为其分配的盘符可能变为/dev/sde,而不是所希望的/dev/sdb,将这种现象称为盘符漂移。
[0003]当前,系统中使用的存储板可以支持越来越多的硬盘,例如,SIGMA公司开发的GSU存储板可以支持14块硬盘,因此迫切的需要实现盘符与槽位号绑定功能。现有的一种技术是利用Linux系统中的设备管理器UDEV实现用户态设备文件的创建工作。每当有磁盘设备增加的时候,SCSI模块为该磁盘设备分配盘符,例如为sdx,内核发出用户空间事件(uevent)的通知(notify),UDEV守护进程收到这个事件以后,从/etc/udev/rules.d/*.rules下读取创建规则(查询该物理磁盘的槽位号(slot ID)或选择独立磁盘冗余阵列(Redundant Array of Independent Disks,RAID)逻辑磁盘内某个物理磁盘的 slot ID,根据该slot ID分配对应的盘符sdy),依照读到的规则进行用户态设备/dev/sdy的创建。
[0004]使用上述方案,只能实现用户态设备的盘符/dev/sdy与槽位号slot ID的绑定。而内核设备的盘符/sys/block/sdx和/sys/class/block/sdx没有修改,仍然为SCSI模块根据预设的规则分配的盘符sdx。系统中有些进程会直接通过/sys/下的内核设备的盘符来进行硬盘检测,此时就会出现进程上报的盘符sdx与用户态设备sdy不一致的现象。

【发明内容】

[0005]本发明实施例提供一种Linux系统中绑定盘符的方法和装置,能够实现槽位与盘符绑定,并能保证用户态设备的盘符与内核设备的盘符一致。
[0006]第一方面,提供了一种Linux系统中绑定盘符的方法,包括:
[0007]在所述Linux系统中增加磁盘设备时,内核为所述磁盘设备分配内核设备对应的第一盘符;
[0008]设备管理器UDEV获取指示所述磁盘设备的槽位的信息,根据所述磁盘设备的槽位,以及预设的槽位和盘符的映射关系,为所述磁盘设备分配用户态设备对应的第二盘符,其中,所述第一盘符与所述第二盘符不同;
[0009]所述UDEV向所述内核发送改名消息,所述内核根据所述改名消息,将所述内核设备的名称和指向所述内核设备的链接的名称由所述第一盘符修改为所述第二盘符。
[0010]结合第一方面,在第一方面的第一种可能的实现方式中,所述内核根据所述改名消息,将所述内核设备的名称和指向所述内核设备的链接的名称由所述第一盘符修改为所述第二盘符,包括:
[0011]所述内核将/sys/devices目录下的所述内核设备的名称由所述第一盘符修改为所述第二盘符;
[0012]所述内核将/sys/block目录下的指向所述内核设备的链接的名称由所述第一盘符修改为所述第二盘符;
[0013]所述内核将/sys/class/block/目录下的指向所述内核设备的链接的名称由所述第一盘符修改为所述第二盘符。
[0014]结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述方法还包括:
[0015]所述内核根据所述改名消息中的所述第一盘符,确定待改名的所述内核设备;
[0016]所述内核确定所述内核设备的分区;
[0017]所述内核将所述内核设备的分区的名称中的盘符和指向所述内核设备的分区的链接的名称中的盘符由所述第一盘符修改为所述第二盘符。
[0018]结合第一方面和第一方面的第一种至第二种可能的实现方式中的任一种可能的实现方式,在第一方面的第三种可能的实现方式中,所述改名消息包括所述用户态设备对应的所述第二盘符和由所述内核通知的所述内核设备对应的所述第一盘符。
[0019]结合第一方面和第一方面的第一种至第三种可能的实现方式中的任一种可能的实现方式,在第一方面的第四种可能的实现方式中,所述UDEV获取指示所述磁盘设备的槽位的信息,包括:
[0020]在所述磁盘设备为物理磁盘时,所述UDEV获取所述物理磁盘的槽位号;
[0021]在所述磁盘设备为独立磁盘冗余阵列RAID逻辑磁盘时,所述UDEV获取所述RAID逻辑磁盘对应的所有物理磁盘的槽位号中最小的槽位号。
[0022]第二方面,提供了一种Linux系统中绑定盘符的装置,包括内核和设备管理器UDEV,其中,
[0023]所述内核用于在所述Linux系统中增加磁盘设备时,为所述磁盘设备分配内核设备对应的第一盘符;
[0024]所述UDEV用于获取指示所述磁盘设备的槽位的信息,根据所述磁盘设备的槽位,以及预设的槽位和盘符的映射关系,为所述磁盘设备分配用户态设备对应的第二盘符,其中,所述第一盘符与所述第二盘符不同;
[0025]所述UDEV还用于向所述内核发送改名消息,所述内核还用于根据所述改名消息,将所述内核设备的名称和指向所述内核设备的链接的名称由所述第一盘符修改为所述第二盘符。
[0026]结合第二方面,在第二方面的第一种可能的实现方式中,所述内核具体用于:
[0027]将/sys/devices目录下的所述内核设备的名称由所述第一盘符修改为所述第二盘符;
[0028]将/sys/block目录下的指向所述内核设备的链接的名称由所述第一盘符修改为所述第二盘符;
[0029]将/sys/class/block/目录下的指向所述内核设备的链接的名称由所述第一盘符修改为所述第二盘符。
[0030]结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述内核还用于:
[0031]根据所述改名消息中的所述第一盘符,确定待改名的所述内核设备;
[0032]确定所述内核设备的分区;
[0033]将所述内核设备的分区的名称中的盘符和指向所述内核设备的分区的链接的名称中的盘符由所述第一盘符修改为所述第二盘符。
[0034]结合第二方面和第二方面的第一种至第二种可能的实现方式中的任一种可能的实现方式,在第二方面的第三种可能的实现方式中,所述改名消息包括所述用户态
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1