查看: 4163|回复: 28

[Linux] Linux系统SCSI磁盘管理全攻略

  [复制链接]

7

主题

2201

帖子

1万

积分

Nib

Rank: 11Rank: 11Rank: 11Rank: 11

贡献
245
技术
0
活跃
533
在线时间
478 小时
发表于 2014-5-12 11:05:50 | 显示全部楼层 |阅读模式
Linux系统SCSI磁盘管理全攻略(一)
介绍

本系列文章系统、全面地介绍了Linux 的SCSI设备管理机制和整套操作命令。包括以下六大主题:
·                                Linux SCSI子系统概述
·                                Linux主机LUN识别
·                                动态SAN网络重配
·                                LUN发现步骤
·                                Linux设备命名
·                                SCSI磁盘限制

本文作为系列第一篇,解答了用户的常见问题,如:怎样确认驱模块是否被加载?怎样查看SCSI子系统已发现并识别的设备?如何验证内核已正确识别出LUN的编号,用户在从fabric中添加或删除磁盘时,有哪些方法让主机重新识别?

更多信息

Linux SCSI子系统概述:

Linux SCSI子系统包括三层:
上层由特定的设备类型驱动所组成,如磁盘驱动、磁带驱动和CD-ROM驱动,最靠近用户空间。
下层包括诸如QLogic和Emulex HBA这类驱动,最靠近硬件。
中间层是SCSI核心代码,连接上层和下层。

按照内核版本的区别,驱动可编译进内核或以模块的形式加载到内核。sd是SCSI磁盘驱动,或块驱动,作为模块时命名为scsi_mod。

通常,在大多数版本中这些驱动都编译为模块,并在启动时作为初始化内存磁盘镜像文件(initridimage)的一部分被加载。如果当前没有在启动时加载,而启动过程中要求加载时,那么就需要重新编译一个包含该驱动的初始化内存磁盘镜像文件。在2.4版本内核中,需要修改/etc/modules.conf文件来完成;2.6版本内核中,不仅需要修改/etc/modules.conf文件,还要执行mkinitrd命令来对改动进行更新。

要确认驱动是否编译为模块及当前是否被加载,只需查看lsmod命令输出中的sd_mod 和 scsi_mod。以下为示例输出:
# lsmod | grep sd
sd_mod                13440 296
scsi_mod             104068   6  [qla2300 st sr_mod sg ncr53c8xx sd_mod]
注意:如果SCSI中间层驱动编译为模块,则scsi_mod必须先于上层和下层驱动加载。

Linux主机LUN识别:

Linux 2.4内核版本中,系统在加载主机适配层驱动时通过扫描SCSI总线时识别。SCSI子系统已发现并识别的设备在/proc/scsi/scsi文件中列出。比较好的方法是使用cat命令列出/proc/scsi/scsi的输出,来验证内核已正确识别出LUN ID。命令输出示例如下:
# cat proc/scsi/scsi
# cat /proc/scsi/scsi |less
Attached devices:
Host: scsi1 Channel: 00Id: 00 Lun: 00
  Vendor:IBM-PSG  Model: DDYS-T36950M  M  Rev: S96E
  Type:  Direct-Access                   ANSI SCSI revision: 03
Host: scsi1 Channel: 00Id: 08 Lun: 00
  Vendor:IBM      Model: YGLv3S2         Rev: 0
  Type:  Processor                       ANSI SCSI revision: 02
Host: scsi4 Channel: 00Id: 00 Lun: 00
  Vendor:IBM      Model: 1750500         Rev: 5.17
  Type:  Direct-Access                   ANSI SCSI revision: 05
Host: scsi4 Channel: 00Id: 00 Lun: 01
  Vendor:IBM      Model:1750500          Rev: 5.17
  Type:  Direct-Access                   ANSI SCSI revision: 05
Host: scsi4 Channel: 00Id: 00 Lun: 02
  Vendor:IBM      Model:1750500          Rev: 5.17
  Type:  Direct-Access                   ANSI SCSI revision: 05
Host: scsi4 Channel: 00Id: 00 Lun: 03
  Vendor:IBM      Model:1750500          Rev: 5.17
  Type:  Direct-Access                   ANSI SCSI revision: 05
Host: scsi4 Channel: 00Id: 00 Lun: 04
  Vendor:IBM      Model:1750500          Rev: 5.17
  Type:  Direct-Access                   ANSI SCSI revision: 05
Host: scsi4 Channel: 00Id: 00 Lun: 05
  Vendor: IBM     Model: 1750500          Rev: 5.17
  Type:  Direct-Access                   ANSI SCSI revision: 05
Host: scsi4 Channel: 00Id: 00 Lun: 06
  Vendor:IBM      Model:1750500          Rev: 5.17
  Type:  Direct-Access                   ANSI SCSI revision: 05
Host: scsi4 Channel: 00Id: 00 Lun: 07
  Vendor:IBM      Model:1750500          Rev: 5.17
  Type:  Direct-Access                   ANSI SCSI revision: 05

注意, /proc/scsi/scsi 列出的磁盘设备不是动态的,因此不受网络状态变更的影响。

从Linux2.6内核版本开始,/proc文件系统迁移至改进后的/sys文件系统。/sys文件系统中加入对动态变更的支持,如添加和删除LUN,而无需重新加载主机适配器驱动或重启主机。通常,可通过/sys/class/scsi_host/hostN目录下的内容来查看哪些SCSI设备已被主机识别。N是主机适配器ID号。用户空间有一个lsscsi工具, 使用/sys中的信息来显示所有识别设备的汇总清单。(lsscsi命令仅在SLES中支持)

动态SAN网络重配:

用户在网络中添加或删除磁盘时,需要对其重新识别。可使用以下四种方法之一让Linux主机重新识别这些变更:
1.                               重启主机
2.                               卸载并重新加载主机适配器驱动
3.                               通过echo /sys文件系统(仅适用于2.6内核版本)重新扫描总线
4.                               通过echo /proc或/sys文件系统手动添加和删除SCSI磁盘

这一部分的更多命令示例可参见:Linux系统SCSI磁盘扫描机制解析及命令实例

重启主机或卸载并加载主机适配器驱动
由于设备是通过扫描SCSI总线被发现的,通常重新扫描SCSI总线来发现SAN网络变更是最简便的方法。由重新加载主机适配器驱动或重启系统来触发总线扫描。

卸载主机适配器驱动或重启系统之前,用户必须:
1.                               停止I/O
2.                               卸载所有文件系统
3.                               如果使用了SDD,在重新加载主机适配器驱动前,用sdd stop命令卸载SDD驱动。在主机适配器驱动重新加载之后,用sdd start命令重新加载SDD。

当主机适配器驱动作为模块植入时,可通过重新加载主机适配器驱动来解决。而无论主机适配器驱动编入内核还是作为模块,都可以重启系统来解决该问题。

通过echo /sys文件系统重新扫描总线(仅适用于Linux2.6内核版本)
对于Linux2.6内核版本,可通过/sys接口重新扫描总线,而无需重新加载主机适配器驱动或重启系统。以下命令可扫描所有通道、target、LUN和主机。
echo “- - -” >/sys/class/scsi_host/hostH/scan

手动添加和删除SCSI磁盘
用户可通过以下命令手动添加和删除SCSI磁盘。
注意:以下命令示例中,H, B, T, L代表设备的主机,总线,target,和LUN ID。
可通过以下命令删除或对SCSI磁盘取消配置:
echo "scsiremove-single-device H B T L" > /proc/scsi/scsi
如果驱动无法被卸载并重新加载,并且用户知道新设备的主机,总线,target和LUN ID,那么可以使用以下命令通过/proc/scsi/scsi 文件添加来实现:
echo "scsiadd-single-device H B T L" > /proc/scsi/scsi

对于2.6内核版本,设备同样可通过/sys文件系统来添加和删除。使用以下命令删除磁盘并使系统重认此更新:
echo “1” >/sys/class/scsi_host/hostH/device/H:B:T:L/delete
或使用如下命令:
echo “1” >/sys/class/scsi_host/hostH/device/targetH:B:T/H:B:T:L/delete
使用以下命令在内核中重新注册磁盘:
echo “B T L” >/sys/class/scsi_host/hostH/scan

注意:Linux内核不在/dev目录中为网络设备指定固定名称。设备文件名在扫描总线时按照发现顺序指定,例如,一个LUN名为/dev/sda,在驱动重新加载后,这个LUN名称可能更改为/dev/sdce。网络重认可能导致主机,总线,target和LUN ID值的偏移,因此通过/proc/scsi/scsi文件添加特定磁盘是不可靠的。

评分

参与人数 1金币 +9 收起 理由
时光与梦 + 9 赞一个!

查看全部评分

0

主题

641

帖子

7358

积分

论坛VIP原价+免回复特权

Rank: 8Rank: 8

贡献
0
技术
0
活跃
-1
在线时间
0 小时
发表于 2014-5-12 21:27:36 | 显示全部楼层
感谢卤煮的大恩大德!

0

主题

212

帖子

589

积分

Gib

Rank: 5Rank: 5

贡献
0
技术
0
活跃
0
在线时间
0 小时
发表于 2014-5-14 22:29:30 | 显示全部楼层
楼主真是个人才啊!

0

主题

379

帖子

865

积分

论坛VIP原价+免回复特权

Rank: 8Rank: 8

贡献
0
技术
0
活跃
-1
在线时间
0 小时
发表于 2014-5-28 06:09:54 | 显示全部楼层
楼主真是个人才啊!

0

主题

363

帖子

834

积分

论坛VIP原价+免回复特权

Rank: 8Rank: 8

贡献
0
技术
0
活跃
-2
在线时间
0 小时
发表于 2014-6-14 00:12:08 | 显示全部楼层
虚拟化,据库,程学习就在www.santongit.com!

0

主题

243

帖子

685

积分

Mib

Rank: 4

贡献
0
技术
0
活跃
-1
在线时间
0 小时
发表于 2014-6-19 23:59:20 | 显示全部楼层
微软,Linux,操作系统技术尽在www.santongit.com!

0

主题

626

帖子

9543

积分

论坛VIP原价+免回复特权

Rank: 8Rank: 8

贡献
0
技术
0
活跃
0
在线时间
0 小时
发表于 2014-6-20 13:35:42 | 显示全部楼层
每天来学习,跟三通一起成长!

0

主题

666

帖子

3345

积分

论坛VIP原价+免回复特权

Rank: 8Rank: 8

贡献
0
技术
0
活跃
22
在线时间
2 小时
发表于 2014-7-8 12:04:36 | 显示全部楼层
这个消息太震惊了!

0

主题

382

帖子

1112

积分

论坛VIP原价+免回复特权

Rank: 8Rank: 8

贡献
0
技术
0
活跃
0
在线时间
0 小时
发表于 2014-7-18 23:02:05 | 显示全部楼层
楼主真是个人才啊!

0

主题

573

帖子

9473

积分

论坛VIP原价+免回复特权

Rank: 8Rank: 8

贡献
0
技术
0
活跃
-3
在线时间
0 小时
发表于 2014-7-19 14:51:24 | 显示全部楼层
这个你能信?反正我信了!
使用 高级模式(可批量传图、插入视频等)
您需要登录后才可以回帖 登录 | 立即注册

快速回复 返回顶部 返回列表