Improve disk used heuristics. Disk preallocation is disabled by default (again)

This commit is contained in:
Martin Wimpress 2021-10-07 15:56:06 +01:00
parent fcc050ed82
commit 7553e77b11
No known key found for this signature in database
GPG Key ID: 61DF940515E06DA3
2 changed files with 23 additions and 14 deletions

View File

@ -314,10 +314,9 @@ Add additional lines to your virtual machine configuration:
## Disk preallocation
Preallocation mode (allowed values: `off`, `metadata` (default), `falloc`, `full`).
Preallocation mode (allowed values: `off` (default), `metadata`, `falloc`, `full`).
An image with preallocated metadata is initially larger but can improve performance
when the image needs to grow. `falloc` and `full` preallocations are like the
same options of raw format, but sets up metadata also.
when the image needs to grow.
Specify what disk preallocation should be used, if any, when creating the system
disk image by adding a line like this to your VM configuration.

View File

@ -142,6 +142,7 @@ function check_cpu_flag() {
function vm_boot() {
local BALLOON="-device virtio-balloon"
local CPU=""
local DISK_USED=""
local GUEST_CPU_CORES=""
local GUEST_CPU_LOGICAL_CORES=""
local GUEST_CPU_THREADS=""
@ -384,28 +385,37 @@ function vm_boot() {
exit 1
fi
echo " Just created, booting from ${iso}${img}"
DISK_USED="no"
elif [ -e "${disk_img}" ]; then
# Check there isn't already a process attached to the disk image.
if ! ${QEMU_IMG} info "${disk_img}" >/dev/null; then
echo " Failed to get \"write\" lock. Is another process using the disk?"
exit 1
else
DISK_CURR_SIZE=$(stat -c%s "${disk_img}")
if [ "${DISK_CURR_SIZE}" -le "${DISK_MIN_SIZE}" ]; then
echo " Looks unused, booting from ${iso}${img}"
if [ -z "${iso}" ] && [ -z "${img}" ]; then
echo "ERROR! You haven't specified a .iso or .img image to boot from."
exit 1
# Only check disk image size if preallocation is off
if [ "${preallocation}" == "off" ]; then
DISK_CURR_SIZE=$(stat -c%s "${disk_img}")
if [ "${DISK_CURR_SIZE}" -le "${DISK_MIN_SIZE}" ]; then
echo " Looks unused, booting from ${iso}${img}"
if [ -z "${iso}" ] && [ -z "${img}" ]; then
echo "ERROR! You haven't specified a .iso or .img image to boot from."
exit 1
fi
else
DISK_USED="yes"
fi
else
# If there is a disk image, assume there is an install and do not boot
# from installation media.
iso=""
img=""
DISK_USED="yes"
fi
fi
fi
if [ "${DISK_USED}" == "yes" ]; then
# If there is a disk image that appears to be used do not boot from installation media.
iso=""
img=""
fi
# Has the status quo been requested?
if [ "${STATUS_QUO}" == "-snapshot" ]; then
if [ -z "${img}" ] && [ -z "${iso}" ]; then
@ -776,7 +786,7 @@ img=""
iso=""
macos_release=""
port_forwards=()
preallocation="metadata"
preallocation="off"
ram=""
tpm="off"
usb_devices=()