Highlighted
版主
版主

【专家问答】Linux/Unix存储管理常见问题与解决方法

好消息,EMC中文论坛里新一期的“专家问答”活动又将开启。从6月16日(周一)开始为期两周的时间里,我们将和大家一起讨论和分享有关Linux/Unix存储管理常见问题与解决方法的话题和心得。以往所有已完成的“专家问答”活动可参考这个汇总贴

本期讨论主题:Linux/Unix存储管理常见问题与解决方法

本期持续时间:2014年6月16日 – 6月30日,为期两周。活动结束后,本贴将锁定,有相关的后续问题可开新贴提问。

本期我们邀请到的三位专家是: Kevin Cai,Fenglin Li和Jiawen Zhang。


Kevin_Cai_ATE.jpg

Kevin Cai 来自EMC技术支持 Unix主机组的Kevin。在Unix 操作系统领域将近做了10年的系统管理和技术支持,熟悉各个Unix/Linux/VMware操作系统,并擅长系统磁盘管理。目前主要负责Powerpath和Solutions Enabler这两款EMC软件的技术支持,同时也帮助客户解决Unix主机在连接EMC中高端存储过程中遇到的相关问题

Fenglin_ATE.jpg

Fenglin Li IT行业8年从业经验,曾在跨国企业担任IT系统工程师、数据库管理员、技术支持工程师等职位,熟悉IT基础架构解决方案。目前担任EMC eServices技术支持工程师,负责Symmetrix和EMC主机软件技术支持工作。

Jiawen_ATE.jpg

Jiawen Zhang 就职于EMC在线支持部门,负责Symmetrix产品及Linux/Unix主机系统相关的技术支持。在Linux系统内核、存储管理与设备驱动方面有所见长。对Symmetrix系统管理、PowerPath多路径控制软件有强烈兴趣。

和专家交流,与同行畅谈。欢迎大家以回帖的方式就 Linux/Unix存储管理常见问题与解决方法 这个主题,来积极提问和踊跃发表自己的意见。期待您的参与!

标签 (1)
0 项奖励
19 条回复19
版主
版主

Re: 【专家问答】Linux/Unix存储管理常见问题与解决方法

本帖暂时锁定,将于下周一(6月16日)活动开启前正式解锁。

0 项奖励
版主
版主

Re: 【专家问答】Linux/Unix存储管理常见问题与解决方法

帖子解锁。本期活动正式开启,欢迎对此话题感兴趣的朋友们积极参与提问和讨论。

0 项奖励
8 Krypton

Re: 【专家问答】Linux/Unix存储管理常见问题与解决方法

常见问题与解决方法分享:


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扫描

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

命令示例:

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

0:主机ID

1channel ID

2target ID

3LUN编号

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

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

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

0:主机ID

1channel ID

2target ID

3LUN编号

/sysSCSI扫描

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

# cd /sys/class/scsi_host/host4/

# ls -al scan

# echo ‘- - -’ > scan

‘- - -’代表channeltargetLUN编号。以上命令会导致hba4下所有channeltarget以及可见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. 1.    1.确保存储端已配置好LUN并输出给Linux 主机
  2. 2.    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

  1. 3.    3.运行powermt config 配置新认到的磁盘,生成虚拟设备
  2. 4.    4.powermt display 检查新认到的LUN 及设备路径

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

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

  1. 1.    1.在将要删除的设备上停止所有的I/O
  2. 2.    2.通过以下命令确定虚拟设备对应的原始SCSI设备:

powermt display dev=emcpower<id>

  1. 3.    3.删除虚拟设备

      powermt remove dev=emcpower<id>

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

      powermt release

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

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

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

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

  1. 6.    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主机编号2lpfc HBA

# lun_scan 2

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

# fdisk -l

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

# powermt config

0 项奖励
8 Krypton

Re: 【专家问答】Linux/Unix存储管理常见问题与解决方法

常见问题与解决方法分享:


问题1:如何通过iSCSILinux动态发现新LUNs

平台Red Hat Linux, SuSE Linux

问题描述:无法动态发现新磁盘设备

根本原因

iSCSI驱动可在Ethernet上动态发现目标存储系统,然而,它无法动态发现存储系统上的LUNLinux操作系统的SCSI中间层负责发现LUN。因此,通过Fibre Channel,用户必须重新扫描SCSI总线以发现新添加LUN,用户可通过重启服务器或重新加载iSCSI模块实现上述操作。

解决方法

root权限使用以下命令在 RHEL 3, RHEL4, SLES 8, SLES 9, Asianux 1.0, and Asianux 2.0上重新加载iSCSI驱动:

# /etc/init.d/iscsi restart

RHEL5SLES 10上作为root使用以下命令:

RHEL5

# /etc/init.d/iscsid restart

SLES 10

# /etc/init.d/open-iscsi restart

# /sbin/iscsiadm -m session –R

问题2:Linux是否需要LUN 0

平台Linux

问题描述

  1. 1. /proc/scsi/scsi每条路径只包含一个DGC LUN Z
  2. 2. /proc/scsi/qla2?00/[0-9] 显示除了LUN 0以外的所有LUN,星号标记显示没有 SCSI注册。
  3. 3. Emulex HBA 已在 FA注册 但/proc/scsi/scsi中没有device entry

       根本原因

     Linux 2.4.x内核对LUN 0使用SCSI INQUIRY命令以确定系统连接到何种类型的磁盘设备。如果没有LUN 0QLogicEmulex驱动将会返回错误而不是发INQUIRY命令给磁盘设备,因此,Linux系统将无法自动扫描磁盘设备。须手动激活LUN

       解决方法

     可通过以下方法解决此问题:

     1. 映射一个GatekeeperLUN 0Linux 2.4受到最大SCSI磁盘设备数量的限制,因此可能需要手动指定HLU

     2. 手动扫描LUN。用户须小心规划扫描时间。

     3. 为Linux SCSI驱动打补丁(不推荐)。

     详情请见Primus Solution emc115253

问题3Linux主机Emulex HBA无法看见磁盘设备

平台Linux Kernel 2.4

问题描述

  1. 1. 主机在存储端注册并登记后无法看到任何磁盘设备。
  2. 2. 所有lpfc驱动实例文件(例如:/proc/scsi/lpfc/*)无法看见存储WWN。

解决方法

按照以下步骤进行操作:

  1. 1. 通过如下命令检查哪些模块依赖于lpfc

lsmod | grep lpfc
lpfc       243664   0  [lpfcdfc]

命令输出地黑体部分是正在使用lpfc的模块。在lpfcdfc被删除之前,lpfc将无法删除。

  1. 2. 使用rmmod命令删除相关模块,命令格式如下:

rmmod lpfcdfc

当该命令执行成功,通过lsmod命令验证该模块已被删除。

  1. 3. 使用以下命令删除lpfc模块:

rmmod lpfc

  1. 4. 使用以下命令重新加载lpfc模块:

modprobe lpfc

  1. 5. 模块成功加载之后,将会初始化PLOGI及存储端口信息,将会在驱动实例文件中看到。

同时也会自动扫描磁盘设备,如果没有,运行命令echo '- - -' > /proc/scsi/scsi扫描磁盘设备。

问题4"powermt display dev=all "Device(s) not found""

平台HP-UX, IBM AIX, Red Hat Linux, UNIX

软件PowerPath 5.0

问题描述:使用命令powermt display dev=all无法查看新加SCSI磁盘设备

解决方法:在emcgrab日志"powermt display options"文件检查PowerPath阵列状态是否设置为“managed”,或在主机运行命令powermt display options

如果指定阵列设置为“unmanaged”,则输入以下命令:

powermt manage class="symm" (or class="clariion", etc.)

powermt display dev=all

powermt save

问题5Linux主机在proc/scsi/scsi中发现重复LUN ID

平台Red Hat Linux 5.3

产品Symmetirx DMX-4 VMAX系列

问题描述

一个磁盘设备呈现给2HBA,每个HBA上通过2个不同LUN ID显示2个实例。主机应当在各HBA上看到相同的实例(LUN 16而非1617),而不是两个不同的LUN ID

Host: scsi5 Channel: 00 Id: 02 Lun: 16

Vendor: EMC Model: SYMMETRIX Rev: 5772

Type: Direct-Access ANSI SCSI revision: 02

Host: scsi5 Channel: 00 Id: 02 Lun: 17

Vendor: EMC Model: SYMMETRIX Rev: 5772

Type: Direct-Access ANSI SCSI revision: 02

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

Vendor: EMC Model: SYMMETRIX Rev: 5772

Type: Direct-Access ANSI SCSI revision: 02

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

Vendor: EMC Model: SYMMETRIX Rev: 5772

Type: Direct-Access ANSI SCSI revision: 02

解决方法

查看是否SPC 2SCSI 3标记缺失。重新添加标记会解决此问题,主机必须重启以使更改生效。在HBA级别设置标记,例如:symmask -sid 308 -dir 8C -p 0 -wwn 10000000c99338ca set hba_flags on SPC2,SC3 –enable

当磁盘设备设置了SPC 2SCSI 3之后,proc/scsi/scsi将会返回正确地LUN ID

问题6Linux操作系统能否不重新加载Linux驱动而重新扫描磁盘设备?

平台Red Hat LinuxSuSE Linux Enterprise Server(SLES)QLogic

问题描述:新LUN添加到存储阵列之后,无法通过操作系统的QLogic HBA驱动看到该设备。重启或重新加载驱动会造成生产中断。

解决方法

按照以下步骤,强制驱动重新扫描目标设备,允许添加新磁盘设备。该步骤触发驱动初始化LUN发现进程。扫描顺序:首先驱动层(qla2300/qla2200等),之后Linux SCSI中间层(即OS扫描)。

  1. 1.    1. 通过命令行强制扫描,输入以下命令:

     # echo "scsi-qlascan" > /proc/scsi/<driver_name>/<adapter_ID>

      <driver_name>qla2100, qla2200, qla2300 2.4内核驱动)或qla2xxx2.6内核驱动)<adapter_ID>HBA实例编号。

  1. 2.    2. 执行步骤1之后,通过以下命令强制SCSI中间层执行扫描并为新加磁盘设备添加device table entry

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

     "0 1 2 3"是“主机 通道 LUN”。

问题7Red Hat Linux收到SCSI错误返回值0x20000

平台Red Hat Enterprise Linux 4 U2及以上版本,QLogicPowerPath

问题描述

  1. 1.    1. Red Hat Linux收到SCSI错误返回值0x20000
  2. 2.    2. kernel: SCSI error : <1 0 7 206> return code = 0x20000
    kernel: end_request: I/O error, dev sdik, sector 4069594

       根本原因

     当一个端口被禁止,拔出,或重置光纤通道交换机通常会导致一个RSCNRegistered State Change Notification)事件,所有仍连接在交换机上的HBA都会看到该RSCN事件。在没有预警的情况下,多路径软件(PowerPath, DMP, MPIO)将会无法判断。

     注意:返回值0x20000表示DID_BUS_BUSY。并非所有0x20000错误都是由RSCN事件引起。Fabric或阵列故障也可能导致该错误。用户不应假设RSCN一定是导致该错误发生的原因。

       解决方法

     要正确地解释RSCN事件,须在modprobe.conf文件中添加一个内核选项。须重启以使更改生效。

  1. 1.    1. 编辑/etc/modprobe.conf并添加以下一行内容:

     options qla2xxx ql2xprocessrscn=1

  1. 2.    2. 保存文件。
  2. 3.    3. 重新编译initrd

     mkinitrd -f /boot/initrd-`uname -r`.img `uname -r`

  1. 4. 重启系统以使更改生效。

问题8Linux主机在/proc/scsi/scsi中只能看到一条路径连接存储

平台SLES 9SLES 10QLogic 8.01.06.01PowerPath 5.0.1

问题描述

  1. 1.    SuSE Linux/proc/scsi/scsi中只看到一条路径连接存储。
  2. 2.    PowerPath只显示一条路径连接到emcpower设备。
  3. 3.    即使配置了4条路径,/proc/scsi/scsi也只显示一条路径连接到磁盘设备

     Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: DGC      Model: RAID 5           Rev: 0324

     Type:   Direct-Access                    ANSI SCSI revision: 04

     powermt display dev=all displays only one path to the emcpower device:

     Pseudo name=emcpowera
CLARiiON ID=CK200072300649 [SG_LINUXTST01]
Logical device ID=60060160128C1D00D8D768A3915BDC11 [fiscuat2 DATA]
state=alive; policy=BasicFailover; priority=0; queued-IOs=0
Owner: default=SP B, current=SP B
==============================================================================
---------------- Host ---------------   - Stor -   -- I/O Path -  -- Stats ---
###  HW Path                I/O Paths    Interf.   Mode    State  Q-IOs Errors
==============================================================================
   0 qla2xxx                   sda       SP B0     active  alive      0      0

根本原因

如果用户阻止PowerPath显示交换机上连接HBA0的端口,路径将会故障切换。PowerPath显示LUN并没有被另一个HBA通过另一个SP访问。(LUN将会trespass)。信息显示如下:

Jan 29 16:01:07 linuxtst01 kernel: qla2400 0000:08:00.0: LOOP DOWN detected (2).
Jan 29 16:01:18 linuxtst01 kernel: qla2x00: FAILOVER device 0 from 5006016039a028a8 -> 5006016839a028a8 - LUN 00, reason=0x2
Jan 29 16:01:18 linuxtst01 kernel: qla2x00: FROM HBA 0 to HBA 0
Jan 29 16:01:19 linuxtst01 cmafcad[6362]: Host controller 129 status change.Status is now Loop Degraded.
Jan 29 16:01:21 linuxtst01 kernel: qla2x00: FAILOVER device 0 from 5006016839a028a8 -> 5006016a39a028a8 - LUN 00, reason=0x2
Jan 29 16:01:21 linuxtst01 kernel: qla2x00: FROM HBA 0 to HBA 0
Jan 29 16:01:23 linuxtst01 kernel: qla2400 0000:08:00.0: Scheduling rescan for new luns...
Jan 29 16:01:23 linuxtst01 kernel: qla2400 0000:08:00.1: Scheduling rescan for new luns...
Jan 29 16:01:24 linuxtst01 kernel: qla2x00: FAILOVER device 0 from 5006016a39a028a8 -> 5006016939a028a8 - LUN 00, reason=0x2
Jan 29 16:01:24 linuxtst01 kernel: qla2x00: FROM HBA 0 to HBA 1

很明显PowerPath没有进行故障切换,但QLogic本机的故障切换被激活了。

检查/etc/modprobe.conf (RHEL主机) /etc/modprob.conf.local (SuSE 主机)ql2xfailover参数。

解决方法

更改ql2xfailover参数值为0以禁止本机故障切换。在/etc/modprobe.conf中添加options qla2xxx ql2xfailover=0 ConfigRequired=0,重新编译initrd并重启。重启之后,确认"cat /sys/module/qla2xxx/parameters/ql2xfailover"返回0

0 项奖励
8 Krypton

Re: 【专家问答】Linux/Unix存储管理常见问题与解决方法

总结了一些以前用户常常问到的问题与解决方法,欢迎大家提问。

0 项奖励
RockndRoll
1 Nickel

Re: 【专家问答】Linux/Unix存储管理常见问题与解决方法

能介绍一下Linux系统LUN迁移和扩容的操作步骤吗?

kevinfromemc
1 Copper

Re: 【专家问答】Linux/Unix存储管理常见问题与解决方法

您好,请问您指的LUN迁移是指不同存储阵列之间的LUN迁移,还是同一存储之间的迁移?迁移方法可以采取基于阵列的数据复制,也可以采用主机端的相关软件(如卷管理软件),您是想使用哪一种方法进行迁移?

关于扩容,假设主机是使用卷管理软件,那么:

1. 在存储端增加LUN的容量,一般Clariion/VNX/Symmetrix都支持在线扩

2. 存储端扩完后,需要主机对HBA重新进行扫描,以便主机在SCSI层认到新的LUN大小

3. 在卷管理这层,LVM需要有在线识别物理卷新增容量的功能,如果没有,则需要将文件系统先umount,然后将原卷上的数据迁移至其他的物理卷,之后将原卷从VG中剔除,然后再将新扩容后的卷加入VG,这样VG的大小就相应扩大了。

4. 当VG空间增大后,则需要增加逻辑卷LV的空间大小

5. 在LV扩容完成后,则需要考虑建立在LV之上文件系统自身的扩容能力

6. 有些文件系统支持在线扩容,即当底下的LV扩容后,文件系统可以通过命令直接将自身在线扩展至整个LV。否则,需要umount文件系统后使用文件系统的命令进行扩容。对于不支持自身扩展的文件系统,则需要将文件系统先备份下来,然后在扩展后的LV上重新创建文件系统,完成后,再次将备份的文件系统恢复至新建的文件系统。

0 项奖励
8 Krypton

Re: 【专家问答】Linux/Unix存储管理常见问题与解决方法

目前新版本的linux 在添加了存储LUN后,到底要不要重启才能扫到新的磁盘?

0 项奖励
kevinfromemc
1 Copper

Re: 【专家问答】Linux/Unix存储管理常见问题与解决方法

即使是最新RHEL 7版本的系统,还是需要手动执行命令,以便系统识别新添加的磁盘。

通常运行的扫盘命令是:

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

其中host#代表HBA口的实例名,如host1

当然重新启动也是可行的。

0 项奖励