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 <f.eb...@proxmox.com> --- 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