23bd8f6263
At present the Libvirt driver can preallocate file based disks using the fallocate command and importantly the `-n` option. This option allocates blocks on the filesystem past the initial EOF of a given file: ``` $ touch test.img ; fallocate -n -l $(( 1024 * 1024 )) test.img $ ll -lah test.img -rw-rw-r--. 1 stack stack 0 Apr 16 13:28 test.img $ du -h test.img 1.0M test.img ``` This results in a miscalculation of the total disk overcommit for file based (excluding ploop) disks as os.path.getsize is currently used to determine the allocated size of these disks: ``` >>> import os >>> os.path.getsize('test.img') 0 ``` Using the above example the disk overcommit would be reported as 1.0M as the disk appears empty yet will report a potential (virtual) size of 1.0M. However as the required blocks have already been allocated on the filesystem the host will report disk_available_least as missing an additional 1.0M, essentially doubling the allocation for each disk. To correct this the allocated size of file based (excluding ploop) disks is reported using `disk_size` from the `qemu-img info` command. This should ensure blocks allocated past the EOF of the file are taken into account and correctly reported as allocated. A future change should ultimately remove the use of the `-n` option with fallocate, however as this would not help disks that have already been allocated this has not been included in this change to simplify backports. Change-Id: If642e51a4e186833349a8e30b04224a3687f5594 Closes-bug: #1764489 |
||
---|---|---|
.. | ||
mount | ||
vfs | ||
__init__.py | ||
api.py |