开始新对话

未解决

此帖子已超过 5 年

2286

2013年12月22日 18:00

Linux系统SCSI磁盘管理全攻略(三)

​ ​
​ ​

​Linux​​系统​​SCSI​​磁盘管理全攻略(三)​

​ ​
​ ​

​ ​

​转载请在文首保留原文出处:​​EMC​​中文支持论坛​​https://community.emc.com/go/chinese​

​ ​


​ ​
​ ​

​介绍​

​ ​
​ ​

​ ​

​Linux系统SCSI磁盘管理全攻略(一)​

​ ​

​Linux系统SCSI磁盘管理全攻略(二)​

​ ​


​ ​

​本系列文章系统、全面地介绍了​​Linux ​​的​​SCSI​​设备管理机制和整套操作命令。包括以下六大主题:​

​ ​
    ​ ​
  1. ​Linux SCSI​​子系统概述​
  2. ​ ​
  3. ​Linux​​主机​​LUN​​识别​
  4. ​ ​
  5. ​动态​​SAN​​网络重配​
  6. ​ ​
  7. ​LUN​​发现步骤​
  8. ​ ​
  9. ​Linux​​设备命名​
  10. ​ ​
  11. ​SCSI​​磁盘限制​
  12. ​ ​
​ ​

​附:​​SCSI​​磁盘问题识别与解决方法​

​ ​

​ ​

​作为系列之三,本文主要回答​​Linux​​磁盘设备数量与​​major​​和​​minor​​的关系,以及​​SCSI​​磁盘问题识别与解决方法。​

​ ​

​ ​
​ ​

​更多信息​

​ ​
​ ​

​ ​

​Linux​​磁盘限制​​:​​定义磁盘设备数量​

​ ​

​ ​

​Linux​​内核使用静态的​​major​​和​​minor​​编号来进行​​SCSI​​寻址。​​major​​可看作设备驱动程序,同一设备驱动程序管理的设备由相同的​​major​​编号。而​​minor​​编号代表被访问的具体设备。内核为​​SCSI​​磁盘设备保留了一定数量的​​major​​编号。因此,​​SCSI​​磁盘设备的数量受到可用的​​major​​编号的限制。这些可用的​​major​​编号数量又随内核版本不同而有所区别。​

​ ​

​ ​

​对于​​Linux 2.4​​内核版本,​​Linux​​主机系统上最大可配置设备数是​​128​​、​​256​​或​​2304​​。保留​​8​​位​​bit​​位用作​​minor​​编号,因此对于每一个​​major​​有​​256​​个可用的​​minor​​编号。按照惯例,每块​​SCSI​​磁盘要保留​​16​​个​​minor​​,因此每块磁盘最多可有​​15​​个分区(另​​1​​个​​minor​​代表整块磁盘)。这样,通过​​16​​个​​minor​​编号来定义一块磁盘和它的分区,而最多可以有2^8​​=​​256​​个​​minor​​,则每个​​major​​编号可支持​​256​​÷​​16=16​​块​​SCSI​​磁盘。​

​ ​

​ ​

​比较旧的内核版本为​​SCSI​​磁盘设备保留​​8​​个​​major​​编号。分别是​​8,65,66,67,68,79,70​​和​​71​​。​​REHL2.1​​和​​REHL3​​中,就是使用以上保留的​​major​​。有了这​​8​​个保留的​​major​​,和每个​​major​​有的​​16​​个​​minor​​编号,内核一共可支持​​8​​×​​16=128​​个磁盘设备。早期的​​SuSE SLES8​​内核由于保留​​16​​个​​major​​,共可以支持​​256​​个磁盘设备。额外的​​major​​编号是​​128, 129, 130, 131, 132, 133, 134, 135​​。​

​ ​

​ ​

​新的内核版本使用动态配置的方法,在头​​16​​个保留​​major​​编号用完之后,会使用任何可用的​​major​​编号。因此这些内核可支持​​2304​​个磁盘设备。​

​ ​

​ ​

​通常,可使用以下公式来计算​​Linux​​主机系统可支持的最大设备数:​

​ ​

​最大磁盘数​​=major​​编号数×​​minor​​编号数÷分区数​

​ ​

​例如:磁盘数​​=8​​×​​256​​÷​​16=128​​或 磁盘数​​=144​​×​​256​​÷​​16=2304​

​ ​

​ ​

​对于​​Linux2.6​​内核版本​​major​​数增长至​​12​​比特位而​​minor​​增长至​​20​​比特位,因此​​Linux 2.6​​内核支持上千块磁盘,每块磁盘最多​​15​​个分区的限制没有改变。由于​​major​​并不仅仅用于磁盘(​​/proc/devices​​),所以不能以2^12​​个​​major​​来计算磁盘个数。一个​​major​​可用的​​minor​​数就达到2^20​​=65536​​,而每个​​SCSI​​磁盘​​16​​个​​minor​​的限制仍然不变,每个​​major​​可支持2^20​​÷​​16=4096​​个。​

​ ​

​ ​

​其他限制磁盘数量的因素​

​ ​

​ ​

​ ​

​如果主机适配器驱动作为模块加载在​​Linux​​系统中,则内核对可配置磁盘总数有一定的限制。有可能小于内核支持的最大值(通常​​128​​或​​256​​)。系统加载的第一个模块发现磁盘数可配置为内核支持的最大磁盘数,之后的驱动则达不到这个值。所有这些驱动共享一个​​pool​​中的设备结构,这些设备结构是在第一个主机适配器驱动加载后静态分配的。​

​ ​

​ ​

​ ​

​SCSI​​磁盘问题识别与解决方法:​

​ ​

​ ​
    ​ ​
  • ​SAN​​发生故障之后,内核可能永久禁用​​LUN​​并对磁盘设备记录一条消息:“​​device set offline​​”。如果这发生在​​2.4​​内核版本,则无法将​​LUN​​重新设为​​online​​,除非卸载底层设备驱动并重新加载,或重启系统。​
  • ​ ​
​ ​

​ ​
    ​ ​
  • ​在​​2.6​​内核版本上,设备可通过以下方法之一重新设置为​​online​​:​
  • ​ ​
​ ​

​Redhat: echo "running" >/sys/class/scsi_host/hostH/device/targetH:C:T/H:C:T:L/state​

​ ​

​SLES: echo "1" > /sys/class/scsi_host/hostH/device/H:C:T:L /online​

​ ​

​ ​
    ​ ​
  • ​系统​​ps​​命令可能周期性显示进程处于​​D-state​​,表示不可中断的状态,这是由于进程一直在内核中等待。在错误的情形下,进程可能永久停留在这个状态,需要系统重启才能回复。​
  • ​ ​
​ ​

​ ​
​ ​

​参考​

​ ​
​ ​

​ ​

​Linux​​系统​​SCSI​​磁盘管理全攻略(一)​

​ ​

​Linux​​系统​​SCSI​​磁盘管理全攻略(二)​

​ ​

​Linux​​系统​​SCSI​​磁盘扫描机制解析及命令实例​

​ ​


​ ​
​ ​

​应用于​

​ ​
​ ​

​ ​

​Linux​​操作系统​

​ ​

​ ​

​ ​

​ ​

​ ​

​ ​

​ ​

​ ​

2 Intern

 • 

146 消息

2013年12月26日 02:00

”在2.6内核版本上,设备可通过以下方法之一重新设置为online。“能举个故障的例子吗?

2 Intern

 • 

1.2K 消息

2013年12月26日 17:00

SAN发生故障之后,内核可能永久禁用LUN并对磁盘设备记录一条消息:“device set offline”。

找不到事件!

Top