【工程师笔记】第一期:小议Linux下磁盘乱序问题
创始人
2025-01-28 19:01:46
0

[[165649]]

做技术的朋友可能有过类似这样的感觉——每天都会遇到新的问题,或者学到新的知识。然而一个人的时间和精力毕竟有限,不是所有的岗位都能做到总是亲力亲为,每人最擅长的领域也各不相同。为了使工程师自己踩过的坑、那些实用的心得体会也能给大家带来帮助,把经验记录和分享出来就显得尤为可贵,这就是我们开设《工程师笔记》专栏的目的。

[[165650]]

[[165651]]

最近碰到客户问有关Linux系统下磁盘乱序的问题,整理了一下供各位参考。个人观点,纰漏之处,还请不吝指正~

在戴尔PowerEdge 11G和12G服务器上,由于LSI(如今的Avago)当时的控制器微码、驱动以及对应Linux kernel 的版本支持问题,确实出现过这种状况(具体涉及到两种SAS HBA/RAID卡: PERC H200(LSI 9211-8i)和 LSI 9207)。此问题在使用了LSI 对应直通SAS控制器芯片的服务器上均会出现,与服务器厂商并无直接关系。结论是客户提到的“磁盘乱序”情况确实是存在过的。

尽管当时的影响不小,圈中也小有轰动,但LSI很快通过Firmware和kernel驱动解决掉了。

当前戴尔全线服务器(13G/12G等),PERC H330(LSI 3008 芯片)、H730/P(LSI 3108 芯片)或是外部端口的12Gbps SAS Ext. HBA等,均不存在磁盘乱序的问题。

所以,在不存在Firmware或驱动bug的情况下,系统识别磁盘设备顺序会按照总线及驱动加载顺序进行。从前向后,或从后向前,总之是规则有序的,不能称为“乱”序。

Linux kernel指派sdx为设备名对应磁盘的方式其实很早就已经不推荐了。大约在2.6.13 Kernel版本以后,为保证persistent naming(持久的命名),udev默认会在/dev目录下创建by-lable、by-uuid 等目录,通过磁盘唯一的标识方式创建symbolic link(符号连接)来指向实际的设备节点。

结合服务器上的RAID控制器,当用户既要配置JBOD又要配置RAID时,JBOD的每块磁盘其实是最先被系统识别到的,优先级最高;然后按照磁盘slot ID 依次排序。如果同时配置了Raid VD,均会被靠后识别,排至JBOD最后一块磁盘的后面。

举个实际的例子如下:

戴尔一款16个硬盘槽位的服务器机型,当slot 0,1上的硬盘做RAID 1为第一个VD0,slot 12-slot 15 硬盘做RAID 6 为第二个VD1;其余槽位硬盘slot 2-slot 11 均做JBOD。这样,做JBOD 的第一块盘即slot2 槽位的磁盘将会是dev/sda,以此类推直到JBOD 全部磁盘按顺序分配,之后才开始为RAID 第一组VD 进行分配。即VD0 会是dev/sdk,VD1 为/dev/sdl。

如果客户仍然希望用 sdX 的方式来对应磁盘物理顺序,有一个变通的办法,就是需要通过手工改动/etc/udev/rules.d 文件的方式来实现。

具体可参考如下:

KERNEL=="sda*" NAME="sdb%n" 

KERNEL=="sdb*" NAME="sdc%n" 

KERNEL=="sdc*" NAME="sdd%n" 

KERNEL=="sdd*" NAME="sde%n" 

KERNEL=="sde*" NAME="sdf%n" 

KERNEL=="sdf*" NAME="sdg%n" 

KERNEL=="sdg*" NAME="sdh%n" 

KERNEL=="sdh*" NAME="sdi%n" 

KERNEL=="sdi*" NAME="sdj%n" 

KERNEL=="sdj*" NAME="sdk%n" 

KERNEL=="sdk*" NAME="sda%n" 

但是要注意,这种方式有很大的局限性。一旦RAID配置改变,增减VD或者JBOD磁盘的增减都会造成人为乱序的情况。

综上所述,我们仍然建议引导客户接受采用By uuid(绑定)或By lable的方式来管理。

具体可参见:《Persistent block device naming》https://wiki.archlinux.org/index.php/Persistent_block_device_naming#Persistent_naming_methods

不知您看完本文有什么感想,是否有帮助呢?如果您对《工程师笔记》栏目有任何的意见或者建议,都可以在文章下面留言,以便我们将来能够更好地为读者服务。

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...