VMware ESXI虚拟机磁盘在线扩容后fdisk -l 找不到问题解决

在VMware ESXI终端页面为虚拟机新增磁盘后,进入虚拟机执行fdisk -l 找不到新增的盘。重启系统肯定是可以解决的,但是机器有在跑测试不想重启虚拟机,注意Linux是支持热插的。下面是解决我的问题的方案:

# fdisk -l
Disk /dev/sda: 80 GiB, 85899345920 bytes, 167772160 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x159c1b84

Device     Boot   Start       End   Sectors  Size Id Type
/dev/sda1  *       2048   1499135   1497088  731M 83 Linux
/dev/sda2       1501182 167770111 166268930 79.3G  5 Extended
/dev/sda5       1501184 167770111 166268928 79.3G 8e Linux LVM


Disk /dev/mapper/git--svn--vg-root: 78.3 GiB, 84074823680 bytes, 164208640 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/git--svn--vg-swap_1: 976 MiB, 1023410176 bytes, 1998848 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

可以执行lsscsi

# lsscsi
[32:0:0:0]    disk    VMware,  VMware Virtual S 1.0   /dev/sda
[2:0:0:0]    cd/dvd  NECVMWar VMware SATA CD01 1.00  /dev/sr0

有的系统没有这个命令,需要安装。或者执行下面命令也可以

#ll /sys/bus/scsi/drivers/sd/
total 0
lrwxrwxrwx 1 root root    0 Oct 23 11:26 32:0:0:0 -> ../../../../devices/pci0000:00/0000:00:10.0/host32/target32:0:0/32:0:0:0/

从上面可以看到 [32:0:0:0] && /32:0:0:0/ 字样,这个是代表什么意思呢?

# cat /proc/scsi/scsi 
Attached devices:
Host: scsi2 Channel: 00 Id: 00 Lun: 00
  Vendor: NECVMWar Model: VMware SATA CD00 Rev: 1.00
  Type:   CD-ROM                           ANSI  SCSI revision: 05
Host: scsi32 Channel: 00 Id: 00 Lun: 00
  Vendor: VMware   Model: Virtual disk     Rev: 2.0 
  Type:   Direct-Access                    ANSI  SCSI revision: 06

如上:
有两块scsi磁盘,一块通过光驱cd-rom连接的光盘。我们只考虑scsi磁盘,VMware ESXI终端页面原来的磁盘SCSI 控制器 0:0,新增的磁盘SCSI 控制器 0:1。所以这两块磁盘在scsi中的定位符为32:0:0:0和32:0:1:0。如果继续插入一块盘,那么新盘在scsi中的定位符为32:0:2:0,这个数值串非常重要。

热插
在向计算机中插入一块磁盘后,内核因为识别不了它所以不会产生任何事件通知,因此在/sys目录中不会产生任何文件,任何工具也就读取不了它。热插新盘的方式是向/proc/scsi/scsi中写入新scsi设备的信息。方式如下:

echo "scsi add-single-device w x y z"  > /proc/scsi/scsi

其中:
参数值 w、x、y 、 z,解释如下:
w(Host)是主机适配器标识,第一个适配器为零(0)
x (Channel)是主机适配器上的 SCSI 通道,第一个通道为零(0)
y (ID)是设备的 SCSI 标识
z (Lun)是 LUN 号,第一个 LUN 为零(0)

这里执行:

 echo "scsi add-single-device 32 0 1 0" > /proc/scsi/scsi 

这里是没有啥反应的,执行有问题才会报错。

这里可以再次执行:fdisk -l 新增的磁盘显示出来了。

# fdisk -l
Disk /dev/sda: 80 GiB, 85899345920 bytes, 167772160 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x159c1b84

Device     Boot   Start       End   Sectors  Size Id Type
/dev/sda1  *       2048   1499135   1497088  731M 83 Linux
/dev/sda2       1501182 167770111 166268930 79.3G  5 Extended
/dev/sda5       1501184 167770111 166268928 79.3G 8e Linux LVM


Disk /dev/mapper/git--svn--vg-root: 78.3 GiB, 84074823680 bytes, 164208640 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/git--svn--vg-swap_1: 976 MiB, 1023410176 bytes, 1998848 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sdb: 120 GiB, 128849018880 bytes, 251658240 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

后面就可以执行其他操作了。

另外,重新扫描scsi总线也可以实现热插的功能。
因为上面的例子中,scsi host id为2(即host2),所以扫描的是host2,这样host2这个scsi上的所有设备都会被重新扫描。
# echo "- - -" > /sys/class/scsi_host/host2/scan
如果不知道要扫描哪个host,直接使用循环全部扫描。
不过我这里没有起到作用。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐