1. 项目背景与问题定位
最近在维护一台基于bhyve虚拟化的Ubuntu服务器时,遇到了一个典型问题:系统根分区空间告急。通过df -H命令查看,发现/dev/mapper/ubuntu--vg-ubuntu--lv这个逻辑卷的使用率已经达到100%,可用空间为0。这种情况在长期运行的服务器上很常见,特别是当需要部署新应用(如文中提到的ollama)时,磁盘空间不足会直接导致安装失败。
问题的根源在于当初创建虚拟机时分配的磁盘空间(17GB)已经无法满足当前需求。与物理服务器不同,虚拟机的优势在于可以动态调整磁盘大小,这为我们提供了灵活的解决方案。但需要注意的是,在虚拟化环境中扩容磁盘是一个"两步走"的过程:首先需要在宿主机层面扩展虚拟磁盘文件,然后在虚拟机内部进行分区和文件系统的调整。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 宿主机层面的磁盘扩容
2.1 定位虚拟机磁盘文件
在FreeBSD宿主机上,bhyve虚拟机的磁盘通常以镜像文件形式存储。通过ls -la /vm_images命令,我们可以确认目标虚拟机的磁盘文件是ub19_ub22.img,当前大小为17GB(17179869184字节)。
重要提示:进行任何磁盘操作前,务必先关闭虚拟机。在线调整磁盘大小可能导致数据损坏。
2.2 使用truncate扩展磁盘文件
FreeBSD系统提供了truncate工具来修改文件大小。这个命令的-s参数可以指定新的大小,+10G表示在原有基础上增加10GB:
bash复制truncate -s +10G /vm_images/ub19_ub22.img
执行后,通过ls -la确认文件大小已从17GB增长到27.9GB(27917287424字节)。这里需要注意几个关键点:
- truncate只是扩展了文件大小,不会初始化或格式化新增空间
- 新增的空间在虚拟机内部表现为"未分配"的磁盘空间
- 不同虚拟化平台可能有自己的专用工具(如qemu-img),但truncate是通用方案
3. 虚拟机内部的分区调整
3.1 检查当前磁盘布局
启动Ubuntu虚拟机后,首先用lsblk查看磁盘分区情况:
code复制NAME MAJ:MIN RM SIZE RO TYPE
