如何在Linux上扫描/检测新LUN

时间:2020-03-05 15:29:22  来源:igfitidea点击:

当我们运行带有DM-Multipath和软件iSCSI启动器的RedHat Enterprise Linux 5、6和7系列系统时,可以通过重新扫描主机上的iSCSI服务来发现新的LUN。

重新扫描服务将显示已映射到主机的所有新创建的LUN。
在本教程中,我将显示用于扫描和检测(输出以检查)连接到Centos/RHEL服务器的新lun的命令。

要在Linux中扫描新的FC LUN和SCSI磁盘,可以使用echo script命令进行手动扫描,而无需重新引导系统。

但是,从Redhat Linux 5.4开始,Redhat引入了“ /usr/bin/rescan-scsi-bus.sh”脚本来扫描所有LUN并更新SCSI层以反映新设备。

检查连接的磁盘数

我们可以使用以下命令来识别现有LUN以及如何将新映射的LUN添加到Linux。

# cat /proc/scsi/scsi | egrep -i 'Host:' | wc -l
7

我们可以使用以下命令来更好地输出所有磁盘

# fdisk -l 2>/dev/null | egrep '^Disk' | egrep -v 'dm-|type|identifier'
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Disk /dev/sdb: 16.1 GB, 16106127360 bytes, 31457280 sectors
Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
Disk /dev/mapper/centos-root: 18.8 GB, 18756927488 bytes, 36634624 sectors
Disk /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 sectors
Disk /dev/sdd: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sde: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sdf: 7516 MB, 7516192768 bytes, 14680064 sectors

或者

# fdisk -l | grep sd
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 41943039 20458496 8e Linux LVM
Disk /dev/sdb: 16.1 GB, 16106127360 bytes, 31457280 sectors
Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sdd: 14.0 GB, 13958643712 bytes, 27262976 sectors

1)使用/sys类文件

我们可以使用echo命令如下扫描每个scsi主机设备。

现在要重新扫描总线,请使用以下命令

# echo "- - -" >  /sys/class/scsi_host/host0/scan

该命令的三个破折号(“-”)用作通配符,表示重新扫描所有内容。
请记住,三个值通常代表通道,SCSI目标ID和LUN。

# echo "c t l" >  /sys/class/scsi_host/hosth/scan

其中

  • “ h”是HBA编号
  • “ c”是HBA上的频道
  • “ t”是SCSI目标ID
  • “ l”是LUN。

如果我们没有主机总线号,则必须使用以下命令列出系统上所有现有的主机总线号:

# ls /sys/class/scsi_host
host0 host1 host2

然后,我们将扫描找到的每个iscsi磁盘,并在每次扫描后扫描是否检测到新磁盘。
它的意思是

# echo "- - -" > /sys/class/scsi_host/host0/scan
# echo "- - -" > /sys/class/scsi_host/host1/scan
# echo "- - -" > /sys/class/scsi_host/host2/scan

或者

# for host in `ls /sys/class/scsi_host/`;do
echo "- - -" >/sys/class/scsi_host/${host}/scan;
done

当我们执行此操作时,它看起来非常简单,但是当我们执行存储扫描命令时,系统在后台要做很多工作。

查找通道路线的方法

如果我们知道通道,目标ID和LUN地址,则可以使用它进行扫描。
其中我们有4张HBA emulex卡0、1、2和3.

server1:/proc/scsi/lpfc# ls
0  1  2  3

通过卡0和2

server1:/proc/scsi/lpfc# cat 0
lpfc0t00 DID d200ef WWPN 50:06:01:68:39:a0:43:65 WWNN 50:06:01:60:b9:a0:43:65
lpfc0t01 DID d201ef WWPN 50:06:01:61:39:a0:43:65 WWNN 50:06:01:60:b9:a0:43:65
server1:#/proc/scsi/lpfc# cat 1
server1:/proc/scsi/lpfc# cat 2
lpfc2t01 DID ed0cef WWPN 50:06:01:69:39:a0:43:65 WWNN 50:06:01:60:b9:a0:43:65
lpfc2t00 DID ed0def WWPN 50:06:01:60:39:a0:43:65 WWNN 50:06:01:60:b9:a0:43:65
server1:/proc/scsi/lpfc# cat 3

对于所有4个WWPN(全球端口名称),它都具有相同的WWNN(全球节点名称)。

server1:/proc/scsi/lpfc# cat /sys/class/fc_transport/*/node_name
0x50060160b9a04365
0x50060160b9a04365
0x50060160b9a04365
0x50060160b9a04365

我们可以通过过滤WWPN(全球端口名称)进行深入研究,以获取更多信息

server1:/proc/scsi/lpfc# grep 50060160b9a04365 /sys/class/fc_transport/*/node_name
/sys/class/fc_transport/target0:0:0/node_name:0x50060160b9a04365
/sys/class/fc_transport/target0:0:1/node_name:0x50060160b9a04365
/sys/class/fc_transport/target2:0:0/node_name:0x50060160b9a04365
/sys/class/fc_transport/target2:0:1/node_name:0x50060160b9a04365

这表明有四个到该目标的光纤通道路由。

Line 1 : Thru host 0 channel 0 target 0
Line 2 : Thru host 0 channel 0 target 1
Line 3 : Thru host 2 channel 0 target 0
Line 4 : thru host 2 channel 0 targer 1

因此,现在,我们可以按以下方式扫描LUN,并且存储团队将地址分配为“ 8”。

echo "0 0 8" > /sys/class/scsi_host/host0/scan
echo "0 1 8" > /sys/class/scsi_host/host0/scan
echo "0 0 8" > /sys/class/scsi_host/host2/scan
echo "0 1 8" > /sys/class/scsi_host/host2/scan

说明了SCSI文件的输出,以供我们参考:

Host: scsi0 Channel: 00 Id: 00 Lun: 08
Vendor: DGC      Model: RAID 5           Rev: 0326
Type:   Direct-Access                    ANSI SCSI revision: 04
Host: scsi0 Channel: 00 Id: 01 Lun: 08
Vendor: DGC      Model: RAID 5           Rev: 0326
Type:   Direct-Access                    ANSI SCSI revision: 04
Host: scsi2 Channel: 00 Id: 00 Lun: 08
Vendor: DGC      Model: RAID 5           Rev: 0326
Type:   Direct-Access                    ANSI SCSI revision: 04
Host: scsi2 Channel: 00 Id: 01 Lun: 08
Vendor: DGC      Model: RAID 5           Rev: 0326
Type:   Direct-Access                    ANSI SCSI revision: 04

另一种方法

如果我们没有主机总线号,则必须使用以下命令列出系统上所有现有的主机总线号:

# ls /sys/class/scsi_host
host0 host1 host2

或者尝试

# grep mpt /sys/class/scsi_host/host?/proc_name
/sys/class/scsi_host/host0/proc_name:mptspi

在输出中,host0是相关字段。
如前所述,我们需要拥有主机总线号才能确定要扫描的内容

然后,我们将扫描找到的每个iscsi磁盘,并在每次扫描后扫描是否检测到新磁盘。
它的意思是

# echo "- - -" > /sys/class/scsi_host/host0/scan
# echo "- - -" > /sys/class/scsi_host/host1/scan
# echo "- - -" > /sys/class/scsi_host/host2/scan

如果主机太多(例如,从host0到host20),则可以使用以下命令

# for host in `ls /sys/class/scsi_host/`;do
echo "- - -" >/sys/class/scsi_host/${host}/scan;
done

或者,我们也可以尝试一下(针对光纤通道的这个)

# for host in `ls /sys/class/fc_host/`; do
echo "1" >/sys/class/fc_host/${host}/issue_lip;
done

是否可以在Linux OS中重新扫描设备而无需重新加载Linux驱动程序?

有一个过程可以迫使驱动器重新扫描目标并允许添加新设备。
这将触发驱动程序启动LUN发现过程。

要从命令行强制重新扫描,请键入以下命令:

# echo "scsi-qlascan" > /proc/scsi//

其中:

= qla2100,qla2200,qla2300(2.4个内核驱动程序)或者qla2xxx(2.6个内核驱动程序)
= HBA的实例号

执行此命令后,通过键入以下命令,强制SCSI中间层进行自己的扫描并为新设备构建设备表条目:

# echo "scsi add-single-device 0 1 2 3" >/proc/scsi/scsi

其中:

“ 0 1 2 3” =“主机通道ID LUN”

扫描必须按照上述顺序进行;首先是驱动程序(qla2300/qla2200驱动程序等),然后是Linux SCSI中间层(即OS扫描)。

2)用多路径/powermt扫描lun

我们可以使用multipath或者powermt命令检查当前的多路径设置。

# multipath -l
mpath2 (36006016015501c0018c07c18e0d8dc11)
[size=68 GB][features="1 queue_if_no_path"][hwhandler="1 emc"]
_ round-robin 0 [active]
_ 0:0:0:2 sdc 8:32  [active]
_ round-robin 0 [enabled]
_ 1:0:0:2 sdi 8:128 [active]
mpath1 (36006016015501c0084227c0ee0d8dc11)
[size=68 GB][features="1 queue_if_no_path"][hwhandler="1 emc"]
_ round-robin 0 [active]
_ 1:0:0:1 sdh 8:112 [active]
_ round-robin 0 [enabled]
_ 0:0:0:1 sdb 8:16  [active]
....................
....................
mpath3 (36006016015501c0019c07c18e0d8dc11)
[size=68 GB][features="1 queue_if_no_path"][hwhandler="1 emc"]
_ round-robin 0 [active]
_ 1:0:0:3 sdj 8:144 [active]
_ round-robin 0 [enabled]
_ 0:0:0:3 sdd 8:48  [active]

如果安装了EMC Powerpath,请检查磁盘/多路径状态,如下所示:

# powermt display dev=all | more
Pseudo name=emcpowerb
CLARiiON ID=APM00080503154 [cl10083]
Logical device ID=6006016023041F003AB6ED708885DD11 [LUN 3]
state=alive; policy=CLAROpt; priority=0; queued-IOs=0
Owner: default=SP A, current=SP A       Array failover mode: 1
==============================================================================
---------------- Host ---------------   - Stor -   -- I/O Path -  -- Stats --
###  HW Path                I/O Paths    Interf.   Mode    State  Q-IOs Errors
==============================================================================
3 qla2xxx                   sde       SP A2     active  alive      0      1
3 qla2xxx                   sdh       SP B3     active  alive      0      0
6 qla2xxx                   sdk       SP A3     active  alive      0      1
6 qla2xxx                   sdn       SP B2     active  alive      0      0
..............................
..............................
==============================================================================
---------------- Host ---------------   - Stor -   -- I/O Path -  -- Stats --
###  HW Path                I/O Paths    Interf.   Mode    State  Q-IOs Errors
==============================================================================
3 qla2xxx                   sdd       SP A2     active  alive      0      1
3 qla2xxx                   sdg       SP B3     active  alive      0      0
6 qla2xxx                   sdj       SP A3     active  alive      0      1
6 qla2xxx                   sdm       SP B2     active  alive      0      0

如果配置正确,多路径守护程序将自动添加连接的设备。
对于powermt,我们需要手动运行以下命令。

# powermt config

3)使用脚本

我们可以使用SCSI重新扫描脚本进行重新扫描,该脚本将检测到新的lun并将其自动添加到服务器中。
我们可以在sg3_utils包中找到此脚本。

# /us/bin/rescan-scsi-bus.sh -a
Scanning SCSI subsystem for new devices
Scanning host 0 for SCSI target IDs 0 1 2 3 4 5 6 7, all LUNs
..................
..................
1 new or changed device(s) found. 
 [0:0:5:0]
0 remapped or resized device(s) found. 
0 device(s) removed.