kvm / vmbuilder分区比他们应该小,10%的逻辑卷总是未分配

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

简单如下:

root 100000 swap 4000 

现在我将为vm创build一个新的逻辑卷,它具有所有已定义分区的大小。 (在这个例子中,我会运行lvcreate -L 104G ...

结果是一个正好104吉比特的LV。 但是我的100 G(i?)B根分区仅填充93.13吉比特。 而交换约3.72 GiB。 LV中约有7个GiB未分配空间。

这很奇怪,因为即使你计算vmbuilder.partitions的数字为1024byte / megabyte,根分区仍然应该是97.65 GiB而不是93.而swap应该是3.9 GiB而不是3.72。 (不幸的是,这些数字的增加,一个1TB的定义将只有大约930 GiB,而不是976)。

这可以通过手动删除LV中的经验法则估计的字节数来解决。 但我想从一开始就有理智的价值观。 每个虚拟机中有10%的空间未被分配,显然是不可接受的。

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

那么,直到我find真正的答案,我会坚持使用gparted的LiveCD以下解决方法。 事实certificate,分区确实很容易修复,而不必接触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的每个最后一个字节。

不要忘记把vm的启动设备改回“hd”。 重新定义和重新启动,并为您的分区大小感到高兴,因为他们应该一直。