kvm/vmbuilder 分区比应有的要小,逻辑卷的 10% 始终未分配

kvm/vmbuilder 分区比应有的要小,逻辑卷的 10% 始终未分配

我使用 vmbuilder 工具在我的 ubuntu 主机系统上创建 KVM 虚拟机。对于每个虚拟机,我都设置了一个 vmbuilder.partitions 文本文件,其中定义了虚拟机的分区大小。

简单来说:

root 100000
swap 4000

现在我将为虚拟机创建一个新的逻辑卷,其大小与所有定义的分区完全相同。(在示例中,我将运行lvcreate -L 104G ...

结果是 LV 的大小正好是 104 GiB。但我的 100 G(i?)B 根分区只占了其中的 93.13 GiB。交换区大约占了 3.72 GiB。LV 中大约有 7 GiB 未分配空间。

这很奇怪,因为即使你按 1024 字节/兆字节计算 vmbuilder.partitions 的数字,根分区仍应为 97.65 GiB,而不是约 93。交换应约为 3.9 GiB,而不是 3.72。(不幸的是,这些数字会扩大,1TB 定义将只有约 930 GiB,而不是 976。)

可以通过手动从 LV 中删除经验估计的字节数来解决这个问题。但我希望从一开始就拥有合理的值。而且每个虚拟机中都有 10% 的空间未分配显然是不可接受的。

有人知道这背后的逻辑吗?非常感谢。

答案1

好吧,在我找到真正的答案之前,我将坚持使用 gparted 的 LiveCD 进行以下解决方法。事实证明,分区确实很容易修复,而无需触及 LV 本身。如果您使用 LVM/libvirt/KVM/QEMU 组合,则可以使用以下内容。

  • 将 gparted LiveCD-iso 放在可读的位置(不是 /root)
  • virsh edit <vmname>改成<boot dev="hd" /><boot dev="cdrom" />
  • 在其他磁盘块旁边添加:

<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<source file='/some/vm-readable/path/gparted-live-0.14.0-1.iso'/>
<target dev='hdc' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='1' unit='0'/>
</disk>

  • 重新定义并重新启动虚拟机,通过 VNC 连接(例如使用 virt-viewer)

使用 gparted GUI,您可以拖放分区来填充 LV 的每个字节。

不要忘记将虚拟机的启动设备改回“hd”。重新定义并重新启动,然后对分区大小感到满意,因为它们本来就应该是这样的。

相关内容