虚拟框vdi占用比实际大小更多的空间

我有一个dynamic磁盘ubuntu实例,df报告正在使用30gig(这也是关于df报告),但磁盘上的vdi文件是130gig:

在这里输入图像说明

在这里输入图像说明

我不记得它占用了这么多的空间 – (但不是100%) – 它几乎就好像客人使用了更多的磁盘空间,然后有一天,主机突然将其大小调整为比需要。

我不是真的想缩小dynamic大小的磁盘(这是不可能的),但我想知道为什么实际的VDI需要假设底层客户的5倍空间 – 看起来不是很“dynamic”

这个答案其实很简单。

只要你的客户在一个以前没有写过的地方写入磁盘,那么VDI就会增长以适应“新”数据。 VirtualBox没有任何存储在磁盘上的知识。 所以,如果它是未使用的空间没关系。 唯一重要的是这个空间在某个时候被使用了。

现在,如果guest虚拟机写入20Gb的连续数据(接下来是一个字节),那么VDI文件需要20GB的物理硬盘空间。

但是,这不是现实中的工作方式。 来宾虚拟机将不断读取/写入/移动数据。 即使将相同的20GB数据移动到分区的新区域,VDI也将增长以适应“新”数据。

VDI文件永远不会缩小,并最终将始终最大限度地超出您预先定义的最大大小。

精简(或在VirtualBox术语中称为稀疏或dynamic)磁盘映像的大小将随着时间的推移而增长,但永远不会缩小。 下面是一个例子:你创build10GB的精简VDI磁盘,将其挂载,然后开始在循环中创build/删除一系列相对较小的文件。 即使这些小文件中的每一个都不会大于100MB,您的VDI磁盘也会快速增长到最大。

让我们从刚刚创build和安装的10G磁盘开始。 这是它在VM中的样子

 [root@localhost ~]# df -h | egrep "^Filesystem|test" Filesystem Size Used Avail Use% Mounted on /dev/mapper/test-lvol 9.9G 23M 9.4G 1% /mnt 

这就是它在虚拟机之外(在主机上)

 ls -lh|grep New -rw------- 1 dmitryzayats staff 94M Oct 28 23:33 NewVirtualDisk1.vdi 

所以在主机上只需要略less于100M。

现在我们将按顺序运行这一个class轮脚本。 创build和删除1000个相对较小的100M大小的文件。 在任何时候,我们的虚拟机将显示我们只在文件系统上消耗200M。

 for i in {1..1000}; do echo "Run=$i"; dd if=/dev/urandom of=/mnt/testfile${i} bs=1M count=100; df -h; rm -f /mnt/testfile$(($i-1)); done Run=319 100+0 records in 100+0 records out 104857600 bytes (105 MB, 100 MiB) copied, 0.944908 s, 111 MB/s Filesystem Size Used Avail Use% Mounted on devtmpfs 992M 0 992M 0% /dev tmpfs 1001M 0 1001M 0% /dev/shm tmpfs 1001M 584K 1000M 1% /run tmpfs 1001M 0 1001M 0% /sys/fs/cgroup /dev/mapper/fedora-root 13G 4.3G 7.4G 37% / /dev/sda1 976M 82M 828M 9% /boot tmpfs 1001M 4.0K 1001M 1% /tmp tmpfs 201M 0 201M 0% /run/user/0 /dev/mapper/test-lvol 9.9G 223M 9.2G 3% /mnt 

但是从东道国的angular度来看,事情会有很大的不同。

 ls -lh|grep New -rw------- 1 dmitryzayats staff 9.8G Oct 29 00:13 NewVirtualDisk1.vdi 

原因是每次创build新文件时 – 操作系统都可以将数据写入块设备的不同位置。 然后,当文件被删除 – 从虚拟机空间的angular度来看,现在是免费的,但在底层的VDI空间已经被保留,VDI文件的大小增长,没有办法缩小它。 有一些可能性,实际上减less它,但这将需要closuresVM和VDI文件打孔。 你可以谷歌“打孔稀疏文件”。

一些工作负载对于精简磁盘performance特别差。 例如,如果Oracle数据库处于归档模式 – 它将创build许多归档日志,即使这些日志是通过运行rman定期删除的 – 它将快速地将精简磁盘填充到最大大小。