From 7553e77b11142aad453e8f714894932be8ac8045 Mon Sep 17 00:00:00 2001 From: Martin Wimpress Date: Thu, 7 Oct 2021 15:56:06 +0100 Subject: [PATCH] Improve disk used heuristics. Disk preallocation is disabled by default (again) --- README.md | 5 ++--- quickemu | 32 +++++++++++++++++++++----------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 779de94..3b80486 100644 --- a/README.md +++ b/README.md @@ -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. diff --git a/quickemu b/quickemu index 74a2d83..51cc698 100755 --- a/quickemu +++ b/quickemu @@ -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=()