Linux系统SCSI磁盘扫描机制解析及命令实例

本文介绍了Linux系统中扫描SCSI磁盘的多种方法,包括重启系统、重新加载HBA驱动、通过/proc和/sys进行SCSI扫描等,并提供了详细的命令实例。特别针对PowerPath环境下动态添加/删除LUN的操作流程进行了说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

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(加载驱动)

/procSCSI扫描

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编号

/sysSCSI扫描

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.    1.确保存储端已配置好LUN并输出给Linux 主机

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

3.    3.运行powermt config 配置新认到的磁盘,生成虚拟设备

4.    4.用powermt display 检查新认到的LUN 及设备路径

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

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

1.    1.在将要删除的设备上停止所有的I/O。

2.    2.通过以下命令确定虚拟设备对应的原始SCSI设备:

powermt display dev=emcpower

3.    3.删除虚拟设备

      powermt remove dev=emcpower

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

      powermt release

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

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

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

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

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主机编号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

### Linux 系统磁盘扩容分区的工作原理 #### 1. 新增磁盘并创建新分区 当向系统添加新的物理磁盘时,操作系统会识别该设备并将其实例化为 `/dev` 下的一个文件节点。对于虚拟机环境中的磁盘扩展操作,在完成云平台或 Hypervisor 层面的调整之后,也需要让内核重新扫描 SCSI 总线来发现变更。 为了使新增加的空间可用作存储介质的一部分,必须先对其进行初始化处理——即划分逻辑区域(分区)。这一步骤通常借助 `fdisk`, `parted` 或者图形界面下的 GParted 工具来进行[^4]。 ```bash sudo fdisk /dev/vdb ``` 通过命令行交互模式定义好起始扇区位置以及结束边界后,便形成了一个新的未分配空间段落;此时虽然已经建立了基本框架结构但是还不能立即投入使用因为尚未经过低级格式化过程。 #### 2. 格式化新建分区 一旦完成了上述步骤,则紧接着就要考虑如何组织这些刚被切分出来的裸数据块集合体使之成为有序可寻址单元组群。这就涉及到选择合适的文件系统类型如 ext4, xfs 等,并利用相应的工具对目标卷实施高级格式化进程: ```bash mkfs.ext4 /dev/vdb1 ``` 此指令将会在指定路径所指向的新建分区上构建一层抽象层面上的数据管理机制从而允许后续应用程序能够方便快捷地存取资料而无需关心底层硬件细节[^3]。 #### 3. 创建挂载点与临时挂载 为了让用户可以直接访问刚刚准备好的磁盘资源,还需要建立一个连接桥梁这就是所谓的“挂载”。简单来说就是把某个特定目录作为入口映射到实际存在的物理地址上去实现透明化的I/O请求转发功能。 ```bash mkdir -p /mnt/data mount /dev/vdb1 /mnt/data ``` 以上两条语句分别用于生成一个空闲文件夹充当未来可能长期驻留于此处的内容容器;后者则是正式建立起两者之间的关联关系使得任何针对前者发起的操作都会被转交给背后支撑着它的那部分实体去响应执行[^1]。 #### 4. 设置开机自启动加载项 考虑到每次重启服务器都需要手动重复一遍前面提到过的那些流程显然不够高效也不够自动化友好因此有必要进一步优化配置方案确保即使经历断电事故也能保持一致性状态不变。具体做法是在全局范围内的静态表单里追加一行记录指明每当进入多用户运行级别之前都要优先尝试激活某些预设条件满足的情况下才会生效的功能特性之一便是自动装载额外附加进来辅助使用的外部驱动器装置。 编辑 `/etc/fstab` 文件加入如下条目: ``` /dev/vdb1 /data ext4 defaults 0 0 ``` 最后验证更改是否正确无误不会引发潜在风险可以通过模拟解析整个列表的方式来提前排查可能出现的问题所在。 ```bash mount -a ``` 如果没有任何警告提示信息输出说明一切正常可以放心大胆地保存退出等待下一次冷启之时见证奇迹的发生吧!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值