转自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卡而定。HBA卡自带驱动可以覆盖这个参数值。
· fast_io_fail_tmo – 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磁盘路径示范如下:image001
上面这三种SCSI磁盘路径都不是永久不变,当服务器新增或者删除新的PCI设备时候,路径就会发生变化,有时候即使是服务器重启也可能导致路径变成发生变化。
为了保证应用程序使用的磁盘路径能够永久不变,有以下几种方法:
1. WWID
根据SCSI标准,每个SCSI磁盘都有一个WWID。类似于网卡的MAC地址,要求是独一无二。通过WWID标示SCSI磁盘就可以保证磁盘路径永久不变,Linux系统上/dev/disk/by-id目录包含每个SCSI磁盘WWID访问路径。实例:
scsi-3600508b400105e210000900000490000 -> ../../sda
UUID是有文件系统在创建时候生成的,用来标记文件系统,类似WWID一样也是独一无二的。因此使用UUID来标示SCSI磁盘,也能保证路径是永久不变的。Linux上/dev/disk/by-uuid可以看到每个已经创建文件系统的磁盘设备以及与/dev/sd之间的映射关键。
注意:Linux自带的md和LVM工具也会在SCSI磁盘上面写入UUID信息。
 
3. 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完成扫描。
a. 某些HBA卡在存储分配完成后,需要通过issue_lip才能发现新增加设备,具体参考“存储链路扫描”。(如果需要issue_lip,建议停止IO操作)
b. 新分配LUN在操作系统没有显示,可以通过sg_luns命令(来自sg3_utils包)重新获取阵列LUN列表。
c. c:t:l信息可以使用命令grep “存储SP端口WWPN” /sys/class/fc_transport/*/[node_name|port_name]获取;也可以通过lsscsi、scsi_id、multipath –l或者ls –l /dev/disk/by-*方法获取。
3. 使用多路径软件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
 

FC磁盘设备管理的更多相关文章

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

    由 Jun_Tan 在 2013-1-28 上午12:08 上创建,最后由 Jun_Tan 在 2013-1-28 上午12:13 上修改 版本 1 Linux存储在线管理(一)FC磁盘设备管理 转载 ...

  2. 在CentOS 6.4上安装Puppet配置管理工具

    在CentOS 6.4上安装Puppet配置管理工具 linux, puppetAdd comments 五052013 上篇说了下在ubuntu12.04上安装puppet,安装的版本为puppet ...

  3. Linux FC/iSCSI存储设备管理系列(一):Linux系统设备驱动入门

    Linux FC/iSCSI存储设备管理系列(一):Linux系统设备驱动入门 转载请在文首保留原文出处:EMC中文支持论坛 - https://community.emc.com/go/chines ...

  4. Linux磁盘设备文件(sda,sdb,sdc…)变化问题

    在Linux下往往会碰到这样的问题,磁盘的设备文件,比如/dev/sda, sdb, sdc等等在某些情况下会混乱掉,比如sda变成了sdb或者sdc变成了sdb等等,这样无形中会导致磁盘设备管理的混 ...

  5. 磁盘性能评价指标—IOPS和吞吐量

    转:http://blog.csdn.net/hanchengxi/article/details/19089589 一.磁盘 I/O 的概念 I/O 的概念,从字义来理解就是输入输出.操作系统从上层 ...

  6. 详解Linux磁盘管理与文件系统

    磁盘基础 硬盘结构 物理结构 盘片:硬盘有多个盘片,每盘片 2 面. 磁头:每面一个磁头. 数据结构 扇区:磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区. 硬盘的第一个扇区,叫做引导扇区 ...

  7. 磁盘IO及性能指标

    一.磁盘 I/O 的概念 I/O 的概念,从字义来理解就是输入输出.操作系统从上层到底层,各个层次之间均存在 I/O.比如,CPU 有 I/O,内存有 I/O, VMM 有 I/O, 底层磁盘上也有 ...

  8. 磁盘 IOPS(每秒读写次数) 的计算方法

    一.磁盘 I/O 的概念 I/O 的概念,从字义来理解就是输入输出.操作系统从上层到底层,各个层次之间均存在 I/O.比如,CPU 有 I/O,内存有 I/O, VMM 有 I/O, 底层磁盘上也有 ...

  9. 北亚关于HP EVA4400/6400/8400/P6000的数据恢复解决方案

    [引言]本文档建立在针对HP EVA的大量测试性研究基础上,所有的细节几乎均为对EVA的破译型研究,目前全球范围内尚未发现类似资料,故可能表述方式和结论并不精确,仅为参考之用.我们公司为研究HP EV ...

随机推荐

  1. MyBatis基础入门《二十》动态SQL(foreach)

    MyBatis基础入门<二十>动态SQL(foreach) 1. 迭代一个集合,通常用于in条件 2. 属性 > item > index > collection : ...

  2. laravel 比较好的资料地址 看云

    https://www.kancloud.cn/curder/laravel/408497

  3. vim中的分屏操作

    title: vim中的分屏操作 date: 2017-11-14 21:45:11 tags: vim categories: 开发工具 在命令行中: vim -On file1 file2 # O ...

  4. 设置vim支持gbk

    linux下的默认字符集是utf-8,但Windows下默认是GBK,如果我们在linux下打开Windows中的文件就很容乱码,可以通过下面的设置使vim支持GBK编码. 首先,确认你的系统中安装了 ...

  5. PHP 7.3: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? · Issue #4037 · aces/Loris

    PHP 7.3: "continue" targeting switch is equivalent to "break". Did you mean to u ...

  6. Oarcle 入门之 order by 关键字

    order by 关键字 作用:用于对查询结果进行排序 select * from emp where deptno = 20 order by sal asc /desc; 如何排序之升降问题 *用 ...

  7. 20190402 管道符,分号,单引号,双引号,&&的使用

    :分号叫顺序执行 格式:命令:命令 && :前一条命令执行成功,后面命令继续执行:前面命令执行失败,后者不执行 格式:命令+空格&&空格+命令 || :两管道逻辑执行, ...

  8. Windows 服务器自动重启定位

    有个非常好的小技巧,就是在服务器端命令行,执行systeminfo,能查到服务器上一次重启的时间,依照这个时间在Event Log里再找相应的日志就容易多了. 补充:还能查到这台服务器是虚拟机还是实体 ...

  9. 判断(if)语句

    目标 开发中的应用场景 if语句体验 if语句进阶 综合应用 一 开发中的应用场景 转换成代码 判断的定义 如果 条件满足,才能做某件事 如果 条件不满足,就做另外一件事,或者什么也不做 判断语句 又 ...

  10. python学习笔记:深浅拷贝的使用和原理

    在理解深浅拷贝之前,我们先熟悉下变量对象和数据类型 1.变量和对象 变量-引用-对象(可变对象,不可变对象) 在python中一切都是对象,比如[1,2],'hello world',123,{'k1 ...