linux下不重启OS增删磁盘

2018年1月20日 发表评论 阅读评论

一、背景

负责虚拟化的同事问了一个问题:业务部分有需求,希望在不重启OS的情况下,在虚机系统下识别新增的硬盘。在KVM环境下,我之前有记录过《KVM虚拟机动态增加网卡和硬盘》,但在vmware虚拟化和阿里云(私有云)环境下,通过硬件配置新增后,在主机OS里通过fdisk -l 是看不到新增的盘的,不过在/proc/scsi/scsi 文件中一般可以读取到该文件。如何正常识别呢?接下来记录下方法。

二、识别新盘

查看当前盘信息:

[root@361way ~]# fdisk -l
Disk /dev/sda: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00057e3c
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        1332    10485760   83  Linux
/dev/sda3            1332        2376     8388608   82  Linux swap / Solaris
/dev/sda4            2376       13055    85777408    5  Extended
/dev/sda5            2376       13055    85776384   83  Linux
[root@361way ~]# cat /proc/scsi/scsi
Attached devices:
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: NECVMWar Model: VMware IDE CDR10 Rev: 1.00
  Type:   CD-ROM                           ANSI  SCSI revision: 05
Host: scsi2 Channel: 00 Id: 00 Lun: 00
  Vendor: VMware   Model: Virtual disk     Rev: 1.0
  Type:   Direct-Access                    ANSI  SCSI revision: 02

发现,只有一块盘(另一个为CD-ROM)。此时通过虚拟化管理平台新增一块盘:

add-single-device

此时再在系统下查看下:

#查看当前的设备信息
[root@361way ~]# fdisk -l|grep Disk
Disk /dev/sda: 107.4 GB, 107374182400 bytes
Disk identifier: 0x00057e3c
[root@361way ~]# cat /proc/scsi/scsi |grep Channel
Host: scsi1 Channel: 00 Id: 00 Lun: 00
Host: scsi2 Channel: 00 Id: 00 Lun: 00
#增加设备号到scsi虚文件
[root@361way ~]# echo 'scsi add-single-device 2 0 1 0' > /proc/scsi/scsi
#重新查看磁盘信息
[root@361way ~]# fdisk -l|grep Disk|grep dev
Disk /dev/sda: 107.4 GB, 107374182400 bytes
Disk /dev/sdb: 2147 MB, 2147483648 bytes
[root@361way ~]# cat /proc/scsi/scsi |grep Channel
Host: scsi1 Channel: 00 Id: 00 Lun: 00
Host: scsi2 Channel: 00 Id: 00 Lun: 00
Host: scsi2 Channel: 00 Id: 01 Lun: 00

我们接下来再来看下上面的命令,具体的解释:

echo "scsi add-single-device x y z u" > /proc/scsi/scsi 
其中: 
x是硬盘所在SCSI控制器号(一般机器就一个SCSI控制器,所以就是0); 
y是硬盘所在SCSI通道的编号(一般单通道的就是0,多通道的要看是哪个通道了); 
z是硬盘的SCSI ID号(可以通过具体插入的硬盘插槽来判断,一般是在前一个号码+1); 
u是硬盘的lun号(默认情况都是0)

三、移除磁盘

同理,如果通过虚拟化平台移除硬盘后,在系统下看到未生效的,也可以通过如下命令进行移除:

echo "scsi remove-single-device x y z u" >/proc/scsi/scsi

另外也有提到可以通过重新扫盘,识别新盘或移除旧盘,命令如下:

echo '- - -' > /sys/class/scsi_host/host0/scan 

注意:三个横线之间有空格




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: Linux/unix/mac 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.