2021-05-12 14:32:11
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/2:0:0:0/block/ total 0 drwxr-xr-x 10 root root 0 Jun 22 2017 sda
然後檢視/proc/scsi/scsi檔案,獲取對應scsi裝置的詳細資訊。
在此處,有兩塊直連(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。先看看它的檔案資訊。
在其中有3個檔案:delete、rescan和state。其中state記錄了該裝置是否正在執行中。而delete和rescan檔案則用於刪除和重新掃描該裝置。
例如,刪除該裝置,即熱拔。
[root@server2 ~]# echo 1 > /sys/bus/scsi/drivers/sd/2:0:1:0/delete
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-06/145100.htm
相關文章