虚拟机不重启添加磁盘

虽然虚拟机重新启动非常迅速, 但是总是有各种的理由不愿意重启.

实际上操作系统基本都支持动态增加(和减少)磁盘的, 只要硬件支持动态增减, 系统基本都没问题. 常见的服务器热插拔硬盘; PC上我也经常直接插拔硬盘进行处理, 除了个别情况外也都可以识别 - 原理上硬件是没有设计用来这样操作的, 风险自负.

在开机状态下, 虚拟化环境中虚拟硬盘不止可以动态增减, 单个磁盘的容量也可以变化 (嗯, 大部分还只支持增加). 然后在虚拟机操作系统里面进行后续操作就可以了, 这部分操作其实和在真实(支持硬件热扩展)的服务器上操作是一样的:

###Windows

Windows环境直接调整好磁盘后, 进入磁盘管理器进行处理即可, 如果磁盘管理器未发现变化就刷新一下.

###Linux添加硬盘

  1. 看一下硬盘接口的编号情况.catprocscsiscsi.png
  2. 如果没有进行特殊制定, 那么新添加硬盘的话就是SCSI卡编号和通道编号不变, ID增加1. 如果在增加硬盘时手工进行了指定的话, 那么按照手工指定的参数. 上面的情况就可以
    echo "scsi add-single-device 2 0 1 0" > /proc/scsi/scsi
    四个数字分别是SCSI卡号, 通道号, 设备ID号, LUN号
  3. 接下来cat /proc/scsi/scsi会发现设备多出来了, 到/dev下面也能看到新的设备
  4. 然后就可以按照一般的方法fdisk, mkfs了
  5. 这样修改的话, 如果编辑了fstab一定要仔细检查一下, 因为不重新启动的话万一fstab被编辑坏了不会被发现, 下次重新启动就悲剧了

###Linux扩展硬盘大小

  1. 找到调整过的磁盘的编号, 4个数字, 和上面的介绍一样.
  2. 运行命令让系统刷新硬件状态(用实际的编号替换下面命令中的例子)
    echo "1" >/sys/class/scsi_device/2:0:1:0/device/rescan
  3. fdisk -l 确认一下系统已经识别了硬盘的容量变化以及当前分区情况
  4. fdisk手工计算并调整分区表. (如果用了LVM的话, 用相关命令调整逻辑分区)
  5. 调整文件系统
    resize2fs device
    如果resize2fs不能识别分区大小已经改变, 可以partprobe.