1. 从物理层到虚拟化的完整扩容链路
当ESXi主机的本地存储空间告急时,传统做法往往需要停机维护,这对业务连续性要求高的场景简直是噩梦。现在我们可以像给手机换存储卡一样,实现从物理磁盘到虚拟机文件系统的全链路在线扩容。整个过程就像搭积木,需要依次打通三个关键环节:
- 物理层:在RAID控制器中创建新的虚拟磁盘
- 虚拟化层:将新空间加入ESXi数据存储
- 操作系统层:通过LVM将空间分配给Linux虚拟机
我最近在给某电商平台的订单处理服务器扩容时,就完整走通了这套流程。他们的ESXi主机用的是Dell R750xd,原有两块1.8TB硬盘做RAID1,虚拟机采用厚置备延迟置零模式。当监控系统报警存储剩余不足10%时,我们通过在线插入两块新硬盘,最终将/home目录从500GB扩展到2TB,全程业务零中断。
2. 服务器RAID组在线扩容实战
2.1 硬件准备与风险控制
在开始操作前,有三点必须确认:
- 确保RAID控制器支持在线扩容(如PERC H730以上)
- 新硬盘规格建议与现有硬盘一致(避免降速)
- 备妥应急方案(如快照备份)
以Dell服务器为例,通过iDRAC控制台可以直观看到物理磁盘状态。插入新硬盘后,在"存储→物理磁盘"中会显示为"非RAID"状态,就像刚买来的空白U盘需要先格式化。
2.2 两种创建虚拟磁盘的方法
方法一:iDRAC图形化操作(推荐新手)
- 将物理磁盘转换为RAID模式
- 创建新RAID组时有个坑要注意:读写策略选择
- 写策略选"回写"性能更好,但突然断电可能丢数据
- 生产环境建议选"直写"更安全
方法二:PERCCLI命令行(适合批量操作)当iDRAC不可用时,可以通过SSH登录ESXi主机操作:
# 安装PERCCLI工具 esxcli software vib install -v /vmware-perccli_007.1020.vib --no-sig-check # 查看磁盘状态 /opt/lsi/perccli/perccli /c0/eall/sall show # 创建RAID1(示例用32:3和32:4槽位硬盘) /opt/lsi/perccli/perccli /c0 add vd r1 size=all drives=32:3,32:4创建完成后别急着下一步,务必检查后台初始化进度:
# 查看初始化进度 /opt/lsi/perccli/perccli /c0/vall show init # 监控一致性检查 /opt/lsi/perccli/perccli /c0/vall show cc3. ESXi存储池扩容技巧
3.1 数据存储扩容操作
在vCenter网页端操作就像给U盘分区:
- 进入"存储→数据存储"
- 选择目标存储→"增加容量"
- 关键点:必须选择"向现有VMFS数据存储添加数据区"
这里有个容易翻车的地方:如果看不到新创建的RAID组,可能是以下原因:
- RAID组未完全初始化(等待5-10分钟)
- 磁盘控制器驱动版本过旧(需升级)
3.2 性能优化参数
扩容完成后建议调整两个参数:
- 多路径策略:改为Round Robin可提升多磁盘吞吐
- 块大小:大文件应用建议选8MB块大小
实测在MySQL数据库场景,调整后随机读写性能提升约35%。可以通过esxcli命令查看当前配置:
esxcli storage nmp device list4. 虚拟机磁盘热添加实战
4.1 硬盘类型选择玄机
在"编辑设置→添加硬盘"时,三种置备模式区别很大:
- 精简置备:空间按需分配,适合测试环境
- 厚置备延迟置零:立即占空间但延迟初始化,平衡型选择
- 厚置备置零:完全预分配且立即清零,适合生产关键业务
我曾经在金融系统迁移时做过测试:同样100GB磁盘,厚置备置零的Oracle数据库比精简置备的TPS高出22%,但初始化需要多花2小时。
4.2 在线扩容的隐藏条件
即使ESXi 7.0+支持在线扩容,仍需满足:
- 虚拟机不能有快照
- 使用PVSCSI或NVMe控制器
- 客户机已安装VMware Tools
如果遇到灰色不可点的情况,可以这样排查:
# 检查虚拟机配置 vim-cmd vmsvc/get.config <VMID> | grep -E 'snapshot|controller'5. Linux LVM扩容全解析
5.1 磁盘识别与分区
新增磁盘通常显示为/dev/sdb或/dev/sdc,建议先用lsblk确认:
lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT分区时有个细节:如果磁盘大于2TB,必须用parted工具转为GPT分区表:
parted /dev/sdb mklabel gpt parted /dev/sdb mkpart primary 0% 100%5.2 LVM操作黄金四步
创建物理卷:
pvcreate /dev/sdb1扩展卷组:
vgextend centos /dev/sdb1 # 假设VG名为centos扩展逻辑卷:
lvextend -l +100%FREE /dev/mapper/centos-home调整文件系统:
# XFS系统用 xfs_growfs /home # EXT4系统用 resize2fs /dev/mapper/centos-home
5.3 扩容验证与监控
操作完成后建议做三项检查:
- 用df -h查看挂载点容量
- 用pvdisplay/vgdisplay/lvdisplay查看各级容量
- 用iostat -x 1监控磁盘IO负载
我在某次扩容后曾遇到xfs_growfs卡住的情况,后来发现是磁盘坏道导致。建议首次扩容后运行:
# 检查文件系统完整性 xfs_repair -n /dev/mapper/centos-home6. 避坑指南与经验分享
坑一:RAID初始化拖慢性能新RAID组后台初始化可能持续数小时,期间磁盘性能下降可达70%。建议在业务低峰期操作,或通过PERCCLI调整初始化速率:
# 将初始化速率设为30%(默认100%) /opt/lsi/perccli/perccli /c0/vall set bgi=30坑二:LVM扩容导致文件系统只读当底层存储异常时,XFS可能自动转为只读模式。遇到这种情况需要:
- umount /home
- xfs_repair /dev/mapper/centos-home
- mount -a
坑三:虚拟机磁盘锁冲突在vCenter和命令行同时操作可能导致磁盘锁冲突,报错"File is locked"。此时需要:
# 列出所有锁 vmfsfilelockinfo -h /vmfs/volumes/datastore1/VM/VM.vmdk # 强制释放锁 vmfsfilelockrelease -h /vmfs/volumes/datastore1/VM/VM.vmdk这套方案经过金融、电商等多个场景验证,最关键的体会是:每次扩容前务必做好虚拟机快照,并在变更窗口内完成。曾经有团队在业务高峰时操作,虽然技术流程正确,但由