Linux 在线扫描热添加的SCSI设备

介绍

Linux系统提供多重机制以重新扫描SCSI总线并重认系统中加入的SCSI设备。在2.4内核方案中,由于动态LUN扫描机制不具备一致性,往往需要中断I/O。 
2.6内核里,LUN扫描有了显著改进并添加了动态LUN扫描机制。Linux目前缺乏像drvconfig或ioscan那样允许动态SCSI通道重配的命令。

SCSI(Small Computer System Interface 小型计算机系统接口)接口具有应用范围广、多任务、带宽大、CPU占用率低,以及热插拔等优点,在服务器中广泛的应用

当然在虚拟化平台支持下,也能模拟出SCSI设备,方便在虚拟机上热添加SCSI设备(一般是硬盘)

但是在热添加SCSI设备之后,需要手动rescan 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编号.

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

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

 
如果要删除一个磁盘设备,使用适当的主机,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磁盘设备.

运行如下命令,通过重新扫描 SCSI 总线并添加 SCSI 设备:

# ls /sys/class/scsi_host/
# echo "- - -" > /sys/class/scsi_host/host0/scan
# echo "- - -" > /sys/class/scsi_host/host1/scan
# echo "- - -" > /sys/class/scsi_host/host2/scan

// '- - -' 代表channel,target和LUN编号。以上命令会导致hba012下所有channel
target以及可见LUN被扫描.  /sys/class/scsi_host/ 下面有几个host 就扫描几次.

=================================================================================

检查 SCSI 设备的名称,然后重新扫描 SCSI 总线:

# ls /sys/class/scsi_device/
# echo 1 > /sys/class/scsi_device/0\:0\:0\:0/device/rescan
# echo 1 > /sys/class/scsi_device/2\:0\:0\:0/device/rescan

RHEL4 或SUSE9: 
echo 1 >> /sys/class/scsi_host/host0/issue_lip 
/sys/class/scsi_host/ 下面有几个host 就执行几次 
echo '- - -' >> /sys/class/scsi_host/host0/scan

CentOS/RHEL5.9开始(SUSE11/12也有这个工具)提供一个工具包sg3_utils同样可以方便的实现rescan操作.

下载sg3_utils地址:http://www.rpmfind.net/linux/rpm2html/search.php?query=sg3_utils

suse1:~ # rpm sg3_utils-1.35-1.x86_64.rpm

suse1:~ # /usr/bin/rescan-scsi-bus.sh 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值