zoukankan      html  css  js  c++  java
  • Linux系统SCSI磁盘扫描机制解析及命令实例(转)

    转载请在文首保留原文出处:EMC中文支持论坛

    介绍

    Linux系统扫描SCSI磁盘有几种方式?Linux新增LUN之后,能否不重启主机就认出设备?如果安装了PowerPath,动态添加/删除LUN的命令是什么?本文总结了Linux主机对磁盘设备进行重新配置的方式,并附加命令实例。

    更多信息

    Linux系统提供多重机制以重新扫描SCSI总线并重认系统中加入的SCSI设备。在2.4内核方案中,由于动态LUN扫描机制不具备一致性,往往需要中断I/O。

    2.6内核里,LUN扫描有了显著改进并添加了动态LUN扫描机制。Linux目前缺乏像drvconfig或ioscan那样允许动态SCSI通道重配的命令。

    Linux主机对磁盘设备进行重新配置的方式包括:

    #  重启系统

    #  卸载并重新加载HBA驱动模块

    #  Echo /proc下的SCSI设备列表

    #  通过/sys下的属性设置运行SCSI扫描

    #  通过HBA厂商脚本运行SCSI扫描

    系统重启

    重启主机是检测新添加磁盘设备的可靠方式。在所有I/O停止之后方可重启主机,同时静态或以模块方式连接磁盘驱动。系统初始化时会扫描PCI总线,因此挂载其上的SCSI host adapter会被扫描到,并生成一个PCI device。之后扫描软件会为该PCI device加载相应的驱动程序。加载SCSI host驱动时,其探测函数会初始化SCSI host,注册中断处理函数,最后调用scsi_scan_host函数扫描scsi host adapter所管理的所有scsi总线。

    重新加载HBA驱动

    通常情况下,HBA驱动在系统中以模块形式加载。从而允许模块被卸载并重新加载,在该过程中SCSI扫描函数得以调用。通常,在卸载HBA驱动之前,SCSI设备的所有I/O都应该停止,卸载文件系统,多路径服务应用也需停止。如果有代理或HBA应用帮助模块,也应当中止。

    命令示例:

    例如,rac节点上某台服务器执行fdisk –l命令看不到共享磁盘,可尝试执行如下命令:

    # modprobe -r lpfc(卸载驱动)
    
    # modprobe lpfc(加载驱动)

    /procSCSI扫描

    2.4内核中,/proc文件系统提供了可用SCSI设备的列表。如果系统中SCSI设备重新配置,那么所有这些改变通过echo /proc接口反映到SCSI设备中。添加一个设备,主机,channel,target ID,以及磁盘设备的LUN编号会被添加到/proc/scsi/,需指定scsi编号。

    命令示例:

    # echo "scsi add-single-device 0 1 2 3" > /proc/scsi/scsi
    
    0:主机ID
    
    1:channel ID
    
    2:target ID
    
    3:LUN编号

    该命令会将新磁盘设备添加到/proc/scsi/scsi文件中。如果没有找到相应文件,需为/dev路径下新增磁盘设备创建设备文件名。

    如果要删除一个磁盘设备,使用适当的主机,channel,target ID及LUN编号运行如下格式命令:

    # echo "scsi remove-single-device 0 1 2 3" > /proc/scsi/scsi
    
    0:主机ID
    
    1:channel ID
    
    2:target ID
    
    3:LUN编号

    /sysSCSI扫描

    2.6内核中,HBA驱动将SCAN功能导出至/sys目录下,可用来重新扫描该接口下的SCSI磁盘设备。命令如下:

    # cd /sys/class/scsi_host/host4/
    
    # ls -al scan
    
    # echo '- - -' > scan
    
    '- - -' 代表channel,target和LUN编号。以上命令会导致hba4下所有channel,target以及可见LUN被扫描。

    RHEL5 SUSE10

    echo '- - -'  > /sys/class/scsi_host/host0/scan
    
    /sys/class/scsi_host/ 下面有几个host 就扫描几次

    RHEL4 SUSE9

    echo 1 >> /sys/class/scsi_host/host0/issue_lip    
    
    同样是/sys/class/scsi_host/ 下面有几个host 就执行几次
    
    echo '- - -' >> /sys/class/scsi_host/host0/scan

    在现有PowerPath环境中增加LUN:

    1.确保存储端已配置好LUN并输出给Linux 主机

    2.通过powermt命令获得HBA 卡列表,并扫描列表中所有的HBA

    echo '- - -' > /sys/class/scsi_host/host#/scan
    
    例如, 如果powermt 显示列出HBA 4 和5, 使用如下命令开始扫描:
    
    echo '- - -' > /sys/class/scsi_host/host4/scan
    
    echo '- - -' > /sys/class/scsi_host/host5/scan

    3.运行powermt config 配置新认到的磁盘,生成虚拟设备

    4.用powermt display 检查新认到的LUN 及设备路径

    在现有PowerPath环境中动态删除 LUN

    注意,必须严格遵守操作次序,如果次序有误可能会造成主机OS panic。

    1.在将要删除的设备上停止所有的I/O。

    2.通过以下命令确定虚拟设备对应的原始SCSI设备:

    powermt display dev=emcpower<id>

    3.删除虚拟设备

    powermt remove dev=emcpower<id>

    4.回收虚拟设备号以备后用

    powermt release

    如果此命令失败,已删除的虚拟设备仍会存在于/dev 和/sys/block 下,并且在以后动态添加新LUN时可能会引发问题。

    5.对每个原始SCSI 设备执行以下命令:

    echo 1 > /sys/block/sd<id>/device/delete

    此命令使PowerPath 停止这些原始sd 设备上的I/O 并且将其从/dev 和/sys/block下移除。如此命令执行不成功,在以后动态添加新LUN时可能会引发问题。

    6.在存储阵列中删除对应的LUN,执行powermt display 验证设备已被删除。

    通过HBA厂商脚本进行SCSI扫描

    QLogic

    利用QLogic FC HBA LUN Scan Utility 脚本即可无需重启动系统而识别新添加的LUN。也无需对QLogic FC driver 的重新加载。

    命令示例:

    通过以下命令重新扫描所有HBA:

    # ./ql-dynamic-tgt-lun-disc.sh
    
    # ./ql-dynamic-tgt-lun-disc.sh -s
    
    # ./ql-dynamic-tgt-lun-disc.sh –scan

    重新扫描并删除丢失的LUN,使用以下两个命令其中任何一个:

    # ./ql-dynamic-tgt-lun-disc.sh -s -r
    
    # ./ql-dynamic-tgt-lun-disc.sh --scan –refresh

    Emulex

    使用 Emulex LUN Scan Utility 脚本可以动态扫描新添加的LUN。

    命令示例:

    # gunzip lun_scan.sh.gz
    
    # chmod a+x lun_scan

    扫描所有lpfc HBA:

    # lun_scan all

    扫描scsi主机编号2的lpfc HBA:

    # lun_scan 2

    之后确认OS 识别到新设备:

    # fdisk -l

    如果系统中有PowerPath ,还需要运行:

    # powermt config

    参考

    EMC Host Connectivity Guide for Linux

    应用于

    Linux主机Kernel 2.4、2.6版本

    RHEL, SUSE

  • 相关阅读:
    ASP.NET MVC 5
    Web Components是不是Web的未来
    如何选择高性价比的控件产品
    ASP.NET MVC 5
    ubuntu系统安装
    Ubuntu linux安装完成后隐藏linux磁盘挂载点
    win10 查看本机的激活秘钥
    windows cmd下列出当前目录下的所有文件
    error LNK2005: “找到一个或多个多重定义的符号” 已经在 xxxx.obj 中定义 的解决方法
    架构设计:负载均衡层设计方案(3)——Nginx进阶
  • 原文地址:https://www.cnblogs.com/cqubityj/p/4241282.html
Copyright © 2011-2022 走看看