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設備信息。ui

[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設備的詳細信息。spa

[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支持熱插。code

熱插新盤的方式是向/proc/scsi/scsi中寫入新scsi設備的信息。方式以下:server

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

其中:blog

      a == hostadapter id (first one being 0)事件

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

      c == IDrem

      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 /sys/class/scsi_host/host*/scan;do echo "- - -" >$i;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
相關文章
相關標籤/搜索