Qcow 2 文件是虚拟机的开源文件格式。在我看来,与 .vmdk 文件不同,它们不提供指定最大文件大小的选项。这意味着它们可能会因各种原因而不断增大。
在 Debian 12 衍生版本(例如 LMDE6)下使用时,有哪些方法可以将 .qcow2 文件的文件大小增长限制为某个值或能够实现固定文件大小?
也许它们是比为每个 .qcow 文件使用自己的分区更好的想法。一种替代想法是可能的,即使用文件系统来存储 .qcow 文件,该文件系统提供按文件夹或按文件为用于存储 .qcow 文件的文件系统设置配额。但这只是此时此刻的想法。
qcow2 磁盘映像格式与其他动态分配的映像格式(例如 VDI(由 Virtualbox 使用))一样,不会随着使用而无限期地增长。创建此类磁盘映像时,必须指定其最大大小。映像内的文件系统可能会增长以占据该大小。
要创建预分配的 qcow2 映像文件,请使用
-o preallocation=full
带有qemu-img create
.vmdk 在这方面的行为与 qcow2 完全相同:它将增长到设置的虚拟磁盘大小,仅此而已,但如果您执行快照,它可以无限增长(每个附加快照最多可达额外的完整虚拟磁盘大小)。在 qcow2 和 vmdk 中都没有内在的可能性来限制这一点。
您期望如何实现:假设系统需要将一个块写入 qcow2 映像,并且需要超出限制的文件扩展名;该怎么办?Return
ENOSPC
或EIO
任何合适的错误代码?然后设置托管该文件的文件系统的大小限制。这是非常危险的。这样的硬错误最终会到达想要写入块的进程,无论它是什么;如果那是一个文件系统驱动程序(驻留在 qcow2 文件中的文件系统),并且它将写入一些重要的元数据块,则该文件系统将被损坏,并且没有人知道恢复起来有多困难。
更好、更安全的是实施有关接近和超过确定的“最大允许”大小的监控和通知。
这就是典型的“对存储过度配置的恐惧”;任何报告可用空间大于实际可用空间的存储都存在同样的问题,并且通常预计可以通过适当的监视和及时扩展以相同的方式解决该问题。
另请注意,qcow2 文件的“表观”大小与其在托管文件系统中占用的空间不同。它可以是稀疏的;创建稀疏 qcow2 的一种方法是预分配它但不完全写入;另一种方法是释放其中的一部分,例如,在使用该文件的 qemu 进程中启用丢弃,并在 VM 中发出丢弃命令(SCSI UNMAP、ATA TRIM、using
fstrim
、等);blkdiscard
该文件将释放一些空间(并且它将被视为托管文件系统中可用空间的增加),但ls
可能会显示相同的内容。要查看“真实”磁盘使用情况,请使用ls -s
; 该数字是以千字节为单位的磁盘使用情况。