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


介绍


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

  1. Linux SCSI子系统概述

  2. Linux主机LUN识别

  3. 动态SAN网络重配

  4. LUN发现步骤

  5. Linux设备命名

  6. SCSI磁盘限制

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


作为系列之二,本文主要介绍LUN发现步骤和Linux设备命名两大主题,解答用户常见问题乳:Linux驱动除了LUN 0以外,没有自动配置其他LUN怎么办?Linux磁盘的命名规则是什么?


更多信息


LUN发现步骤:


如果用户的Linux驱动除了LUN 0以外,没有自动配置其他LUN,用户可以根据SCSI中间层驱动使用的参数和设置来手动配置。以下示例显示了Linux主机/proc/scsi/scsi文件中,各适配器端口仅配置了第一个LUN,即LUN 0的情况。


# cat proc/scsi/scsi

...

Host: scsi0 Channel: 00 Id: 00 Lun: 00

 Vendor: EMC      Model: SYMMETRIX    Rev: 5773

 Type:   Direct-Access                    ANSI SCSI revision: 04

Host: scsi0 Channel: 00 Id: 15 Lun: 00

 Vendor: EMC      Model: SYMMETRIX    Rev: 5773

 Type:   Direct-Access                    ANSI SCSI revision: 04

Host: scsi2 Channel: 00 Id: 00 Lun: 00

 Vendor: EMC      Model: SYMMETRIX    Rev: 5773

 Type:   Direct-Access                    ANSI SCSI revision: 04

Host: scsi3 Channel: 00 Id: 00 Lun: 00

 Vendor: EMC      Model: SYMMETRIX    Rev: 5773

 Type:   Direct-Access                    ANSI SCSI revision: 04

Host: scsi3 Channel: 00 Id: 01 Lun: 00

 Vendor: EMC      Model: SYMMETRIX    Rev: 5773

 Type:   Direct-Access                    ANSI SCSI revision: 04


解决这一问题有两种方式:

  1. 创建脚本在/proc/scsi/scsi文件中手动添加磁盘设备

  2. 通过修改initrd设置系统启动时自动发现LUN


创建脚本echo /proc文件系统


使用scsi add-single-device命令连续配置分配给主机的所有LUN。写一个脚本为各主机适配器重复scsi add-single-device命令,从而给每一个LUN配置ID。该脚本必须扫描所有主机适配器端口并识别分配给各端口的所有LUN


脚本运行结束之后,用户可以在/proc/scsi/scsi文件中查看分配的所有LUN

以下示例列出脚本配置所有LUN之后的/proc/scsi/scsi文件。

# cat proc/scsi/scsi

...

Host: scsi3 Channel: 00 Id: 01 Lun: 00

 Vendor: EMC      Model: SYMMETRIX    Rev: 5773

 Type:   Direct-Access                    ANSI SCSI revision: 04

Host: scsi3 Channel: 00 Id: 00 Lun: 01

 Vendor: EMC      Model: SYMMETRIX    Rev: 5773

 Type:   Direct-Access                    ANSI SCSI revision: 04

Host: scsi3 Channel: 00 Id: 00 Lun: 02

 Vendor: EMC      Model: SYMMETRIX    Rev: 5773

 Type:   Direct-Access                    ANSI SCSI revision: 04

Host: scsi3 Channel: 00 Id: 00 Lun: 03

 Vendor: EMC      Model: SYMMETRIX    Rev: 5773

 Type:   Direct-Access                    ANSI SCSI revision: 04

Host: scsi3 Channel: 00 Id: 00 Lun: 04

 Vendor: EMC      Model: SYMMETRIX    Rev: 5773

 Type:   Direct-Access                    ANSI SCSI revision: 04

...


在系统启动时自动发现LUN


第二种方法是通过设置SCSI中间层驱动的参数来完成,此参数控制在SCSI总线扫描过程中扫描LUN的数量。以下步骤同时适用于2.42.6内核版本,但假定SCSI中间层驱动编译为scsi_mod模块,并在系统启动时自动加载。对于Linux 2.4内核版本,为了发现所有卷,通常在系统中设置为磁盘设备的最大数量,用户需要设置SCSI中间层驱动的max_scsi_luns参数。例如,如果max_scsi_luns设置为1SCSI总线只扫描到LUN 0。此参数应当设置为内核能够支持的最大磁盘数量,例如,128256。在Linux 2.6内核中,可使用同样的步骤,除了参数名从max_scsi_lun更改为max_lun


  • 编辑/etc/modules.conf文件

  • 添加以下内容:

options scsi_mod max_scsi_luns=<n>n表示探测的LUN总数)

  • 保存文件

  • 运行mkinitrd命令重新编译当前内核相应的ram-disk。以下命令示例中,<kernel>为当前运行内核版本,可参见”uname -r”命令的输出,例如:2.4.21-292-smp


SUSE中命令如下:

cd /boot

mkinitrd –k vmlinuz-<kernel> -i initrd-<kernel>


Red Hat中命令如下:

cd /boot

mkinitrd –v initrd-<kernel>.img <kernel>

  • 重启主机

  • 验证/boot/grub/menu.lst文件中,已正确配置了新创建的initrd镜像。


Linux设备命名:


内核驱动可使用特定的设备文件来控制磁盘设备。映射到同一物理磁盘设备的设备文件可能不止一个。例如,在多路径环境下某一设备配置四条路径,则会有四个不同的设备文件映射到同一设备。


设备文件位于/dev目录下,通过majorminor编号访问。光纤通道连接的设备通过sd驱动作为SCSI磁盘设备管理。因此,每一个LUN/dev目录下有一个对应的设备文件。


SCSI磁盘设备有一个以“sd”为前缀的特定设备文件,具有如下命名格式:

/dev/sd[a-z][1-15]


名称中不带数字表示整个磁盘,而名称中有数字则表示磁盘的一个分区。依据惯例,一个SCSI磁盘设备最多可以有16minor编号。因此,对于一整块磁盘,每块磁盘最多有15个分区,使用一个minor编号来标示整块磁盘(例如/dev/sda),其他15minor编号用来标示该磁盘的分区(例如/dev/sda1/dev/sda2,等等)。以下示例显示整块磁盘/dev/sda的设备文件,该设备major编号为8minor编号为0,有15个分区。


# ls -l /dev/sda*

brw-rw----  1 root disk  8,   0 May 24 08:09 /dev/sda

brw-rw----  1 root disk  8,   1 May 24 08:09 /dev/sda1

brw-rw----  1 root disk  8,  10 May 24 08:09 /dev/sda10

brw-rw----  1 root disk  8,  11 May 24 08:09 /dev/sda11

brw-rw----  1 root disk  8,  12 May 24 08:09 /dev/sda12

brw-rw----  1 root disk  8,  13 May 24 08:09 /dev/sda13

brw-rw----  1 root disk  8,  14 May 24 08:09 /dev/sda14

brw-rw----  1 root disk  8,  15 May 24 08:09 /dev/sda15

brw-rw----  1 root disk  8,   2 May 24 08:09 /dev/sda2

brw-rw----  1 root disk  8,   3 May 24 08:09 /dev/sda3

brw-rw----  1 root disk  8,   4 May 24 08:09 /dev/sda4

brw-rw----  1 root disk  8,   5 May 24 08:09 /dev/sda5

brw-rw----  1 root disk  8,   6 May 24 08:09 /dev/sda6

brw-rw----  1 root disk  8,   7 May 24 08:09 /dev/sda7

brw-rw----  1 root disk  8,   8 May 24 08:09 /dev/sda8

brw-rw----  1 root disk  8,   9 May 24 08:09 /dev/sda9


对于Red Hat版本,内核实际上为128个设备创建了设备文件。对于SUSE,只有前16块磁盘有设备文件。用户必须使用mknod命令为其他磁盘创建设备文件。在2.6内核版本中,只有在内核发现并识别出设备时才能创建设备文件。/proc/partitions文件列出所有SCSI磁盘驱动识别出的“sd”设备,包括sd名,major编号,minor编号,以及各磁盘设备的大小。


以下示例列出/proc/partitions文件的内容:

# cat /proc/partitions

major minor  #blocks  name


  8     0   17774160 sda

  8     1    1052226 sda1

  8     2     208845 sda2

  8     3   10490445 sda3

  8    16     976576 sdb

  8    32     976576 sdc

  8    48     976576 sdd

  8    64     976576 sde

  8    80     976576 sdf

  8    96     976576 sdg

  8   112     976576 sdh

  8   128     976576 sdi

  8   144     976576 sdj

  8   160     976576 sdk

  8   176     976576 sdl

  8   192     976576 sdm

  8   208     976576 sdn

  8   224     976576 sdo

  8   240     976576 sdp

 65     0     976576 sdq

 65    16    1048576 sdr

 65    32    1048576 sds

 65    48    1048576 sdt

 65    64    1048576 sdu

 65    80    1048576 sdv

 65    96    1048576 sdw

 65   112    1048576 sdx

 65   128    1048576 sdy

 65   144    1048576 sdz

 65   160    1048576 sdaa

 65   176    1048576 sdab

 65   192    1048576 sdac

 65   208    1048576 sdad

 65   224    1048576 sdae

 65   240    1048576 sdaf

 66     0    1048576 sdag

 66    16    1048576 sdah

 66    32    1048576 sdai

 66    48    1048576 sdaj

 66    64    1048576 sdak

 66    80    1048576 sdal

 66    96    1048576 sdam

 66   112    1048576 sdan

 66   128    1048576 sdao

 66   144    1048576 sdap

 66   160    1048576 sdaq

 66   176    1048576 sdar

 66   192    1048576 sdas

 66   208    1048576 sdat

 66   224    1048576 sdau

 66   240    1048576 sdav