bhyve上Ubuntu虚拟机扩展LVM上的EXT4文件系统

我在 bhyve(BSD hypervisor) 虚拟化环境中部署 Ubuntu Linux 来构建 ROCm 快速起步 ,但是我发现,之前 bhyve虚拟化运行Ubuntu 创建的是稀疏卷,总共分配了 60GB ZFS稀疏卷,不过Ubuntu Server部署时,自动只使用了一半空间(小于安装部署 ROCm 要求):

  • 在虚拟机内部检查磁盘空间:

虚拟机内部 fdisk 检查磁盘空间
fdisk -l

可以看到 60GiB 空间,LVM根卷只使用了 28.47GiB :

虚拟机内部 fdisk 检查磁盘空间 输出信息
Disk /dev/vda: 60 GiB, 64424509440 bytes, 125829120 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 16384 bytes
I/O size (minimum/optimal): 16384 bytes / 16384 bytes
Disklabel type: gpt
Disk identifier: B7990D2B-8799-469F-99FC-F8FF058A1025

Device       Start       End   Sectors  Size Type
/dev/vda1     2048   2203647   2201600    1G EFI System
/dev/vda2  2203648   6397951   4194304    2G Linux filesystem
/dev/vda3  6397952 125827071 119429120 56.9G Linux filesystem


Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 28.47 GiB, 30572281856 bytes, 59711488 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 16384 bytes
I/O size (minimum/optimal): 16384 bytes / 16384 bytes
  • df 可以看到LVM卷 ubuntu--vg-ubuntu--lv 挂载为 / ,只分配了 28G :

检查 df -h 输出
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              794M  936K  794M   1% /run
efivarfs                           256K   16K  236K   7% /sys/firmware/efi/efivars
/dev/mapper/ubuntu--vg-ubuntu--lv   28G  7.2G   20G  28% /
tmpfs                              3.9G     0  3.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/vda2                          2.0G  193M  1.6G  11% /boot
/dev/vda1                          1.1G  6.2M  1.1G   1% /boot/efi
tmpfs                              794M   12K  794M   1% /run/user/1000
  • 在虚拟机内部检查lvm卷(分别使用 lvs , pvdisplay , vgdisplaylvdisplay 检查):

检查lvm卷
root@idev:~# lvs
  LV        VG        Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-ao---- 28.47g

root@idev:~# pvdisplay
  --- Physical volume ---
  PV Name               /dev/vda3
  VG Name               ubuntu-vg
  PV Size               <56.95 GiB / not usable 3.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              14578
  Free PE               7289
  Allocated PE          7289
  PV UUID               dZisDw-p4Ka-ztA7-p0KV-5yiy-2Ttx-Wso8Y4

root@idev:~# vgdisplay
  --- Volume group ---
  VG Name               ubuntu-vg
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <56.95 GiB
  PE Size               4.00 MiB
  Total PE              14578
  Alloc PE / Size       7289 / 28.47 GiB
  Free  PE / Size       7289 / 28.47 GiB
  VG UUID               KBkl6Q-lPJN-6ihZ-hkhn-4Phy-yMvA-nFcBJQ

root@idev:~# lvdisplay
  --- Logical volume ---
  LV Path                /dev/ubuntu-vg/ubuntu-lv
  LV Name                ubuntu-lv
  VG Name                ubuntu-vg
  LV UUID                dPQ2BV-Xhcb-N3mA-IpFA-Upf6-iu3D-tZl0w2
  LV Write Access        read/write
  LV Creation host, time ubuntu-server, 2025-07-25 10:55:07 +0000
  LV Status              available
  # open                 1
  LV Size                28.47 GiB
  Current LE             7289
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0

可以看到:

  • pv 是完全分配整个磁盘空间 (60GB)

  • vg 完整占用了VG( <56.95 GiB ),但只划分了 28.47 GiB PE用于 lv ,还有 28.47GiB Free PE

  • lv 大小 28.47 GiB ,还有剩余但 28.47 GiB vg 空着没有占用

解决方法是扩展 lv,然后再扩展ext4文件系统 : 方法参考 扩展LVM上的EXT4文件系统 (注意只需要 lvextend ,因为**vg** 是满分配的)

  • 扩容lvm ( lv ):

扩容 lv 占据整个 vg
lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

输出显示成功扩容lv到 <56.95 GiB :

扩容 lv 占据整个 vg 输出显示成功
  Size of logical volume ubuntu-vg/ubuntu-lv changed from 28.47 GiB (7289 extents) to <56.95 GiB (14578 extents).
  Logical volume ubuntu-vg/ubuntu-lv successfully resized.
  • 再次检查 vgdisplay 看是否完整分配了 vg:

vgdisplay 显示现在整个vg已经分配完
  --- Volume group ---
  VG Name               ubuntu-vg
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <56.95 GiB
  PE Size               4.00 MiB
  Total PE              14578
  Alloc PE / Size       14578 / <56.95 GiB
  Free  PE / Size       0 / 0
  VG UUID               KBkl6Q-lPJN-6ihZ-hkhn-4Phy-yMvA-nFcBJQ
  • EXT4文件系统支持在线扩展,所以对挂载对EXT4文件系统( / )扩容:

在线扩展 / 挂载的EXT4文件系统
resize2fs -p /dev/mapper/ubuntu--vg-ubuntu--lv

输出显示

在线扩展 / 挂载的EXT4文件系统显示完成
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 8
The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 14927872 (4k) blocks long.
  • 现在使用 df -h 检查,就可以看到原先 28G 的根目录现在扩展到了 56G :

扩容完成后的根文件系统
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              794M  936K  794M   1% /run
efivarfs                           256K   16K  236K   7% /sys/firmware/efi/efivars
/dev/mapper/ubuntu--vg-ubuntu--lv   56G  7.2G   47G  14% /
tmpfs                              3.9G     0  3.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/vda2                          2.0G  193M  1.6G  11% /boot
/dev/vda1                          1.1G  6.2M  1.1G   1% /boot/efi
tmpfs                              794M   12K  794M   1% /run/user/1000

一切就绪,现在可以继续 ROCm 快速起步