是否可以让来宾硬盘随使用量而增长,而不是在创建来宾时预先分配?
我想指定一个最大大小,或者根本不指定任何大小,并让来宾根据需要消耗尽可能多的 HDD。
我想在来宾中管理起来会很困难,特别是如果来宾格式化硬盘时需要一定的存储量(考虑 Windows 或 MacOS 来宾)
答案1
并不真地。
最接近的方法是让您的 VM 通过网络启动内核(例如使用 PXE 和/或 bootp/dhcp),然后从由以下提供的“网络”文件系统(例如 NFSv3 或 v4)挂载 rootfs VM主机系统,与某种配额系统相结合。例如
- 使用配额- 这意味着将特定的 VM 作为特定的 uid 和/或 gid 运行。
- 使用专用 ZFS 数据集支持 NFS 共享。 ZFS 有自己的工具来管理配额(设置该数据集在池中使用的最大值)和预留(分配为该数据集保留的最小磁盘空间量)。参见,例如如何设置 ZFS 配额和预留
通过 NFS 挂载根文件系统和 /usr、/var 以及其他目录也存在各种问题,其中最重要的是使用网络协议访问实际本地存储的性能开销。这些问题都不是无法克服的,但它们是需要处理的 PITA。
此外,只有当来宾运行 Linux 或其他一些类似 UNIX 的操作系统时,它才是真正可行的选择。
使用原始文件、qcow2 文件、磁盘分区、LVM 卷、ZFS zvols 或其他一些块设备(或文件/任何模拟块设备)来为 VM 提供虚拟“磁盘”要简单得多。有一个多步骤但定义明确且相当直接的过程来增加虚拟机“磁盘”的大小:
- 增加底层文件、分区、LV、ZVOL等的大小。
- 重新对虚拟磁盘进行分区,以便将多余的空间分配给该分区
- 调整文件系统的大小,以便它使用分区中的所有新空间
步骤 1 根据底层存储的性质而有所不同。例如,要增加 ZFS zvol 的大小限制,请运行zfs set volsize=10G pool/zvol
,qemu-img
可以增长 qcow2 映像文件,lvextend
可用于扩展 LV 的大小等。
步骤 2 涉及运行分区编辑工具,例如fdisk
、gdisk
parted
等(在 VM 来宾内部,或者您可以在 VM 关闭时从主机执行此操作)。
步骤 3 涉及对分区格式化的文件系统使用适当的工具 - 例如,resize2fs
对于 ext2/3/4、xfs_grows
对于 XFS - 这通常最容易在 VM 来宾中完成,但也可以在 VM 运行时从主机系统完成已关闭。顺便提一句,NTFS-3G包括一个ntfsresize
从 Linux 调整 NTFS 分区大小的工具。我不知道 Mac VM 是否有类似的东西,但您可以使用 Mac 的 Mac VM 内部调整大小diskutil
答案2
是的,您可以,并且来宾中运行什么操作系统并不重要。您所需要做的就是提供一个稀疏的 qcow2 图像。它将从几乎为零的大小开始,然后增长到定义的最大值。请记住,当来宾操作系统占用更多磁盘空间时,它会自动增长,但当您删除来宾操作系统内的文件时,它不会缩小,因为我在本网站的另一个问题中描述了一些过程。
PS 来宾内部无需空间管理即可使底层磁盘映像增长。当来宾操作系统发出磁盘块声明时,qemu 将增加主机中的磁盘。