首頁 > 運維 > linux運維 > 主體

Linux上磁碟熱插拔是什麼意思?

零下一度
發布: 2017-06-23 11:19:12
原創
3783 人瀏覽過

首先取得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 0lrwxrwxrwx 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 0drwxr-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: 02Host: scsi4 Channel: 00 Id: 00 Lun: 00
  Vendor: NECVMWar Model: VMware SATA CD01 Rev: 1.00
  Type:   CD-ROM                           ANSI  SCSI revision: 05Host: 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支援熱插。

熱插新碟的方式是寫入新scsi設備到/proc/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/                              statedelete                              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
登入後複製

 

以上是Linux上磁碟熱插拔是什麼意思?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!