Linux盘符漂移
在Linux系统中,若存在多块硬盘,通常内核分配盘符的顺序是/dev/sda、/dev/sdb、/dev/sdc … …。在系统启动过程中,内核会按照扫描到硬盘的顺序分配盘符。在系统启动后,热插拔硬盘硬盘,系统会顺序分配盘符。在同一个硬盘槽位,每次插入硬盘后,在系统中的盘符都可能不一致。第一次插入时,盘符可能为/dev/sdb,将硬盘拔除后,再次插入硬盘,盘符可能变为/dev/sde,出现盘符漂移。
假设机器上有6个硬盘槽位,槽位号分别为0~5。其中1、2、5槽位有硬盘,则Linux系统后
x 0 | √ 2 | x 4 |
√ 1 | x 3 | √ 5 |
所得到的系统盘符对应关系为:1槽位的硬盘盘符为/dev/sdb,2槽位的硬盘盘符为/dev/sdb,3槽位的硬盘盘符为/dev/sdc。
x 0 | sdb 2 | x 4 |
sda 1 | x 3 | sdc 5 |
系统启动后,我们热插拔硬盘,将一块硬盘插入3槽位,则该硬盘的盘符为/dev/sdd。
x 0 | sdb 2 | x 4 |
sda 1 | sdd 3 | sdc 5 |
再分别在0和4槽位插入硬盘,则系统盘符为:
从上面,我们可以可以看出,Linux分配给硬盘的盘符与所在槽位没有关系,只与插入硬盘的顺序有关。
同时即使在同一槽位的硬盘,也会存在盘符漂移现象。如,当系统中有进程正在读写磁盘/dev/sdd,若此时我们将该硬盘拔除,稍后将硬盘插入,此时得到的盘符可能为/dev/sdg,而不是所希望的/dev/sdd。
sde 0 | sdb 2 | sdf 4 |
sda 1 | sdg 3 | sdc 5 |
盘符漂移现象,给用户带来很大不便,尤其是使用裸设备的用户。
Linux内核盘符绑定实现
在应用层,用户可以编写脚本,来避免盘符漂移带来的不便,但这种方式增加了上层软件的复杂性,同时可能会导致可靠性问题。
我们实现了通过修改内核和驱动来实现盘符绑定。对用户完全透明,且对内核其他模块、上层程序无任何影响。
如同样是有6个硬盘槽位的系统,1、2、5槽位有硬盘,则系统系统后,硬盘盘符对应关系为1 –> /dev/sdb,2 -> /dev/sdc,5-> /dev/sdf。
x 0 | √ 2 | x 4 |
√ 1 | x 3 | √ 5 |
即实现槽位号与盘符完全绑定。
x 0 | sdc 2 | x 4 |
sdb 1 | x 3 | sdf 5 |
当我们在空的槽位上,插入硬盘时,不管插入空槽位插入硬盘顺序如何,得到的盘符始终是和槽位号绑定。
sda 0 | sdc 2 | sde 4 |
sdb 1 | sdd 3 | sdf 5 |
在我们的实现方案中,已实现以下功能:
-
完全实现盘符与槽位绑定。
根据硬盘所在槽位ID号来分配盘符。
- 系统启动时,盘符与槽位绑定。
若相应的槽位上没有硬盘,则保留相应的盘符。
-
热插拔硬盘后,盘符不变;对应的磁盘上有I/O操作时,盘符不变。
系统运行过程中,插入硬盘后,根据槽位号分配盘符。
- 保留n盘符/dev/sda …给硬盘。插拔U盘、USB光驱,不影响。
-
服务器认证
内核自动识别机器是否为特定品牌服务器。若为该品牌服务器,则提供盘符绑定功能。否则,按内核默认策略为磁盘分配盘符。
-
支持多种磁盘控制器
包括LSISAS1064、LSISAS1064E、LSISAS1068、LSISAS1068E。
-
支持所有版本内核
包括RHEL4/5/6系列、SLES9/10/11系列。
此软件是否已经成型,可以使用?
软件已在部分客户用了很久,可以使用。
是什么软件,方便透露一下吗。
这个需要给内核源码打patch,修改SCSI驱动和SAS控制器驱动的。
如何才能能拿到您这个软件?
这个软件是为客户定制的。
有没有这个内核2.6.32-220.23.2的patch包 发我学习学习
http://ilinuxkernel.com/?p=250
ftp://ftp.redhat.com/pub/redhat/linux/enterprise/6Server/en/os/SRPMS/
ftp://ftp.redhat.com/pub/redhat/linux/enterprise/6Server/en/os/SRPMS/kernel-2.6.32-220.23.1.el6.src.rpm
有没有这个内核3.0.93-0.8的patch包 我也学习下
我很少看Suse内核的源码,所以手头上没有这个版本。