From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 375711FF16B for ; Tue, 12 Aug 2025 16:37:40 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id AA464102C7; Tue, 12 Aug 2025 16:39:08 +0200 (CEST) From: Fiona Ebner To: pve-devel@lists.proxmox.com Date: Tue, 12 Aug 2025 16:37:41 +0200 Message-ID: <20250812143900.138723-4-f.ebner@proxmox.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250812143900.138723-1-f.ebner@proxmox.com> References: <20250812143900.138723-1-f.ebner@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1755009513481 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.025 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [qemuserver.pm] Subject: [pve-devel] [PATCH qemu-server v2 3/5] fix #6675: template backup: fix regression with IDE/SATA and blockdev X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" With ide-hd, the inserted block node needs to be marked as writable too, but -blockdev will complain if it's marked as writable but the actual backing device is read-only (e.g. read-only base LV). IDE/SATA do not support being configured as read-only, the most similar is using ide-cd instead of ide-hd, with most of the code and configuration shared in QEMU. Since a template is never actually started, the front-end device is never accessed. The backup only accesses the inserted block node, so it does not matter for the backup if the type is 'ide-cd' instead. The same issue did not manifest for '-drive', because the '-snapshot' option is used for template backups. The '-snapshot' option does not affect '-blockdev', from 'man kvm': > snapshot is incompatible with -blockdev Signed-off-by: Fiona Ebner --- src/PVE/QemuServer.pm | 13 ++++++++++--- src/test/cfg2cmd/simple1-template.conf.cmd | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm index 67db9bc3..d3f0c589 100644 --- a/src/PVE/QemuServer.pm +++ b/src/PVE/QemuServer.pm @@ -1272,6 +1272,15 @@ sub print_drivedevice_full { my $device_type = ($drive->{media} && $drive->{media} eq 'cdrom') ? "cd" : "hd"; + # With ide-hd, the inserted block node needs to be marked as writable too, but -blockdev + # will complain if it's marked as writable but the actual backing device is read-only (e.g. + # read-only base LV). IDE/SATA do not support being configured as read-only, the most + # similar is using ide-cd instead of ide-hd, with most of the code and configuration shared + # in QEMU. Since a template is never actually started, the front-end device is never + # accessed. The backup only accesses the inserted block node, so it does not matter for the + # backup if the type is 'ide-cd' instead. + $device_type = 'cd' if $conf->{template}; + $device = "ide-$device_type"; if ($drive->{interface} eq 'ide') { $device .= ",bus=ide.$controller,unit=$unit"; @@ -3752,9 +3761,7 @@ sub config_to_command { my $extra_blockdev_options = {}; $extra_blockdev_options->{'live-restore'} = $live_restore if $live_restore; - # extra protection for templates, but SATA and IDE don't support it.. - $extra_blockdev_options->{'read-only'} = 1 - if drive_is_read_only($conf, $drive); + $extra_blockdev_options->{'read-only'} = 1 if $is_template; my $blockdev = PVE::QemuServer::Blockdev::generate_drive_blockdev( $storecfg, $drive, $machine_version, $extra_blockdev_options, diff --git a/src/test/cfg2cmd/simple1-template.conf.cmd b/src/test/cfg2cmd/simple1-template.conf.cmd index df51a4a5..369b4de9 100644 --- a/src/test/cfg2cmd/simple1-template.conf.cmd +++ b/src/test/cfg2cmd/simple1-template.conf.cmd @@ -30,7 +30,7 @@ -blockdev '{"detect-zeroes":"unmap","discard":"unmap","driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/base-8006-disk-1.qcow2","node-name":"e1085774206ae4a6b6bf8426ff08f16","read-only":true},"node-name":"f1085774206ae4a6b6bf8426ff08f16","read-only":true},"node-name":"drive-scsi0","read-only":true,"throttle-group":"throttle-drive-scsi0"}' \ -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,device_id=drive-scsi0,write-cache=on' \ -device 'ahci,id=ahci0,multifunction=on,bus=pci.0,addr=0x7' \ - -blockdev '{"detect-zeroes":"unmap","discard":"unmap","driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/base-8006-disk-0.qcow2","node-name":"eab334c2e07734480f33dd80d89871b","read-only":false},"node-name":"fab334c2e07734480f33dd80d89871b","read-only":false},"node-name":"drive-sata0","read-only":false,"throttle-group":"throttle-drive-sata0"}' \ - -device 'ide-hd,bus=ahci0.0,drive=drive-sata0,id=sata0,write-cache=on' \ + -blockdev '{"detect-zeroes":"unmap","discard":"unmap","driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/base-8006-disk-0.qcow2","node-name":"eab334c2e07734480f33dd80d89871b","read-only":true},"node-name":"fab334c2e07734480f33dd80d89871b","read-only":true},"node-name":"drive-sata0","read-only":true,"throttle-group":"throttle-drive-sata0"}' \ + -device 'ide-cd,bus=ahci0.0,drive=drive-sata0,id=sata0,write-cache=on' \ -machine 'accel=tcg,smm=off,type=pc+pve0' \ -snapshot -- 2.47.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel