手把手教你解决ESXi扩容后Linux LVM分区表『Device busy』报错当你兴冲冲地在ESXi上给Linux虚拟机扩容磁盘却在执行fdisk写入分区表时突然看到WARNING: Re-reading the partition table failed with error 16: Device or resource busy的红色警告是不是瞬间头皮发麻别慌这个看似棘手的报错其实藏着Linux内核的一个小秘密。今天我们就来彻底拆解这个设备忙错误不仅告诉你三种解决方案还会帮你理解背后的原理下次遇到类似问题就能举一反三。1. 错误现象深度解析那个让人心跳漏拍的报错信息通常长这样WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot...这个警告的本质是内核的分区表缓存机制在作祟。当你在fdisk中修改分区表并执行w写入时系统会尝试通过ioctl()系统调用通知内核重新读取分区表。但如果此时有任何进程正在使用这个磁盘比如挂载了某个分区内核就会拒绝立即更新缓存中的分区表信息抛出EBUSY错误错误码16。典型触发场景扩容/dev/sda时其上的/dev/sda1正被挂载为根分区LVM正在使用该磁盘的物理卷(PV)任何用户进程持有该磁盘的文件句柄可以通过以下命令确认设备是否被占用# 查看磁盘挂载情况 lsblk | grep -A 10 sda # 检查哪些进程正在使用磁盘 lsof /dev/sda*2. 三种解决方案对比遇到这个报错时你面前摆着三条路每种方案各有优劣2.1 方案一partprobe命令 - 优雅刷新partprobe是parted工具包中的瑞士军刀专门用于通知内核重新读取分区表。它的工作原理是向内核发送BLKRRPARTioctl请求。操作步骤# 安装parted工具包如果尚未安装 yum install parted -y # CentOS/RHEL apt-get install parted -y # Ubuntu/Debian # 执行分区表刷新 partprobe /dev/sda优势无需重启系统对运行中的服务零影响支持指定单个设备刷新局限某些老旧内核版本可能不支持对LVM物理卷效果有限提示执行后建议用lsblk确认新分区是否可见如果仍然看不到可能需要尝试其他方案。2.2 方案二kpartx命令 - LVM专家的选择当partprobe无效时特别是处理LVM环境时kpartx会成为救命稻草。它能动态创建设备映射特别适合处理复杂的存储配置。操作流程# 安装kpartx通常包含在multipath-tools中 yum install multipath-tools -y apt-get install multipath-tools -y # 删除旧映射谨慎操作 dmsetup remove_all # 创建新分区映射 kpartx -av /dev/sda # 验证新分区 ls /dev/mapper/适用场景场景是否推荐传统分区★★☆☆☆LVM物理卷★★★★☆多路径设备★★★★★风险提示会临时影响依赖原设备映射的服务可能需要手动重建dm设备2.3 方案三简单粗暴的重启 - 终极武器当其他方法都失效时重启系统永远是最后的保障。这不是玩笑 - 在某些生产环境中有计划的重启比冒险尝试各种命令更可靠。重启的正确姿势确保已保存所有工作使用sync命令同步磁盘执行reboot或shutdown -r now重启 vs 命令刷新的选择矩阵考虑因素推荐方案关键业务系统partprobe/kpartx测试开发环境重启远程无console访问优先命令方案内核版本3.10建议重启3. 实战决策树我该选哪种方案面对具体场景时可以按照这个流程图决策首先尝试partprobe执行partprobe /dev/sda检查lsblk是否显示新分区如果无效且使用LVM运行kpartx -av /dev/sda验证/dev/mapper/下设备节点前两种方法失败时评估是否允许重启安排维护窗口执行重启极端情况处理如果重启后仍无效考虑检查ESXi层面磁盘是否真扩容确认没有残留的dm设备dmsetup ls4. 扩容后的完整LVM操作指南成功解决分区表问题后还需要完成LVM扩容的全流程。以下是关键步骤的快速参考4.1 创建物理卷(PV)pvcreate /dev/sda3 pvdisplay # 验证4.2 扩展卷组(VG)vgextend centos /dev/sda3 vgdisplay # 检查可用空间4.3 扩展逻辑卷(LV)# 查看当前LV情况 lvs # 扩展home逻辑卷示例 lvextend -L 150G /dev/centos/home /dev/sda3 # 或用所有剩余空间 lvextend -l 100%FREE /dev/centos/home4.4 文件系统扩容对于XFS文件系统xfs_growfs /dev/centos/home对于ext4文件系统resize2fs /dev/centos/home最后用df -h确认空间已扩容成功。曾经有次我在凌晨3点处理这种问题因为忘了执行xfs_growfs盯着没变化的空间大小怀疑人生了半小时...