Am 17.01.24 um 17:07 schrieb Vladimir Sementsov-Ogievskiy:
> Add a parameter that enables discard-after-copy. That is mostly useful
> in "push backup with fleecing" scheme, when source is snapshot-access
> format driver node, based on copy-before-write filter snapshot-access
> API:
>
> [guest] [snapshot-access] ~~ blockdev-backup ~~> [backup target]
> | |
> | root | file
> v v
> [copy-before-write]
> | |
> | file | target
> v v
> [active disk] [temp.img]
>
> In this case discard-after-copy does two things:
>
> - discard data in temp.img to save disk space
> - avoid further copy-before-write operation in discarded area
>
> Note that we have to declare WRITE permission on source in
> copy-before-write filter, for discard to work.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Unfortunately, setting BLK_PERM_WRITE unconditionally breaks
blockdev-backup for a read-only node (even when not using discard-source):
> #!/bin/bash
> ./qemu-img create /tmp/disk.raw -f raw 1G
> ./qemu-img create /tmp/backup.raw -f raw 1G
> ./qemu-system-x86_64 --qmp stdio \
> --blockdev
> raw,node-name=node0,file.driver=file,file.filename=/tmp/disk.raw,read-only=true
> \
> --blockdev raw,node-name=node1,file.driver=file,file.filename=/tmp/backup.raw
> \
> <<EOF
> {"execute": "qmp_capabilities"}
> {"execute": "blockdev-backup", "arguments": { "device": "node0", "target":
> "node1", "sync": "full", "job-id": "backup0" } }
> EOF
The above works before applying this patch, but leads to an error
afterwards:
> {"error": {"class": "GenericError", "desc": "Block node is read-only"}}
Best Regards,
Fiona