一、背景
负责虚拟化的同事问了一个问题:业务部分有需求,希望在不重启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)。此时通过虚拟化管理平台新增一块盘:
此时再在系统下查看下:
#查看当前的设备信息 [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
注意:三个横线之间有空格。