加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

LINUX教学:Linux上磁盘热插拔

发布时间:2020-12-13 17:35:54 所属栏目:Linux 来源:网络整理
导读:《LINUX教学:Linux上磁盘热插拔》要点: 本文介绍了LINUX教学:Linux上磁盘热插拔,希望对您有用。如果有疑问,可以联系我们。 起首获取scsi设备的信息. [root@server2 ~ ]# lsscsi[ 2 : 0 : 0 : 0 ] disk VMware,VMware Virtual S 1.0 /dev/ sda[ 4 : 0 : 0

《LINUX教学:Linux上磁盘热插拔》要点:
本文介绍了LINUX教学:Linux上磁盘热插拔,希望对您有用。如果有疑问,可以联系我们。

起首获取scsi设备的信息.

[root@server2 ~]# lsscsi
[2:0:0:0]    disk    VMware,VMware Virtual S 1.0   /dev/sda
[4:0:0:0]    cd/dvd  NECVMWar VMware SATA CD01 1.00  /dev/sr0

有些操作系统没有lsscsi命令,则可以使用下面的办法获取scsi设备信息.

[root@server2 ~]# ll /sys/bus/scsi/drivers/sd/

total
0
lrwxrwxrwx
1 root root? ? 0 Jun 22 17:29 2:0:0:0 -> ../../../../devices/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0
--w------- 1 root root 4096 Jun 22 17:29 bind
--w------- 1 root root 4096 Jun 22? 2017 uevent
--w------- 1 root root 4096 Jun 22 17:29 unbind
?
[root@server2 ~]# ll /sys/bus/scsi/drivers/sd/2:0:0:0/block/
total 0
drwxr-xr-x 10 root root 0 Jun 22  2017 sda

然后查看/proc/scsi/scsi文件,获取对应scsi装备的详细信息.

[root@server2 ~]# cat /proc/scsi/scsi

Attached devices:
Host: scsi2 Channel:
00 Id: 00 Lun: 00
? Vendor: VMware,? Model: VMware Virtual S Rev:
1.0
? Type:? Direct
-Access? ? ? ? ? ? ? ? ? ? ANSI? SCSI revision: 02
Host: scsi4 Channel: 00 Id: 00 Lun: 00

? Vendor: NECVMWar Model: VMware SATA CD01 Rev:
1.00
? Type:? CD
-ROM? ? ? ? ? ? ? ? ? ? ? ? ? ANSI? SCSI revision: 05
Host: scsi2 Channel: 00 Id: 01 Lun: 00

? Vendor: VMware,? Model: VMware Virtual S Rev:
1.0
? Type:? Direct
-Access? ? ? ? ? ? ? ? ? ? ANSI? SCSI revision: 02

在此处,有两块直连(Direct-Access)的scsi磁盘,一块通过光驱cd-rom连接的光盘.我们只考虑scsi磁盘,所以这两块磁盘在scsi中的定位符为2:0:0:0和2:0:1:0.如果继续插入一块盘,那么新盘在scsi中的定位符为2:0:2:0,这个数值串异常重要.

1.1 热插

在向计算机中插入一块磁盘后,内核因为识别不了它所以不会产生任何事件通知,因此在/sys目录中不会产生任何文件,任何工具也就读取不了它.重启系统肯定是可以办理的,但是Linux支持热插.

热插新盘的方式是向/proc/scsi/scsi中写入新scsi装备的信息.方式如下:

echo "scsi add-single-device a b c d" >/proc/scsi/scsi

此中:

? ? ? a == hostadapter id (first one being 0)

? ? ? b == SCSI channel on hostadapter (first one being 0)

? ? ? c == ID

? ? ? d == LUN (first one being 0)

例如上面的例子,应该添加如下信息:

[root@server2 ~]# echo "scsi add-single-device 2:0:2:0" >/proc/scsi/scsi

当然,重新扫描scsi总线也可以实现热插的功能.因为上面的例子中,scsi host id为2(即host2),所以扫描的是host2,这样host2这个scsi上的所有设备都邑被重新扫描.

[root@server2 ~]# echo "- - -" > /sys/class/scsi_host/host2/scan

如果不知道要扫描哪个host,直接使用循环全体扫描.

[root@xuexi ~]# for i in `ls /sys/class/scsi_host/`;do echo "- - -" >/sys/class/scsi_host/$i/scan;done

热插之后,fdisk -l等命令就可以辨认到该磁盘了.

1.2 热拔

热拔磁盘的方式是在/proc/scsi/scsi中移除对应scsi装备的信息.方式如下:

echo "scsi remove-single-device a b c d" >/proc/scsi/scsi

例如删除2:0:2:0这块磁盘.

[root@server2 ~]# echo "scsi remove-single-device 2 0 2 0" >/proc/scsi/scsi

因为要删除的设备已经存在,/sys中已经有它完整的信息,所以也从其自身设备长进行删除.

起首查看scsi设备信息.

[root@server2 ~]# lsscsi
[2:0:0:0]    disk    VMware,VMware Virtual S 1.0   /dev/sda
[2:0:1:0]    disk    VMware,VMware Virtual S 1.0   /dev/sdb
[4:0:0:0]    cd/dvd  NECVMWar VMware SATA CD01 1.00  /dev/sr0

?例如要删除/dev/sdb,即2:0:1:0.先看看它的文件信息.

[root@server2 ~]# ls /sys/bus/scsi/drivers/sd/2:0:1:0/

block
/? ? ? ? ? ? ? ? ? ? ? ? ? ? ? evt_lun_change_reported? ? ? ? ? ? model? ? ? ? ? ? ? ? ? ? ? ? ? ? ? scsi_level
bsg
/? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? evt_media_change? ? ? ? ? ? ? ? ? ? power/? ? ? ? ? ? ? ? ? ? ? ? ? ? ? state
delete ? ? ? ? ? ? ? ? ? ? ? ? ? ? evt_mode_parameter_change_reported? queue_depth? ? ? ? ? ? ? ? ? ? ? ? subsystem
/
device_blocked? ? ? ? ? ? ? ? ? ? ? evt_soft_threshold_reached? ? ? ? ? queue_ramp_up_period? ? ? ? ? ? ? ? timeout
device_busy? ? ? ? ? ? ? ? ? ? ? ? generic
/? ? ? ? ? ? ? ? ? ? ? ? ? ? queue_type? ? ? ? ? ? ? ? ? ? ? ? ? type
dh_state? ? ? ? ? ? ? ? ? ? ? ? ? ? iocounterbits? ? ? ? ? ? ? ? ? ? ? rescan? ? ? ? ? ? ? ? ? ? ? ? ? ? ? uevent
driver
/? ? ? ? ? ? ? ? ? ? ? ? ? ? iodone_cnt? ? ? ? ? ? ? ? ? ? ? ? ? rev? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? unpriv_sgio
eh_timeout? ? ? ? ? ? ? ? ? ? ? ? ? ioerr_cnt? ? ? ? ? ? ? ? ? ? ? ? ? scsi_device
/? ? ? ? ? ? ? ? ? ? ? ? vendor
evt_capacity_change_reported? ? ? ? iorequest_cnt? ? ? ? ? ? ? ? ? ? ? scsi_disk
/? ? ? ? ? ? ? ? ? ? ? ? ? vpd_pg80
evt_inquiry_change_reported? ? ? ? modalias? ? ? ? ? ? ? ? ? ? ? ? ? ? scsi_generic
/? ? ? ? ? ? ? ? ? ? ? vpd_pg83

在此中有3个文件:delete、rescan和state.此中state记录了该设备是否正在运行中.而delete和rescan文件则用于删除和重新扫描该设备.

例如,删除该装备,即热拔.

[root@server2 ~]# echo 1 > /sys/bus/scsi/drivers/sd/2:0:1:0/delete

本文永远更新链接地址

编程之家PHP培训学院每天发布《LINUX教学:Linux上磁盘热插拔》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读