首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
VMware中Ubuntu虚拟机LVM磁盘扩容完整操作指南
📅 2026/10/2 2:51:42
✍️ 爱科研究院
👁 阅读 3,247
做服务器运维和虚拟化这行VMware里跑Ubuntu虚拟机再常见不过了。但凡是用了Ubuntu Server默认安装的人十有八九会遇到一个让人头疼的问题磁盘空间不够了。在VMware里把虚拟磁盘调大重启进去一看df -h还是老样子甚至分区工具里能看到空闲空间系统就是用不上。这时候就要聊到LVM逻辑卷管理了。这篇文章就把VMware环境下Ubuntu LVM扩展容量的完整操作讲透从虚拟磁盘扩容到分区调整、PV/VG/LV扩容、文件系统resize每一步干什么、为什么这么干、有哪些坑全给你摊开说。1. 扩容前准备与整体思路1.1 为什么Ubuntu Server默认就用LVM先说说LVM是个什么东西。LVM把物理磁盘或分区抽象成物理卷PV多个PV可以组成卷组VG再从VG里划分出逻辑卷LV给系统当“虚拟磁盘”用。这样做的核心好处是你不再受单个物理分区的容量限制空间可以在不同逻辑卷之间灵活调整而且扩展的时候通常不需要重启机器。打个比方普通分区就像你租了一间固定大小的仓库想变大只能把仓库拆了重建LVM则像一个物业公司统一管理一整层楼哪个租户需要更多空间直接从公共区域划一块过去就行不用动墙。Ubuntu Server安装程序在检测到整块磁盘时默认会创建LVM卷组根目录就落在逻辑卷上。很多云镜像、虚拟化模板也沿用这个习惯。因此在VMware里扩容Ubuntu虚拟机绕不开LVM这一层。如果你不懂LVM直接在VMware里把磁盘扩大系统只能看到物理磁盘变大了但文件系统还是缩在原来的逻辑卷里等于白扩。1.2 VMware层面对虚拟磁盘扩容的正确姿势VMware层面扩容挺简单但有几个前提必须满足。打开虚拟机设置在“硬盘”一栏右侧能看到“扩展”按钮。如果虚拟机正在运行有些场景可以直接扩展但为了稳妥我向来建议先关机再扩。尤其数据库、生产环境这类对数据一致性要求高的千万别图省事在线扩。具体操作关闭Ubuntu虚拟机。编辑设置选中硬盘。磁盘大小右侧点“扩展”输入新的总大小。确认后等待VMware完成操作。这里有个特别容易卡壳的坑如果虚拟机有快照扩展按钮是灰色的点不动。VMware不允许对带快照的虚拟磁盘做扩容。必须先把快照删掉。删快照会把虚拟机当前状态“合并”进基础磁盘这个过程中虚拟机状态应该关机或处于正常运行状态千万不要在删除快照期间强制断电否则虚拟磁盘可能损坏。如果快照里有重要数据又不想丢可以先克隆虚拟机或者先开机制作备份再处理快照。扩展完成后物理磁盘大小变了但分区、PV、LV、文件系统全都还没变。接下来的顺序必须严格分区扩容 - PV扩容 - LV扩容 - 文件系统扩容。任何一步颠倒都可能造成数据不一致。1.3 整体操作蓝图先给一张执行顺序图后面每一步都按这个来VMware层面关机、删快照如有、扩展虚拟磁盘。开机用lsblk确认物理磁盘的新容量。扩展物理分区通常是/dev/sda5或/dev/sda3。用pvresize刷新物理卷让PV识别分区新空间。用lvextend把空闲空间划给目标逻辑卷。用resize2fs或xfs_growfs扩展文件系统。df -h验证最终容量。这个顺序为什么不能乱因为LVM是分层的文件系统建在LV上LV建在VG上VG建在PV上PV建在物理分区上。你只有先把底层的空间“喂”到上层上层才能拿到新容量。如果直接扩大文件系统而LV没扩文件系统会报错如果LV扩了但PV没扩LV会用掉VG里的空闲空间等下次重启可能卷组空间又不够。所以低层到高层一层层来。2. 虚拟机磁盘扩容后的系统侧检测与分区调整2.1 开机后用lsblk确认新磁盘空间虚拟机启动后第一件事就是打开终端敲lsblk这个命令会非常清晰地列出所有块设备。你会看到类似这样的输出NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 100G 0 disk ├─sda1 8:1 0 1M 0 part ├─sda2 8:2 0 1G 0 part /boot └─sda5 8:5 0 99G 0 part └─vgubuntu-root 253:0 0 99G 0 lvm /假如原来磁盘是50G现在VMware里扩展到了100Glsblk应该显示sda为100G但sda5还是50G。如果sda都还是旧大小说明VMware扩展没生效或者虚拟机没识别到新容量。这时候可以重启一次一般就会看到。还有一种情况VMware对SCSI控制器热添加支持很好但有些老版本或特定控制器需要重新扫描SCSI总线。可以用echo - - - | sudo tee /sys/class/scsi_host/host0/scan对host0、host1等都试一遍。不过最省心的还是直接重启虚拟机。确认物理磁盘容量到位后再确认LVM当前状态sudo pvdisplay sudo vgdisplay sudo lvdisplaypvdisplay会显示PV大小比如现在还是50G那我们就知道需要扩容分区和PV了。2.2 处理物理分区用growpart而不是fdisk这是整个操作里最容易被搞砸的一步。很多教程会让你用fdisk删掉旧分区、重建一个大分区。对普通数据盘这么干勉强可以但对承载LVM PV的分区来说直接删了重建风险极大。因为LVM的PV元数据存放在分区头部你要是删分区时记错起始扇区PV元数据就废了卷组有可能丢失。我见过不止一个人因为想“顺手把分区删了重建”结果整个卷组挂不上数据全乱。正确做法是用growpart这个工具。它做的事情本质上是重写分区表把分区结束位置挪到磁盘末尾同时保留起始位置不变。这样分区数据从头到尾没有任何位移安全性高得多。Ubuntu通常自带cloud-guest-utils这个包里面就有growpart。如果提示命令不存在先安装sudo apt update sudo apt install cloud-guest-utils然后查看当前分区结构确认要扩展的分区号。假如sda5是LVM PV所在分区执行sudo growpart /dev/sda 5注意写法第一个参数是磁盘设备名/dev/sda第二个参数是分区号5不是/dev/sda5。growpart会自动把第5个分区的结束扇区扩展到磁盘可用的最大位置。执行后会输出类似“CHANGED: partition5 start... old: end... new: end...”的信息。再跑一遍lsblksda5的大小应该已经变成新的容量了。如果你的LVM PV直接建在整个磁盘上比如/dev/sdb没有分区表整块盘就是PV那就跳过growpart这步直接走到后面pvresize /dev/sdb即可。如果你的分区是NVMe设备比如/dev/nvme0n1p3同样可以用growpart /dev/nvme0n1 3来扩展。2.3 分区扩容后的校验与常见异常growpart执行完之后用lsblk确认分区已经变大。如果分区大小没变先别急着往下走排查几个问题第一个内核还没刷新分区表。growpart虽然改了分区表但内核缓存可能还是旧的。执行sudo partprobe让内核重新读取分区表。有时候partprobe也刷不进去因为分区正在使用这时可以重启一次。第二个报错说“unexpected output in sfdisk”。这通常是分区表状态和工具预期不一致常见于之前使用过parted或fdisk改过分区。可以先查看分区表sudo parted /dev/sda print确认磁盘确实有未分配空间分区格式正常。然后再试一次growpart或者用sudo sfdisk -d /dev/sda看看分区定义。第三个MBR分区表中的扩展分区。有些老系统会把LVM PV放在逻辑分区比如sda5而sda5属于扩展分区内部的逻辑分区。growpart对这类逻辑分区的支持要看具体情况。如果遇到问题最稳妥的办法是提前规划在安装Ubuntu时如果打算长期用LVM尽量让LVM PV直接建在主分区上或者用GPT分区表。Ubuntu Server默认安装到整块磁盘时一般会创建主分区和逻辑分区。但也不用太担心多数情况下growpart能正常处理。还有一点要记住如果分区表是GPT磁盘末尾有备份的GPT头部growpart扩展分区时不会去覆盖备份头。如果磁盘已经扩到最大但还有几个MB的剩余空间那可能是GPT备份保留区不用担心不影响使用。3. LVM层面的扩容pvresize、lvextend与文件系统3.1 扩展物理卷pvresize分区扩好了接着让LVM认账。执行sudo pvresize /dev/sda5pvresize会重新扫描这个物理卷把PV的大小更新为分区的新大小。如果分区是/dev/sdb整块盘作为PV直接sudo pvresize /dev/sdb执行后可以用sudo pvdisplay看到PV Size已经变成扩展后的容量Free PE空闲物理扩展块也有了数值。PE全称是Physical Extent物理扩展块LVM分配空间的最小单位默认通常是4MiB。所以看到PE数量增加就说明VG拿到了新空间。这里有个细节pvresize不会自动把VG里的空闲空间分配给某个LV它只是刷新了“仓库总面积”。真正要给你根目录用的空间还得靠下一步lvextend。3.2 确定目标逻辑卷用lvextend把空间划给根目录先用df -h看当前根目录挂载点对应的逻辑卷。比如df -h /输出里文件系统列可能是/dev/mapper/ubuntu--vg-ubuntu--lv注意这里有个细节卷组和逻辑卷名字里的横杠在/dev/mapper路径里会变成双横杠。也可能显示为/dev/mapper/vgubuntu-root。再用lvdisplay确认逻辑卷信息sudo lvdisplay看到逻辑卷路径比如/dev/vgubuntu/root这时候就可以扩充它了。最简单的方式把所有空闲空间都分配给这个逻辑卷sudo lvextend -l 100%FREE /dev/vgubuntu/root-l是按PE数量扩展100%FREE表示把VG中当前所有可用PE全部划到这个LV里。这台虚拟机如果只有这一个LV这么操作最干净。如果你想保留一点空间给其他逻辑卷可以按指定大小扩展sudo lvextend -L 20G /dev/vgubuntu/root或者扩展到绝对大小sudo lvextend -L 80G /dev/vgubuntu/root执行完lvextend后再跑lvdisplay或lvs可以看到LV Size已经变大了。但这时候df -h里的根目录容量仍然没变因为文件系统还不知道LV扩大了。所以下一步才是关键。3.3 文件系统扩容ext4与xfs的差异文件系统扩容必须和文件系统类型匹配这一点很多人翻车。先确认根目录文件系统类型blkid /dev/vgubuntu/root或者直接df -T /输出里Type一列会告诉你是ext4还是xfs。如果是ext4Ubuntu Server默认通常就是ext4用sudo resize2fs /dev/vgubuntu/rootresize2fs会读取文件系统当前块数结合设备新大小把文件系统扩展到整个设备。这个命令在挂载状态下也能执行ext4支持在线扩容。执行后会看到类似“Resizing the filesystem on /dev/... to ... blocks”的信息。如果是xfs命令要换成sudo xfs_growfs /注意xfs_growfs的参数是挂载点不是设备路径。它可以直接在线扩容不需要卸载。千万不要对xfs使用resize2fs系统会提示找不到有效的超级块。最后再执行df -h /看到根目录大小已经变成新容量整个流程就算正式走完了。4. 实战踩坑从快照到分区到文件系统的排查记录4.1 快照导致虚拟磁盘扩展按钮置灰这是VMware里最经典的一个坑。虚拟机建好之后很多人习惯在装完系统、打完补丁后打个快照当“后悔药”。结果等到需要扩容时打开设置一看硬盘的“扩展”按钮是灰色的鼠标点上去毫无反应。原因很简单VMware不允许对存在快照的虚拟磁盘进行容量调整。因为快照文件依赖原始磁盘的虚拟RDM映射和CoW结构扩容会破坏快照链的一致性。遇到这种情况常规操作是先删除快照。快照管理器里选中快照点删除VMware会执行合并操作把快照中的数据写回基础虚拟磁盘。如果快照创建之后虚拟机的磁盘数据变动很大合并可能需要一段时间期间千万不要断电或强制关闭VMware。但删除快照意味着你失去了回滚点。所以更稳妥的流程是如果对当前系统状态不放心先克隆一台虚拟机完整克隆或者用导出OVF方式备份确认备份可用后再删快照、扩容。我自己的操作习惯是把快照删除后再创建一个新的“扩容前”快照这样扩容过程中万一出问题还能回退。注意这个新的快照是在扩容前的原始状态上创建的等扩容完以后要再删掉它否则以后又要扩容时又得删快照循环麻烦。4.2 扩展后虚拟机里看不到新磁盘空间有一次我给一台Ubuntu 20.04虚拟机扩容VMware里已经显示磁盘从60G变成100G了但进系统后lsblk里的sda依然显示60G。排查了很久最后发现虚拟机使用的SCSI控制器类型和VMware版本之间存在兼容问题热添加扫描没生效。后来我总结了一套排查顺序先重启虚拟机。最直接90%的问题重启能解决。重启后还不行检查dmesg | grep -i scsi和/sys/class/scsi_host/目录挨个主机编号执行echo - - - /sys/class/scsi_host/hostX/scan强制触发SCSI设备重新扫描。如果虚拟磁盘是NVMe类型检查/sys/class/nvme/重新扫描方式略有不同但重启基本能解决。最后检查VMware虚拟机的磁盘类型。如果原来用IDE接口扩容支持度不好建议把磁盘控制器改成SCSI或NVMe改控制器阵列可能需要做一次克隆迁移别忘了重新配置引导顺序。还有一个很小的坑如果虚拟机里跑的是比较老的Ubuntu内核对超过2T的磁盘可能会有MBR限制需要确认分区表是GPT。LVM本身不限制容量但MBR分区表最大只能寻址2T空间超了就会有问题。新装的Ubuntu默认用GPT但老虚拟机难说。4.3 growpart报错与手动调整分区表growpart正常情况很省心但偶尔会报一个奇怪错误FAILED: unable to grow partition 5: unexpected output in sfdisk这种错误绝大多数情况下是因为分区表状态和内核不一致或者分区表本身就有点“脏”。先用partprobe刷新再跑一次growpart。如果还不行就手动用parted检查sudo parted /dev/sda unit s print确认分区起始扇区、结束扇区、剩余空间大小。只要起始扇区没错理论上可以把结束扇区手动改到磁盘末尾。但手动操作前必须搞清楚分区表类型GPT和MBR的命令不同MBR还有主分区和逻辑分区嵌套问题没把握就不要轻易动。我的建议是遇到growpart死磕不动干脆直接从备份恢复或者重装系统不要硬来。LVM PV里的数据可比多折腾出来的几十G空间值钱得多。4.4 xfs_growfs和resize2fs用错导致报错很多从CentOS转过来的朋友习惯了用resize2fs到了Ubuntu上发现根文件系统是xfs直接执行resize2fs报错resize2fs: Bad magic number in super-block while trying to open /dev/vgubuntu/root看到这个提示八成是文件系统类型弄错了。先df -T /或blkid看看类型再动手。如果确认是xfs使用xfs_growfs /注意参数是挂载点。xfs文件系统不支持缩容所以当初创建逻辑卷的时候就不要随便缩减否则只能备份重来。ext4支持在线扩容也支持离线缩容但生产环境我从不缩容除非是测试机。4.5 一块磁盘不够用再加一块盘并加入VG如果根目录扩容一次还不够比如数据增长特别快可以给虚拟机再添加一块新虚拟磁盘然后把新盘加入VG再把空间分配给LV。这是LVM的另一个核心玩法。流程是这样VMware里添加一块新虚拟磁盘比如50G设备名为/dev/sdb。开机后创建物理卷sudo pvcreate /dev/sdb把新PV加入现有VG。先找到VG名sudo vgs通常叫vgubuntu。然后sudo vgextend vgubuntu /dev/sdb最后继续用lvextend和resize2fs或xfs_growfs扩展目标LV和文件系统。这种方式不用动原磁盘分区风险更小而且可以反复添加多块盘。不过要注意如果以后想从VMware里移除某块旧盘得先pvmove把数据迁移到其他PV上再从VG里移除否则数据就丢了。5. 实际操作经验与最终建议5.1 最推荐的扩容流程速查表给一台新装的Ubuntu Server虚拟机做LVM扩容我最顺手的流程就是下面这套可以直接抄步骤操作常用命令1关机删除快照VMware扩展虚拟磁盘VM GUI操作2开机确认磁盘容量lsblk3扩展物理分区sudo growpart /dev/sda 54刷新PV容量sudo pvresize /dev/sda55扩展逻辑卷sudo lvextend -l 100%FREE /dev/vgubuntu/root6扩展ext4文件系统sudo resize2fs /dev/vgubuntu/root7确认最终容量df -h /如果是xfs文件系统把第6步换成sudo xfs_growfs /即可。如果PV直接建在整块盘上第3步不需要第4步把设备名改成/dev/sda就行。5.2 扩容前的数据备份策略虽然LVM扩容本身相对成熟但自己动手操作生产虚拟机之前还是要做备份。我见过太多人自信满满地说“LVM扩容很简单”然后分区表写错卷组识别不出来。最低成本的备份方案虚拟机开启时在VMware里做一次文件系统级别的快照注意VMware快照和LVM快照不是一回事VMware快照对虚拟磁盘的一致性保障取决于虚拟机配置和磁盘IO状态对数据库这类应用建议先停机或确保应用处于静默状态。更稳的办法是在VMware层面克隆虚拟机。完整克隆一份确认克隆机能正常启动再对原机操作。这样真出问题还能从克隆机恢复数据。如果机器本身数据量不大也可以直接tar打包关键目录或者用duplicity、rsync同步到其他存储。但不管用哪种方式核心原则是在没有可用回滚方案之前不碰分区表。5.3 我的几点体会折腾过这么多台LVM虚拟机最大的体会是LVM扩容这套东西看着命令不多但每一步都在操作元数据。分区表是元数据PV头部是元数据VG描述符是元数据文件系统超级块也是元数据。任何一个环节没刷新系统就会给你“颜色”看。所以操作完每一步我都习惯用对应命令验证一下lsblk看分区大小pvs看PV大小vgs看VG空闲空间lvs看LV大小df -h看文件系统大小这五条命令挨个跑一遍基本能定位出是哪一层没生效。还有一个小经验如果你要给运行着MySQL或PostgreSQL的虚拟机扩容最好先停掉数据库服务或者至少确保没有大批量写入后再执行lvextend和resize2fs。虽然ext4和xfs都支持在线扩容但文件系统元数据操作期间如果发生意外断电恢复起来会非常麻烦。停机五分钟换来的安全边际比什么后手都值。扩容完成后别忘了重启一次虚拟机确认所有服务正常挂载、分区表干净、日志里没有异常IO错误。我习惯再看一眼/etc/fstab确认里面用的是UUID而不是设备名。因为LVM设备路径在重启后理论上不会变但一旦以后加盘、删盘设备顺序有可能会变用UUID挂载最保险。查看逻辑卷UUID可以用blkid /dev/vgubuntu/root然后把/etc/fstab里的对应项改成UUID...。如果你按照这套流程走下来基本上不会再被VMware里Ubuntu磁盘空间不足的问题卡住。以后遇到磁盘不够你只需要记住先动VMware再动分区再动PV再动LV最后动文件系统。顺序对了一切都很顺。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/2 2:46:42
PINN时间域识别:连续与离散时间推理及参数反推实战
2026/10/2 2:46:42
PINN物理信息网络:离散与连续时间识别及推理的四个代码包实战
2026/10/2 2:46:42
生意的本质:经营信任与风险,钱只是结果
2026/10/2 5:26:53
wifit3移植方法论:如何用USB抓包回放对驱动做字节级验证
2026/10/2 5:26:53
CS229机器学习精读指南:构建可验证、可演进的知识骨架
2026/10/2 5:26:53
软考中级数据库系统工程师:大纲划边界与复习优先级实战指南
2026/10/2 5:26:53
构建稳定AI Agent:Harness工程实战与FastAPI+LangGraph并发状态管理
2026/10/2 5:26:53
dots反检测原理剖析:无WebDriver标记、无CDP协议,页面找不到任何自动化痕迹
2026/10/2 5:21:53
DINOv3下游任务微调策略:全量微调与层解冻的决策指南
2026/10/2 0:01:33
Jev模型详解:从本地部署到Codex接入与数据系统构建
2026/10/2 0:01:33
Paperclip:轻量级AI Agent编排中间件实战指南
2026/10/2 0:01:33
DeepSpeed ZeRO-3 与 MoE 训练实战:显存优化与通信调优
2026/10/1 22:21:25
网站建设的英语怎么说?别只背单词,看完这套安全完整流程才敢上线
2026/10/1 8:09:25
新手入门看这篇:建设网站加盟避坑指南与SEO实操
2026/10/1 21:38:34
论文AIGC疑似度是什么意思?想查论文AI率有哪些免费工具?
2026/10/1 0:01:36
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/2 4:07:50
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/1 0:01:36
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)