Jun_Tan 在 2013-1-28 上午12:08 上创建,最后由 Jun_Tan 在 2013-1-28 上午12:13 上修改

版本 1

Linux存储在线管理(一)FC磁盘设备管理

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

介绍

本文主要介绍Linux环境下FC磁盘管理相关只是,主要内容包括FC驱动介绍、Linux SCSI磁盘永久命名、FC磁盘添加与删除、FC磁盘路径添加与删除以及FC存储链路在线扫描。

更多信息

Fibre Channel驱动

Linux系统上Fibre Channel驱动用户空间接口位于/sys/class文件夹下面。以下条目中,H代表主机,B代表bus号,T代表target,L代表lun id,R代表对端端口号。

注意:

如果主机使用多路径软件,修改配置参数之前,建议咨询多路径软件厂商

/sys/class目录下有三个主要文件夹跟 fibre channel相关的文件夹fc_transport、fc_remote_ports,fc_hosts。其中fc_transport代表已分配存储信息;fc_remote_ports代表主机到存储端口链路信息(fc_remote_ports文件夹包含未给主机分配存储的链路信息);fc_host代表主机HBA卡信息。

Transport: /sys/class/fc_transport/targetH:B:T/

  • port_id – 存储端口的 24位交换机端口ID
  • node_name – 存储端口的64位node name
  • port_name – 存储端口的64位port name

Remote Port:/sys/class/fc_remote_ports/rport-H:B-R/

  • port_id – 存储端口的 24位交换机端口ID
  • node_name – 存储端口的64位node name
  • port_name – 存储端口的64位port name
  • dev_loss_tmo – 链路故障等待时间。故障链路不再处理任何新的IO。默认dev_loss_tmo值视具体HBA卡而定,Qlogic默认是35秒,Emulex默认是30秒。HBA卡自带驱动可以覆盖这个 参数值。dev_loss_tmo最大值600秒,如果dev_loss_tmo值小于0或者大于600,HBA自带超时值生效。
  • fast_io_fail_tmo – IO故障等待时间。链路波动情况,IO尝试多长时间。

Host:/sys/class/fc_host/hostH

  • port_id  – HBA端口的 24位交换机端口ID。
  • issues_lip – 重置HBA端口,重新尝试发现存储端口。

Persistent命名

操作系统通过路径发送IO到存储,Linux系统SCSI磁盘路径有以下部分组成:

  • HBA卡的PCI标示符
  • HBA卡的管道号
  • 存储端SCSI target地址
  • LUN(Logical Unit Number) 号

SCSI磁盘路径在Linux上有3中表现方式:一、/dev/sd目录;二、通过major:minor号;三、/dev/disk/by-path,该目录是 /dev/sd设备的软连接。Fibre Channel磁盘路径示范如下:

上面这三种SCSI磁盘路径都不是永久不变,当服务器新增或者删除新的PCI设备时候,路径就会发生变化,有时候即使是服务器重启也可能导致路径变成发生变化。

为了保证应用程序使用的磁盘路径能够永久不变,有以下几种方法:

  1. WWID

根据SCSI标准,每个SCSI磁盘都有一个WWID。类似于网卡的MAC地址,要求是独一无二。通过WWID标示SCSI磁盘就可以保证磁盘路径永久不变,Linux系统上/dev/disk/by-id目录包含每个SCSI磁盘WWID访问路径。实例:

scsi-3600508b400105e210000900000490000 -> ../../sda

提示:Linux自带的device-mapper-multipath工具就是通过WWID来探测SCSI磁盘路径,可以将同一设备多条路径合并,并在/dev/mapper/下面创建新的设备路径。通过multipath –l可以看到WWID与  磁盘路径、Host:Channel:Target:Lun与/dev/sd以及major:minor对应关系。

  1. UUID

UUID是有文件系统在创建时候生成的,用来标记文件系统,类似WWID一样也是独一无二的。因此使用UUID来标示SCSI磁盘,也能保证路径是永久不变的。Linux上/dev/disk/by-uuid可以看到每个已经创建文件系统的磁盘设备以及与/dev/sd之间的映射关键。

注意:Linux自带的md和LVM工具也会在SCSI磁盘上面写入UUID信息。

  1. UDEV

UDEV是Linux提供的一种让用户对设备进行自定义命名的机制。可以通过UDEV将WWID/UUID信息跟磁盘路径映射起来,这样也可以保证设备路径永久不变。

磁盘删除

在删除磁盘之前,建议先备份好数据,将内存脏数据写入磁盘,然后再删除磁盘所有关联路径。对于使用多路径软件的磁盘,需要同时删除多路径设备和每个路径磁盘。删除磁盘建议在系统空闲时操作,内存脏数据写入磁盘会增加系统负载,可以通过vmstat 1 100观察系统负载。如果满足一下条件之一,则不建议进行删除操作:

  • vmstat 100次输出结果超过10次以上的free内存小于系统内存的5%。
  • vmstat结果的si和so列不为空,代表系统正在进行swaping,将内存数据写入磁盘。

磁盘删除操作步骤如下:

  1. 关闭使用磁盘的进程,备份磁盘数据。可以通过fuser命令查看正在访问某个磁盘的进程。
  2. umount卸载基于待删除磁盘的文件系统
  3. md和LVM中删除磁盘。LVM可以使用vgreduce从卷组移除改磁盘,然后使用pvremove从磁盘删除LVM元数据。
  4. 如果磁盘使用多路径软件,通过mulitpath –l查看磁盘所有路径,然后通过multipath –f删除磁盘。(如果使用powerpath多路径软件,请参考powerpath操作手册)
  5. blockdev –flushfs 将脏数据写入磁盘。这一步骤对于裸设备事情情况尤为重要,因为裸设备无法通过umount或者vgreduce将脏数据写入磁盘。
  6. 删除应用程序或者脚本中的磁盘路径引用。
  7. 使用命令echo 1 > /sys/block/device-name/device/delete删除磁盘,device-name以sd开头,比如sda、sdb;或者使用命令echo 1 > /sys/class/scsi_device/h:c:t:l/device/delete删除磁盘,h代表HBA卡号,c代表HBA卡channel,t代表SCSI target ID,i代表LUN ID。h:c:t:l这些信息可以通过lsscsi,scsi_id,multipath –l,ls –l  /dev/disk/by-*方式查看。
  8. 直接删除磁盘文件。

磁盘路径删除

当系统使用多路径软件时候,可以在线删除一条路径而不影响业务使用。操作步骤如下:

  1. 在应用程序或脚本中删除磁盘路径应用。
  2. 使用命令echo offline > /sys/block/sda/device/state将磁盘路径offline。多路径软件将会使用剩余路径处理IO。
  3. 使用命令echo 1 > /sys/block/device-name/delete命令从SCSI子系统删除磁盘路径,device-name通常以sd开头,比如sda、sdb。

添加新磁盘或者磁盘路径

添加新磁盘或者磁盘路径,系统可能会自动分配老磁盘使用的名称给新磁盘,比如/dev/sd,major:minoe和/dev/disk/by-path。因此在添加之前,请确认应用程序和脚本已经删除老磁盘的引用。

添加新磁盘或者磁盘路径步骤如下:

  1. 完成交换机和存储配置,记录号存储端口的WWPN。
  2. 使用下面命令在系统上重新扫描磁盘设备。

echo “c t l” > /sys/class/scsi_host/hosth/scan

h代表HBA号,c代表HBA卡channel,t代表SCSI target ID,l代表LUN ID。

也可以使用 命令echo “scsi add-single-device 0 0 0 0” > /proc/scsi/scsi完成扫描。

  1. 某些HBA卡在存储分配完成后,需要通过issue_lip才能发现新增加设备,具体参考“存储链路扫描”。(如果需要issue_lip,建议停止IO操作)
  2. 新分配LUN在操作系统没有显示,可以通过sg_luns命令(来自sg3_utils包)重新获取阵列LUN列表。
  3. c:t:l信息可以使用命令grep “存储SP端口WWPN” /sys/class/fc_transport/*/[node_name|port_name]获取;也可以通过lsscsi、scsi_id、multipath –l或者ls –l /dev/disk/by-*方法获取。
  4. 使用多路径软件multipath(或者其他多路径软件)确认磁盘路径添加正常。

存储链路扫描

Linux操作系统提供多种存储链路重置操作。存储链路重置通常用于多路径设备添加或者删除,这是一种破坏性操作,将导致IO操作超时。请谨慎使用这类型操作,另外操作时请注意以下事项:

  1. 操作前请确认链路没有新的IO,脏数据已经写回存储。
  2. 在系统内存资源使用紧张情况下,不建议进行链路删除操作。系统内存使用情况可以通过vmstat 1 100命令评估。

以下命令可用于存储链路重新扫描:

  • echo "1" > /sys/class/fc_host/host/issue_lip

issue_lip重置HBA链路,重新扫描整个链路并配置SCSI target。该操作是一种异步操作类型,具体完成时间需要参考/vag/log/message日志。Linux操作系统自带的lpfc和qla2xxx 驱动支持issue_lip命令。

  • echo “- - - ” > /sys/class/scsi_host/hostH/scan
  • rmmod 驱动/ modprobe 驱动 删除/重新加载HBA卡驱动。

参考

  • Redhat Linux – Storage Administration Guide

Linux存储在线管理(一)FC磁盘设备管理的更多相关文章

  1. FC磁盘设备管理

    本文转自:http://www.cactifans.org/linux/1071.html 转自EMC中文支持论坛 – https://community.emc.com/go/chinese   介 ...

  2. VMware linux虚拟机在线识别新添加磁盘

    登录进虚拟机linux系统中执行以下命令,识别新增加的硬盘 echo "- - -" > /sys/class/scsi_host/host0/scan # ls /sys/ ...

  3. Linux系列教程(十二)——Linux软件包管理之yum在线管理

    上一篇博客我们介绍了rpm包管理之rpm命令管理,我们发现在使用rpm命令手动安装rpm包的时候,会发现安装遇到到的依赖让你痛不欲生,安装一个rpm时会要先先安装某个依赖的rpm,而安装这个依赖的rp ...

  4. Linux软件包管理之yum在线管理

    目录 1.yum在线管理 2.网络 yum 源 3.光盘 yum 源搭建步骤 ①.挂载光盘 ②.让网络 yum 源失效 ③.修改光盘yum源文件 ④.输入yum list 可以查看光盘yum源里面的软 ...

  5. Ueditor结合七牛云存储上传图片、附件和图片在线管理的实现和最新更新

    最新下载地址: https://github.com/widuu/qiniu_ueditor_1.4.3 Ueditor七牛云存储版本 注意事项 老版本请查看 : https://github.com ...

  6. Oracle 10g RAC (linux) ASM 共享存储的管理详解

    ---------ASM 的管理(共享磁盘的管理)1.以 instance 的方式管理 ASM,启动 database 之前必须先启动 ASM instance,ASM instance 启动后,挂载 ...

  7. linux逻辑卷管理

    近期在进行linux充电,依据网络资料自己整理的资料,分享一下 ---------------------------------------------------------- Linux逻辑卷管 ...

  8. linux逻辑卷管理(LVM)

    1. 逻辑卷(LVM)的原理 LVM(Logical Volume Manager)逻辑卷管理 是在物理磁盘和文件系统的之间添加一个逻辑层,通过对底层物理磁盘的封装,以逻辑卷的方式呈现给上层应用,通过 ...

  9. 【转】Linux逻辑卷管理

    一. 前言 LVM是逻辑卷管理(Logical Volume Manager)的简称,它是建立在物理存储设备之上的一个抽象层,允许你生成逻辑存储卷,与直接使用物理存储在管理上相比,提供了更好灵活性.L ...

随机推荐

  1. WUSTOJ 1302: 区间k大数查询(Java)

    题目链接:

  2. 『Python基础』第7节:基本运算符

    一. 基本运算符 运算按种类可以分为: 算数运算.比较运算.逻辑运算.赋值运算.成员运算.身份运算.位运算. 今天我们只学习算数运算.比较运算.逻辑运算.赋值运算.成员运算 1.1 算数运算 以下假设 ...

  3. 【exgcd】卡片

    卡片 题目描述 你有一叠标号为1到n的卡片.你有一种操作,可以重排列这些卡片,操作如下:1.将卡片分为前半部分和后半部分.2.依次从后半部分,前半部分中各取一张卡片,放到新的序列中.例如,对卡片序列( ...

  4. maven配置阿里镜像

    在conf\settings.xml 在<mirrors>里面添加   <mirror>    <id>nexus-aliyun</id>    < ...

  5. LINUX CGROUP总结

    简介: Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU.内存.磁盘输入输出等).这个项目最早是由Go ...

  6. "多层感知器"--MLP神经网络算法

    提到人工智能(Artificial Intelligence,AI),大家都不会陌生,在现今行业领起风潮,各行各业无不趋之若鹜,作为技术使用者,到底什么是AI,我们要有自己的理解. 目前,在人工智能中 ...

  7. Centos6 Connect WiFi

    Centos6 Connect WiFi // 安装 wireless tools yum install wireless-tools dkms pciutils lsusb // 使用wlan命令 ...

  8. JavaScript内置一些方法的实现原理--Object.freeze()、instanceof

    const定义的常量,一般是不能修改的. 比如: const TIME_OUT = 10000; 但是当值为引用类型值时,还是可以操作对象,扩展或修改对象属性.方法等等. 以下演示代码的操作是不会报错 ...

  9. UI5-技术篇-Navigation And Routing

    主要记录下Router设置过程中出现的几个问题 1.View 首页设置 controlId 2.Manifest设置 2.1设置启动页 2.2设置默认配置 2.3设置Targets 首页设置 子页设置 ...

  10. java 原子操作(1) CAS

    在 java 多线程编程中经常说的就是:“原子操作(atomic operation) 不需要 synchronized”. 原子操作指的是不会被线程调度机制打断的操作:这种操作一旦开始,就一直运行到 ...