Linux系统SCSI磁盘扫描机制解析及命令实例
介绍
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(加载驱动)
/proc下SCSI扫描
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编号
/sys下SCSI扫描
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
本文转载自:https://www.cnblogs.com/cqubityj/p/4241282.html
Linux系统SCSI磁盘扫描机制解析及命令实例的更多相关文章
- Linux系统SCSI磁盘扫描机制解析及命令实例(转)
转载请在文首保留原文出处:EMC中文支持论坛 介绍 Linux系统扫描SCSI磁盘有几种方式?Linux新增LUN之后,能否不重启主机就认出设备?如果安装了PowerPath,动态添加/删除LUN的命 ...
- LINUX系统、磁盘与进程的相关命令
ps ef:完整显示当前系统中所有运行的进程 kill 停止或杀死进程.9表示强制杀掉进程或任务 df 显示磁盘空间使用情况 du 用于显示指定目录下的文件以及子目录所占磁盘空间的大小. 与磁盘有关的 ...
- Linux系统的磁盘管理
Linux系统的磁盘管理有三个命令:df.du.fdisk. df:列出Linux中所有文件系统的整体磁盘使用量: du:对文件和目录所占用磁盘空间的查看: fdisk:用于磁盘分区时列出所有的磁盘. ...
- linux系统查看磁盘分区使用空间
Df命令是linux系统以磁盘分区使用空间:df -hl
- Linux系统的快速启动机制(内核切换) 【转】
转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=26807463&id=4187846 原文地址:Linux系统的 ...
- 阿里云(百度云)Linux系统挂载磁盘
阿里云(百度云)Linux系统挂载磁盘
- linux系统挂载磁盘
linux系统挂载磁盘 ## 将硬盘挂载到/mnt/disk1下 # 检查磁盘状态,确认分区 fdisk -l # 格式化磁盘(分区) mkfs.ext4 /dev/sda #根据机器上的命名 以sd ...
- centos Linux系统日常管理1 cpuinfo cpu核数 命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ,lsof ,pidof 第十四节课
centos Linux系统日常管理1 cpuinfo cpu核数 命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ...
- 查看Linux系统架构类型的5条常用命令
导读 很多时候我们都需要查看当前 Linux 系统是 32 位还是 64 位系统架构类型,本文中我将向大家推荐 5 条常用命令.无论你使用的是桌面版或是只装了文本界面的 Linux 环境,以下命令几乎 ...
随机推荐
- CTFshow萌新赛-萌新福利
下载链接文件 拿到show.bin文件 使用010Editor工具打开文件 做取反操作 取反后可以看到 把show.bin改为show.m4a 使用音频播放软件播放,即可得到flag
- 微信登录2-生成授权URL
一.准备工作 1.注册 微信开放平台:https://open.weixin.qq.com 2.邮箱激活 3.完善开发者资料 4.开发者资质认证 准备营业执照,1-2个工作日审批.300元 5.创建网 ...
- Py第一次练习,第二次练习
有两个列表 l1 = [11,22,33] l2 = [22,33,44] 1.获取内容相同的元素列表2.获取l1中有l2中没有的元素列表3.获取l1和l2中不同的元素列表 l ...
- vue原生文件上传,可以多文件上传
1.单文件上传 <template> <div> <label for="fileInput"> <i aria-hidden=" ...
- 2、fork函数与进程ID
1. fork函数 fork函数用于克隆一份当前的进程资源,调用fork函数之后,进程一分为二,并且两个进程的资源是一样的(只是资源内容完全一样,并不是同一份资源).fork函数的函数原型为:pid_ ...
- linux编译模块,包含了头文件却还是报undifind警告
在编写一个自己写的gadget驱动的时候遇到一个这样的问题,编译的时候报了个警告:WARNING: "usb_composite_register" [-/my_zero.ko] ...
- Linux防火墙和iptables
1. CentOS 查看防火墙状态: systemctl status firewalld firewall-cmd --state 启停防火墙: # 开启 systemctl start firew ...
- GStreamer各个包构建
GStreamer按功能.维护的标准化程度.依赖库的版权差异等分了若干个包(package),如 gstreamer, gst-plugins-base, gst-plugins-good, gst- ...
- tee MultiWriter creates a writer that duplicates its writes to all the // provided writers, similar to the Unix tee(1) command.
https://zh.wikipedia.org/wiki/Tee 在计算机科学中,tee是一个常见的指令,它能够将某个指令的标准输出,导向.存入某个档案中.许多不同的命令行界面(Shell)都提供这 ...
- JVM调优 jdk版本 机器配置 建议jvm参数 备注
https://juejin.im/post/5b091ee35188253892389683 大型跨境电商JVM调优经历 前提:某大型跨境电商业务发展非常快,线上机器扩容也很频繁,但是对于线上机器的 ...