2020-07-09 14:15:49 +03:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Stefan Reiter <s.reiter@proxmox.com>
|
|
|
|
Date: Wed, 8 Jul 2020 09:50:54 +0200
|
|
|
|
Subject: [PATCH] PVE: Add PBS block driver to map backup archives into VMs
|
|
|
|
|
|
|
|
Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
|
|
|
|
[error cleanups, file_open implementation]
|
|
|
|
Signed-off-by: Dietmar Maurer <dietmar@proxmox.com>
|
2022-01-13 12:34:33 +03:00
|
|
|
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
squash related patches
where there is no good reason to keep them separate. It's a pain
during rebase if there are multiple patches changing the same code
over and over again. This was especially bad for the backup-related
patches. If the history of patches really is needed, it can be
extracted via git. Additionally, compilation with partial application
of patches was broken since a long time, because one of the master key
changes became part of an earlier patch during a past rebase.
If only the same files were changed by a subsequent patch and the
changes felt to belong together (obvious for later bug fixes, but also
done for features e.g. adding master key support for PBS), the patches
were squashed together.
The PBS namespace support patch was split into the individual parts
it changes, i.e. PBS block driver, pbs-restore binary and QMP backup
infrastructure, and squashed into the respective patches.
No code change is intended, git diff in the submodule should not show
any difference between applying all patches before this commit and
applying all patches after this commit.
The query-proxmox-support QMP function has been left as part of the
"PVE-Backup: Proxmox backup patches for QEMU" patch, because it's
currently only used there. If it ever is used elsewhere too, it can
be split out from there.
The recent alloc-track and BQL-related savevm-async changes have been
left separate for now, because it's not 100% clear they are the best
approach yet. This depends on what upstream decides about the BQL
stuff and whether and what kind of issues with the changes pop up.
The qemu-img dd snapshot patch has been re-ordered to after the other
qemu-img dd patches.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:56 +03:00
|
|
|
[WB: add namespace support]
|
|
|
|
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
|
2022-10-14 15:07:16 +03:00
|
|
|
[FE: adapt to changed function signatures
|
update submodule and patches to QEMU 8.0.0
Many changes were necessary this time around:
* QAPI was changed to avoid redundant has_* variables, see commit
44ea9d9be3 ("qapi: Start to elide redundant has_FOO in generated C")
for details. This affected many QMP commands added by Proxmox too.
* Pending querying for migration got split into two functions, one to
estimate, one for exact value, see commit c8df4a7aef ("migration:
Split save_live_pending() into state_pending_*") for details. Relevant
for savevm-async and PBS dirty bitmap.
* Some block (driver) functions got converted to coroutines, so the
Proxmox block drivers needed to be adapted.
* Alloc track auto-detaching during PBS live restore got broken by
AioContext-related changes resulting in a deadlock. The current, hacky
method was replaced by a simpler one. Stefan apparently ran into a
problem with that when he wrote the driver, but there were
improvements in the stream job code since then and I didn't manage to
reproduce the issue. It's a separate patch "alloc-track: fix deadlock
during drop" for now, you can find the details there.
* Async snapshot-related changes:
- The pending querying got adapted to the above-mentioned split and
a patch is added to optimize it/make it more similar to what
upstream code does.
- Added initialization of the compression counters (for
future-proofing).
- It's necessary the hold the BQL (big QEMU lock = iothread mutex)
during the setup phase, because block layer functions are used there
and not doing so leads to racy, hard-to-debug crashes or hangs. It's
necessary to change some upstream code too for this, a version of
the patch "migration: for snapshots, hold the BQL during setup
callbacks" is intended to be upstreamed.
- Need to take the bdrv graph read lock before flushing.
* hmp_info_balloon was moved to a different file.
* Needed to include a new headers from time to time to still get the
correct functions.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:53 +03:00
|
|
|
make pbs_co_preadv return values consistent with QEMU
|
|
|
|
getlength is now a coroutine function]
|
2022-10-14 15:07:16 +03:00
|
|
|
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
|
2020-07-09 14:15:49 +03:00
|
|
|
---
|
2021-02-11 19:11:11 +03:00
|
|
|
block/meson.build | 3 +
|
squash related patches
where there is no good reason to keep them separate. It's a pain
during rebase if there are multiple patches changing the same code
over and over again. This was especially bad for the backup-related
patches. If the history of patches really is needed, it can be
extracted via git. Additionally, compilation with partial application
of patches was broken since a long time, because one of the master key
changes became part of an earlier patch during a past rebase.
If only the same files were changed by a subsequent patch and the
changes felt to belong together (obvious for later bug fixes, but also
done for features e.g. adding master key support for PBS), the patches
were squashed together.
The PBS namespace support patch was split into the individual parts
it changes, i.e. PBS block driver, pbs-restore binary and QMP backup
infrastructure, and squashed into the respective patches.
No code change is intended, git diff in the submodule should not show
any difference between applying all patches before this commit and
applying all patches after this commit.
The query-proxmox-support QMP function has been left as part of the
"PVE-Backup: Proxmox backup patches for QEMU" patch, because it's
currently only used there. If it ever is used elsewhere too, it can
be split out from there.
The recent alloc-track and BQL-related savevm-async changes have been
left separate for now, because it's not 100% clear they are the best
approach yet. This depends on what upstream decides about the BQL
stuff and whether and what kind of issues with the changes pop up.
The qemu-img dd snapshot patch has been re-ordered to after the other
qemu-img dd patches.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:56 +03:00
|
|
|
block/pbs.c | 305 +++++++++++++++++++++++++++++++++++++++++++
|
2021-02-11 19:11:11 +03:00
|
|
|
configure | 9 ++
|
update submodule and patches to 7.1.0
Notable changes:
* The only big change is the switch to using a custom QIOChannel for
savevm-async, because the previously used QEMUFileOps was dropped.
Changes to the current implementation:
* Switch to vector based methods as required for an IO channel. For
short reads the passed-in IO vector is stuffed with zeroes at the
end, just to be sure.
* For reading: The documentation in include/io/channel.h states that
at least one byte should be read, so also error out when whe are
at the very end instead of returning 0.
* For reading: Fix off-by-one error when request goes beyond end.
The wrong code piece was:
if ((pos + size) > maxlen) {
size = maxlen - pos - 1;
}
Previously, the last byte would not be read. It's actually
possible to get a snapshot .raw file that has content all the way
up the final 512 byte (= BDRV_SECTOR_SIZE) boundary without any
trailing zero bytes (I wrote a script to do it).
Luckily, it didn't cause a real issue, because qemu_loadvm_state()
is not interested in the final (i.e. QEMU_VM_VMDESCRIPTION)
section. The buffer for reading it is simply freed up afterwards
and the function will assume that it read the whole section, even
if that's not the case.
* For writing: Make use of the generated blk_pwritev() wrapper
instead of manually wrapping the coroutine to simplify and save a
few lines.
* Adapt to changed interfaces for blk_{pread,pwrite}:
* a9262f551e ("block: Change blk_{pread,pwrite}() param order")
* 3b35d4542c ("block: Add a 'flags' param to blk_pread()")
* bf5b16fa40 ("block: Make blk_{pread,pwrite}() return 0 on success")
Those changes especially affected the qemu-img dd patches, because
the context also changed, but also some of our block drivers used
the functions.
* Drop qemu-common.h include: it got renamed after essentially
everything was moved to other headers. The only remaining user I
could find for things dropped from the header between 7.0 and 7.1
was qemu_get_vm_name() in the iscsi-initiatorname patch, but it
already includes the header to which the function was moved.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2022-10-14 15:07:13 +03:00
|
|
|
meson.build | 2 +-
|
2022-02-11 12:24:33 +03:00
|
|
|
qapi/block-core.json | 13 ++
|
2023-01-10 11:40:57 +03:00
|
|
|
qapi/pragma.json | 1 +
|
squash related patches
where there is no good reason to keep them separate. It's a pain
during rebase if there are multiple patches changing the same code
over and over again. This was especially bad for the backup-related
patches. If the history of patches really is needed, it can be
extracted via git. Additionally, compilation with partial application
of patches was broken since a long time, because one of the master key
changes became part of an earlier patch during a past rebase.
If only the same files were changed by a subsequent patch and the
changes felt to belong together (obvious for later bug fixes, but also
done for features e.g. adding master key support for PBS), the patches
were squashed together.
The PBS namespace support patch was split into the individual parts
it changes, i.e. PBS block driver, pbs-restore binary and QMP backup
infrastructure, and squashed into the respective patches.
No code change is intended, git diff in the submodule should not show
any difference between applying all patches before this commit and
applying all patches after this commit.
The query-proxmox-support QMP function has been left as part of the
"PVE-Backup: Proxmox backup patches for QEMU" patch, because it's
currently only used there. If it ever is used elsewhere too, it can
be split out from there.
The recent alloc-track and BQL-related savevm-async changes have been
left separate for now, because it's not 100% clear they are the best
approach yet. This depends on what upstream decides about the BQL
stuff and whether and what kind of issues with the changes pop up.
The qemu-img dd snapshot patch has been re-ordered to after the other
qemu-img dd patches.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:56 +03:00
|
|
|
6 files changed, 332 insertions(+), 1 deletion(-)
|
2020-07-09 14:15:49 +03:00
|
|
|
create mode 100644 block/pbs.c
|
|
|
|
|
2021-02-11 19:11:11 +03:00
|
|
|
diff --git a/block/meson.build b/block/meson.build
|
2023-10-17 15:10:09 +03:00
|
|
|
index 6d468f89e5..becc99ac4e 100644
|
2021-02-11 19:11:11 +03:00
|
|
|
--- a/block/meson.build
|
|
|
|
+++ b/block/meson.build
|
2023-10-17 15:10:09 +03:00
|
|
|
@@ -50,6 +50,9 @@ block_ss.add(files(
|
2021-02-11 19:11:11 +03:00
|
|
|
'../pve-backup.c',
|
|
|
|
), libproxmox_backup_qemu)
|
|
|
|
|
|
|
|
+block_ss.add(when: 'CONFIG_PBS_BDRV', if_true: files('pbs.c'))
|
|
|
|
+block_ss.add(when: 'CONFIG_PBS_BDRV', if_true: libproxmox_backup_qemu)
|
|
|
|
+
|
|
|
|
|
2023-10-17 15:10:09 +03:00
|
|
|
system_ss.add(when: 'CONFIG_TCG', if_true: files('blkreplay.c'))
|
|
|
|
system_ss.add(files('block-ram-registrar.c'))
|
2020-07-09 14:15:49 +03:00
|
|
|
diff --git a/block/pbs.c b/block/pbs.c
|
|
|
|
new file mode 100644
|
squash related patches
where there is no good reason to keep them separate. It's a pain
during rebase if there are multiple patches changing the same code
over and over again. This was especially bad for the backup-related
patches. If the history of patches really is needed, it can be
extracted via git. Additionally, compilation with partial application
of patches was broken since a long time, because one of the master key
changes became part of an earlier patch during a past rebase.
If only the same files were changed by a subsequent patch and the
changes felt to belong together (obvious for later bug fixes, but also
done for features e.g. adding master key support for PBS), the patches
were squashed together.
The PBS namespace support patch was split into the individual parts
it changes, i.e. PBS block driver, pbs-restore binary and QMP backup
infrastructure, and squashed into the respective patches.
No code change is intended, git diff in the submodule should not show
any difference between applying all patches before this commit and
applying all patches after this commit.
The query-proxmox-support QMP function has been left as part of the
"PVE-Backup: Proxmox backup patches for QEMU" patch, because it's
currently only used there. If it ever is used elsewhere too, it can
be split out from there.
The recent alloc-track and BQL-related savevm-async changes have been
left separate for now, because it's not 100% clear they are the best
approach yet. This depends on what upstream decides about the BQL
stuff and whether and what kind of issues with the changes pop up.
The qemu-img dd snapshot patch has been re-ordered to after the other
qemu-img dd patches.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:56 +03:00
|
|
|
index 0000000000..a2211e0f3b
|
2020-07-09 14:15:49 +03:00
|
|
|
--- /dev/null
|
|
|
|
+++ b/block/pbs.c
|
squash related patches
where there is no good reason to keep them separate. It's a pain
during rebase if there are multiple patches changing the same code
over and over again. This was especially bad for the backup-related
patches. If the history of patches really is needed, it can be
extracted via git. Additionally, compilation with partial application
of patches was broken since a long time, because one of the master key
changes became part of an earlier patch during a past rebase.
If only the same files were changed by a subsequent patch and the
changes felt to belong together (obvious for later bug fixes, but also
done for features e.g. adding master key support for PBS), the patches
were squashed together.
The PBS namespace support patch was split into the individual parts
it changes, i.e. PBS block driver, pbs-restore binary and QMP backup
infrastructure, and squashed into the respective patches.
No code change is intended, git diff in the submodule should not show
any difference between applying all patches before this commit and
applying all patches after this commit.
The query-proxmox-support QMP function has been left as part of the
"PVE-Backup: Proxmox backup patches for QEMU" patch, because it's
currently only used there. If it ever is used elsewhere too, it can
be split out from there.
The recent alloc-track and BQL-related savevm-async changes have been
left separate for now, because it's not 100% clear they are the best
approach yet. This depends on what upstream decides about the BQL
stuff and whether and what kind of issues with the changes pop up.
The qemu-img dd snapshot patch has been re-ordered to after the other
qemu-img dd patches.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:56 +03:00
|
|
|
@@ -0,0 +1,305 @@
|
2020-07-09 14:15:49 +03:00
|
|
|
+/*
|
|
|
|
+ * Proxmox Backup Server read-only block driver
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+#include "qemu/osdep.h"
|
|
|
|
+#include "qapi/error.h"
|
|
|
|
+#include "qapi/qmp/qdict.h"
|
|
|
|
+#include "qapi/qmp/qstring.h"
|
|
|
|
+#include "qemu/module.h"
|
|
|
|
+#include "qemu/option.h"
|
|
|
|
+#include "qemu/cutils.h"
|
|
|
|
+#include "block/block_int.h"
|
update submodule and patches to QEMU 8.0.0
Many changes were necessary this time around:
* QAPI was changed to avoid redundant has_* variables, see commit
44ea9d9be3 ("qapi: Start to elide redundant has_FOO in generated C")
for details. This affected many QMP commands added by Proxmox too.
* Pending querying for migration got split into two functions, one to
estimate, one for exact value, see commit c8df4a7aef ("migration:
Split save_live_pending() into state_pending_*") for details. Relevant
for savevm-async and PBS dirty bitmap.
* Some block (driver) functions got converted to coroutines, so the
Proxmox block drivers needed to be adapted.
* Alloc track auto-detaching during PBS live restore got broken by
AioContext-related changes resulting in a deadlock. The current, hacky
method was replaced by a simpler one. Stefan apparently ran into a
problem with that when he wrote the driver, but there were
improvements in the stream job code since then and I didn't manage to
reproduce the issue. It's a separate patch "alloc-track: fix deadlock
during drop" for now, you can find the details there.
* Async snapshot-related changes:
- The pending querying got adapted to the above-mentioned split and
a patch is added to optimize it/make it more similar to what
upstream code does.
- Added initialization of the compression counters (for
future-proofing).
- It's necessary the hold the BQL (big QEMU lock = iothread mutex)
during the setup phase, because block layer functions are used there
and not doing so leads to racy, hard-to-debug crashes or hangs. It's
necessary to change some upstream code too for this, a version of
the patch "migration: for snapshots, hold the BQL during setup
callbacks" is intended to be upstreamed.
- Need to take the bdrv graph read lock before flushing.
* hmp_info_balloon was moved to a different file.
* Needed to include a new headers from time to time to still get the
correct functions.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:53 +03:00
|
|
|
+#include "block/block-io.h"
|
2020-07-09 14:15:49 +03:00
|
|
|
+
|
|
|
|
+#include <proxmox-backup-qemu.h>
|
|
|
|
+
|
|
|
|
+#define PBS_OPT_REPOSITORY "repository"
|
squash related patches
where there is no good reason to keep them separate. It's a pain
during rebase if there are multiple patches changing the same code
over and over again. This was especially bad for the backup-related
patches. If the history of patches really is needed, it can be
extracted via git. Additionally, compilation with partial application
of patches was broken since a long time, because one of the master key
changes became part of an earlier patch during a past rebase.
If only the same files were changed by a subsequent patch and the
changes felt to belong together (obvious for later bug fixes, but also
done for features e.g. adding master key support for PBS), the patches
were squashed together.
The PBS namespace support patch was split into the individual parts
it changes, i.e. PBS block driver, pbs-restore binary and QMP backup
infrastructure, and squashed into the respective patches.
No code change is intended, git diff in the submodule should not show
any difference between applying all patches before this commit and
applying all patches after this commit.
The query-proxmox-support QMP function has been left as part of the
"PVE-Backup: Proxmox backup patches for QEMU" patch, because it's
currently only used there. If it ever is used elsewhere too, it can
be split out from there.
The recent alloc-track and BQL-related savevm-async changes have been
left separate for now, because it's not 100% clear they are the best
approach yet. This depends on what upstream decides about the BQL
stuff and whether and what kind of issues with the changes pop up.
The qemu-img dd snapshot patch has been re-ordered to after the other
qemu-img dd patches.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:56 +03:00
|
|
|
+#define PBS_OPT_NAMESPACE "namespace"
|
2020-07-09 14:15:49 +03:00
|
|
|
+#define PBS_OPT_SNAPSHOT "snapshot"
|
|
|
|
+#define PBS_OPT_ARCHIVE "archive"
|
|
|
|
+#define PBS_OPT_KEYFILE "keyfile"
|
|
|
|
+#define PBS_OPT_PASSWORD "password"
|
|
|
|
+#define PBS_OPT_FINGERPRINT "fingerprint"
|
|
|
|
+#define PBS_OPT_ENCRYPTION_PASSWORD "key_password"
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ ProxmoxRestoreHandle *conn;
|
|
|
|
+ char aid;
|
|
|
|
+ int64_t length;
|
|
|
|
+
|
|
|
|
+ char *repository;
|
squash related patches
where there is no good reason to keep them separate. It's a pain
during rebase if there are multiple patches changing the same code
over and over again. This was especially bad for the backup-related
patches. If the history of patches really is needed, it can be
extracted via git. Additionally, compilation with partial application
of patches was broken since a long time, because one of the master key
changes became part of an earlier patch during a past rebase.
If only the same files were changed by a subsequent patch and the
changes felt to belong together (obvious for later bug fixes, but also
done for features e.g. adding master key support for PBS), the patches
were squashed together.
The PBS namespace support patch was split into the individual parts
it changes, i.e. PBS block driver, pbs-restore binary and QMP backup
infrastructure, and squashed into the respective patches.
No code change is intended, git diff in the submodule should not show
any difference between applying all patches before this commit and
applying all patches after this commit.
The query-proxmox-support QMP function has been left as part of the
"PVE-Backup: Proxmox backup patches for QEMU" patch, because it's
currently only used there. If it ever is used elsewhere too, it can
be split out from there.
The recent alloc-track and BQL-related savevm-async changes have been
left separate for now, because it's not 100% clear they are the best
approach yet. This depends on what upstream decides about the BQL
stuff and whether and what kind of issues with the changes pop up.
The qemu-img dd snapshot patch has been re-ordered to after the other
qemu-img dd patches.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:56 +03:00
|
|
|
+ char *namespace;
|
2020-07-09 14:15:49 +03:00
|
|
|
+ char *snapshot;
|
|
|
|
+ char *archive;
|
|
|
|
+} BDRVPBSState;
|
|
|
|
+
|
|
|
|
+static QemuOptsList runtime_opts = {
|
|
|
|
+ .name = "pbs",
|
|
|
|
+ .head = QTAILQ_HEAD_INITIALIZER(runtime_opts.head),
|
|
|
|
+ .desc = {
|
|
|
|
+ {
|
|
|
|
+ .name = PBS_OPT_REPOSITORY,
|
|
|
|
+ .type = QEMU_OPT_STRING,
|
|
|
|
+ .help = "The server address and repository to connect to.",
|
|
|
|
+ },
|
|
|
|
+ {
|
squash related patches
where there is no good reason to keep them separate. It's a pain
during rebase if there are multiple patches changing the same code
over and over again. This was especially bad for the backup-related
patches. If the history of patches really is needed, it can be
extracted via git. Additionally, compilation with partial application
of patches was broken since a long time, because one of the master key
changes became part of an earlier patch during a past rebase.
If only the same files were changed by a subsequent patch and the
changes felt to belong together (obvious for later bug fixes, but also
done for features e.g. adding master key support for PBS), the patches
were squashed together.
The PBS namespace support patch was split into the individual parts
it changes, i.e. PBS block driver, pbs-restore binary and QMP backup
infrastructure, and squashed into the respective patches.
No code change is intended, git diff in the submodule should not show
any difference between applying all patches before this commit and
applying all patches after this commit.
The query-proxmox-support QMP function has been left as part of the
"PVE-Backup: Proxmox backup patches for QEMU" patch, because it's
currently only used there. If it ever is used elsewhere too, it can
be split out from there.
The recent alloc-track and BQL-related savevm-async changes have been
left separate for now, because it's not 100% clear they are the best
approach yet. This depends on what upstream decides about the BQL
stuff and whether and what kind of issues with the changes pop up.
The qemu-img dd snapshot patch has been re-ordered to after the other
qemu-img dd patches.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:56 +03:00
|
|
|
+ .name = PBS_OPT_NAMESPACE,
|
|
|
|
+ .type = QEMU_OPT_STRING,
|
|
|
|
+ .help = "Optional: The snapshot's namespace.",
|
|
|
|
+ },
|
|
|
|
+ {
|
2020-07-09 14:15:49 +03:00
|
|
|
+ .name = PBS_OPT_SNAPSHOT,
|
|
|
|
+ .type = QEMU_OPT_STRING,
|
|
|
|
+ .help = "The snapshot to read.",
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .name = PBS_OPT_ARCHIVE,
|
|
|
|
+ .type = QEMU_OPT_STRING,
|
|
|
|
+ .help = "Which archive within the snapshot should be accessed.",
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .name = PBS_OPT_PASSWORD,
|
|
|
|
+ .type = QEMU_OPT_STRING,
|
|
|
|
+ .help = "Server password. Can be passed as env var 'PBS_PASSWORD'.",
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .name = PBS_OPT_FINGERPRINT,
|
|
|
|
+ .type = QEMU_OPT_STRING,
|
|
|
|
+ .help = "Server fingerprint. Can be passed as env var 'PBS_FINGERPRINT'.",
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .name = PBS_OPT_ENCRYPTION_PASSWORD,
|
|
|
|
+ .type = QEMU_OPT_STRING,
|
|
|
|
+ .help = "Optional: Key password. Can be passed as env var 'PBS_ENCRYPTION_PASSWORD'.",
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .name = PBS_OPT_KEYFILE,
|
|
|
|
+ .type = QEMU_OPT_STRING,
|
|
|
|
+ .help = "Optional: The path to the keyfile to use.",
|
|
|
|
+ },
|
|
|
|
+ { /* end of list */ }
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// filename format:
|
squash related patches
where there is no good reason to keep them separate. It's a pain
during rebase if there are multiple patches changing the same code
over and over again. This was especially bad for the backup-related
patches. If the history of patches really is needed, it can be
extracted via git. Additionally, compilation with partial application
of patches was broken since a long time, because one of the master key
changes became part of an earlier patch during a past rebase.
If only the same files were changed by a subsequent patch and the
changes felt to belong together (obvious for later bug fixes, but also
done for features e.g. adding master key support for PBS), the patches
were squashed together.
The PBS namespace support patch was split into the individual parts
it changes, i.e. PBS block driver, pbs-restore binary and QMP backup
infrastructure, and squashed into the respective patches.
No code change is intended, git diff in the submodule should not show
any difference between applying all patches before this commit and
applying all patches after this commit.
The query-proxmox-support QMP function has been left as part of the
"PVE-Backup: Proxmox backup patches for QEMU" patch, because it's
currently only used there. If it ever is used elsewhere too, it can
be split out from there.
The recent alloc-track and BQL-related savevm-async changes have been
left separate for now, because it's not 100% clear they are the best
approach yet. This depends on what upstream decides about the BQL
stuff and whether and what kind of issues with the changes pop up.
The qemu-img dd snapshot patch has been re-ordered to after the other
qemu-img dd patches.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:56 +03:00
|
|
|
+// pbs:repository=<repo>,namespace=<ns>,snapshot=<snap>,password=<pw>,key_password=<kpw>,fingerprint=<fp>,archive=<archive>
|
2020-07-09 14:15:49 +03:00
|
|
|
+static void pbs_parse_filename(const char *filename, QDict *options,
|
|
|
|
+ Error **errp)
|
|
|
|
+{
|
|
|
|
+
|
|
|
|
+ if (!strstart(filename, "pbs:", &filename)) {
|
|
|
|
+ if (errp) error_setg(errp, "pbs_parse_filename failed - missing 'pbs:' prefix");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ QemuOpts *opts = qemu_opts_parse_noisily(&runtime_opts, filename, false);
|
|
|
|
+ if (!opts) {
|
|
|
|
+ if (errp) error_setg(errp, "pbs_parse_filename failed");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ qemu_opts_to_qdict(opts, options);
|
|
|
|
+
|
|
|
|
+ qemu_opts_del(opts);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int pbs_open(BlockDriverState *bs, QDict *options, int flags,
|
|
|
|
+ Error **errp)
|
|
|
|
+{
|
|
|
|
+ QemuOpts *opts;
|
|
|
|
+ BDRVPBSState *s = bs->opaque;
|
|
|
|
+ char *pbs_error = NULL;
|
|
|
|
+
|
|
|
|
+ opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
|
|
|
+ qemu_opts_absorb_qdict(opts, options, &error_abort);
|
|
|
|
+
|
|
|
|
+ s->repository = g_strdup(qemu_opt_get(opts, PBS_OPT_REPOSITORY));
|
|
|
|
+ s->snapshot = g_strdup(qemu_opt_get(opts, PBS_OPT_SNAPSHOT));
|
|
|
|
+ s->archive = g_strdup(qemu_opt_get(opts, PBS_OPT_ARCHIVE));
|
|
|
|
+ const char *keyfile = qemu_opt_get(opts, PBS_OPT_KEYFILE);
|
|
|
|
+ const char *password = qemu_opt_get(opts, PBS_OPT_PASSWORD);
|
squash related patches
where there is no good reason to keep them separate. It's a pain
during rebase if there are multiple patches changing the same code
over and over again. This was especially bad for the backup-related
patches. If the history of patches really is needed, it can be
extracted via git. Additionally, compilation with partial application
of patches was broken since a long time, because one of the master key
changes became part of an earlier patch during a past rebase.
If only the same files were changed by a subsequent patch and the
changes felt to belong together (obvious for later bug fixes, but also
done for features e.g. adding master key support for PBS), the patches
were squashed together.
The PBS namespace support patch was split into the individual parts
it changes, i.e. PBS block driver, pbs-restore binary and QMP backup
infrastructure, and squashed into the respective patches.
No code change is intended, git diff in the submodule should not show
any difference between applying all patches before this commit and
applying all patches after this commit.
The query-proxmox-support QMP function has been left as part of the
"PVE-Backup: Proxmox backup patches for QEMU" patch, because it's
currently only used there. If it ever is used elsewhere too, it can
be split out from there.
The recent alloc-track and BQL-related savevm-async changes have been
left separate for now, because it's not 100% clear they are the best
approach yet. This depends on what upstream decides about the BQL
stuff and whether and what kind of issues with the changes pop up.
The qemu-img dd snapshot patch has been re-ordered to after the other
qemu-img dd patches.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:56 +03:00
|
|
|
+ const char *namespace = qemu_opt_get(opts, PBS_OPT_NAMESPACE);
|
2020-07-09 14:15:49 +03:00
|
|
|
+ const char *fingerprint = qemu_opt_get(opts, PBS_OPT_FINGERPRINT);
|
|
|
|
+ const char *key_password = qemu_opt_get(opts, PBS_OPT_ENCRYPTION_PASSWORD);
|
|
|
|
+
|
|
|
|
+ if (!password) {
|
|
|
|
+ password = getenv("PBS_PASSWORD");
|
|
|
|
+ }
|
|
|
|
+ if (!fingerprint) {
|
|
|
|
+ fingerprint = getenv("PBS_FINGERPRINT");
|
|
|
|
+ }
|
|
|
|
+ if (!key_password) {
|
|
|
|
+ key_password = getenv("PBS_ENCRYPTION_PASSWORD");
|
|
|
|
+ }
|
squash related patches
where there is no good reason to keep them separate. It's a pain
during rebase if there are multiple patches changing the same code
over and over again. This was especially bad for the backup-related
patches. If the history of patches really is needed, it can be
extracted via git. Additionally, compilation with partial application
of patches was broken since a long time, because one of the master key
changes became part of an earlier patch during a past rebase.
If only the same files were changed by a subsequent patch and the
changes felt to belong together (obvious for later bug fixes, but also
done for features e.g. adding master key support for PBS), the patches
were squashed together.
The PBS namespace support patch was split into the individual parts
it changes, i.e. PBS block driver, pbs-restore binary and QMP backup
infrastructure, and squashed into the respective patches.
No code change is intended, git diff in the submodule should not show
any difference between applying all patches before this commit and
applying all patches after this commit.
The query-proxmox-support QMP function has been left as part of the
"PVE-Backup: Proxmox backup patches for QEMU" patch, because it's
currently only used there. If it ever is used elsewhere too, it can
be split out from there.
The recent alloc-track and BQL-related savevm-async changes have been
left separate for now, because it's not 100% clear they are the best
approach yet. This depends on what upstream decides about the BQL
stuff and whether and what kind of issues with the changes pop up.
The qemu-img dd snapshot patch has been re-ordered to after the other
qemu-img dd patches.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:56 +03:00
|
|
|
+ if (namespace) {
|
|
|
|
+ s->namespace = g_strdup(namespace);
|
|
|
|
+ }
|
2020-07-09 14:15:49 +03:00
|
|
|
+
|
|
|
|
+ /* connect to PBS server in read mode */
|
squash related patches
where there is no good reason to keep them separate. It's a pain
during rebase if there are multiple patches changing the same code
over and over again. This was especially bad for the backup-related
patches. If the history of patches really is needed, it can be
extracted via git. Additionally, compilation with partial application
of patches was broken since a long time, because one of the master key
changes became part of an earlier patch during a past rebase.
If only the same files were changed by a subsequent patch and the
changes felt to belong together (obvious for later bug fixes, but also
done for features e.g. adding master key support for PBS), the patches
were squashed together.
The PBS namespace support patch was split into the individual parts
it changes, i.e. PBS block driver, pbs-restore binary and QMP backup
infrastructure, and squashed into the respective patches.
No code change is intended, git diff in the submodule should not show
any difference between applying all patches before this commit and
applying all patches after this commit.
The query-proxmox-support QMP function has been left as part of the
"PVE-Backup: Proxmox backup patches for QEMU" patch, because it's
currently only used there. If it ever is used elsewhere too, it can
be split out from there.
The recent alloc-track and BQL-related savevm-async changes have been
left separate for now, because it's not 100% clear they are the best
approach yet. This depends on what upstream decides about the BQL
stuff and whether and what kind of issues with the changes pop up.
The qemu-img dd snapshot patch has been re-ordered to after the other
qemu-img dd patches.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:56 +03:00
|
|
|
+ s->conn = proxmox_restore_new_ns(s->repository, s->snapshot, s->namespace, password,
|
2020-07-09 14:15:49 +03:00
|
|
|
+ keyfile, key_password, fingerprint, &pbs_error);
|
|
|
|
+
|
|
|
|
+ /* invalidates qemu_opt_get char pointers from above */
|
|
|
|
+ qemu_opts_del(opts);
|
|
|
|
+
|
|
|
|
+ if (!s->conn) {
|
|
|
|
+ if (pbs_error && errp) error_setg(errp, "PBS restore_new failed: %s", pbs_error);
|
|
|
|
+ if (pbs_error) proxmox_backup_free_error(pbs_error);
|
|
|
|
+ return -ENOMEM;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ int ret = proxmox_restore_connect(s->conn, &pbs_error);
|
|
|
|
+ if (ret < 0) {
|
|
|
|
+ if (pbs_error && errp) error_setg(errp, "PBS connect failed: %s", pbs_error);
|
|
|
|
+ if (pbs_error) proxmox_backup_free_error(pbs_error);
|
|
|
|
+ return -ECONNREFUSED;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /* acquire handle and length */
|
|
|
|
+ s->aid = proxmox_restore_open_image(s->conn, s->archive, &pbs_error);
|
|
|
|
+ if (s->aid < 0) {
|
|
|
|
+ if (pbs_error && errp) error_setg(errp, "PBS open_image failed: %s", pbs_error);
|
|
|
|
+ if (pbs_error) proxmox_backup_free_error(pbs_error);
|
|
|
|
+ return -ENODEV;
|
|
|
|
+ }
|
|
|
|
+ s->length = proxmox_restore_get_image_length(s->conn, s->aid, &pbs_error);
|
|
|
|
+ if (s->length < 0) {
|
|
|
|
+ if (pbs_error && errp) error_setg(errp, "PBS get_image_length failed: %s", pbs_error);
|
|
|
|
+ if (pbs_error) proxmox_backup_free_error(pbs_error);
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int pbs_file_open(BlockDriverState *bs, QDict *options, int flags,
|
|
|
|
+ Error **errp)
|
|
|
|
+{
|
|
|
|
+ return pbs_open(bs, options, flags, errp);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void pbs_close(BlockDriverState *bs) {
|
|
|
|
+ BDRVPBSState *s = bs->opaque;
|
|
|
|
+ g_free(s->repository);
|
squash related patches
where there is no good reason to keep them separate. It's a pain
during rebase if there are multiple patches changing the same code
over and over again. This was especially bad for the backup-related
patches. If the history of patches really is needed, it can be
extracted via git. Additionally, compilation with partial application
of patches was broken since a long time, because one of the master key
changes became part of an earlier patch during a past rebase.
If only the same files were changed by a subsequent patch and the
changes felt to belong together (obvious for later bug fixes, but also
done for features e.g. adding master key support for PBS), the patches
were squashed together.
The PBS namespace support patch was split into the individual parts
it changes, i.e. PBS block driver, pbs-restore binary and QMP backup
infrastructure, and squashed into the respective patches.
No code change is intended, git diff in the submodule should not show
any difference between applying all patches before this commit and
applying all patches after this commit.
The query-proxmox-support QMP function has been left as part of the
"PVE-Backup: Proxmox backup patches for QEMU" patch, because it's
currently only used there. If it ever is used elsewhere too, it can
be split out from there.
The recent alloc-track and BQL-related savevm-async changes have been
left separate for now, because it's not 100% clear they are the best
approach yet. This depends on what upstream decides about the BQL
stuff and whether and what kind of issues with the changes pop up.
The qemu-img dd snapshot patch has been re-ordered to after the other
qemu-img dd patches.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:56 +03:00
|
|
|
+ g_free(s->namespace);
|
2020-07-09 14:15:49 +03:00
|
|
|
+ g_free(s->snapshot);
|
|
|
|
+ g_free(s->archive);
|
|
|
|
+ proxmox_restore_disconnect(s->conn);
|
|
|
|
+}
|
|
|
|
+
|
update submodule and patches to QEMU 8.0.0
Many changes were necessary this time around:
* QAPI was changed to avoid redundant has_* variables, see commit
44ea9d9be3 ("qapi: Start to elide redundant has_FOO in generated C")
for details. This affected many QMP commands added by Proxmox too.
* Pending querying for migration got split into two functions, one to
estimate, one for exact value, see commit c8df4a7aef ("migration:
Split save_live_pending() into state_pending_*") for details. Relevant
for savevm-async and PBS dirty bitmap.
* Some block (driver) functions got converted to coroutines, so the
Proxmox block drivers needed to be adapted.
* Alloc track auto-detaching during PBS live restore got broken by
AioContext-related changes resulting in a deadlock. The current, hacky
method was replaced by a simpler one. Stefan apparently ran into a
problem with that when he wrote the driver, but there were
improvements in the stream job code since then and I didn't manage to
reproduce the issue. It's a separate patch "alloc-track: fix deadlock
during drop" for now, you can find the details there.
* Async snapshot-related changes:
- The pending querying got adapted to the above-mentioned split and
a patch is added to optimize it/make it more similar to what
upstream code does.
- Added initialization of the compression counters (for
future-proofing).
- It's necessary the hold the BQL (big QEMU lock = iothread mutex)
during the setup phase, because block layer functions are used there
and not doing so leads to racy, hard-to-debug crashes or hangs. It's
necessary to change some upstream code too for this, a version of
the patch "migration: for snapshots, hold the BQL during setup
callbacks" is intended to be upstreamed.
- Need to take the bdrv graph read lock before flushing.
* hmp_info_balloon was moved to a different file.
* Needed to include a new headers from time to time to still get the
correct functions.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:53 +03:00
|
|
|
+static coroutine_fn int64_t pbs_co_getlength(BlockDriverState *bs)
|
2020-07-09 14:15:49 +03:00
|
|
|
+{
|
|
|
|
+ BDRVPBSState *s = bs->opaque;
|
|
|
|
+ return s->length;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+typedef struct ReadCallbackData {
|
|
|
|
+ Coroutine *co;
|
|
|
|
+ AioContext *ctx;
|
|
|
|
+} ReadCallbackData;
|
|
|
|
+
|
|
|
|
+static void read_callback(void *callback_data)
|
|
|
|
+{
|
|
|
|
+ ReadCallbackData *rcb = callback_data;
|
|
|
|
+ aio_co_schedule(rcb->ctx, rcb->co);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static coroutine_fn int pbs_co_preadv(BlockDriverState *bs,
|
2022-02-11 12:24:33 +03:00
|
|
|
+ int64_t offset, int64_t bytes,
|
|
|
|
+ QEMUIOVector *qiov, BdrvRequestFlags flags)
|
2020-07-09 14:15:49 +03:00
|
|
|
+{
|
|
|
|
+ BDRVPBSState *s = bs->opaque;
|
|
|
|
+ int ret;
|
|
|
|
+ char *pbs_error = NULL;
|
squash related patches
where there is no good reason to keep them separate. It's a pain
during rebase if there are multiple patches changing the same code
over and over again. This was especially bad for the backup-related
patches. If the history of patches really is needed, it can be
extracted via git. Additionally, compilation with partial application
of patches was broken since a long time, because one of the master key
changes became part of an earlier patch during a past rebase.
If only the same files were changed by a subsequent patch and the
changes felt to belong together (obvious for later bug fixes, but also
done for features e.g. adding master key support for PBS), the patches
were squashed together.
The PBS namespace support patch was split into the individual parts
it changes, i.e. PBS block driver, pbs-restore binary and QMP backup
infrastructure, and squashed into the respective patches.
No code change is intended, git diff in the submodule should not show
any difference between applying all patches before this commit and
applying all patches after this commit.
The query-proxmox-support QMP function has been left as part of the
"PVE-Backup: Proxmox backup patches for QEMU" patch, because it's
currently only used there. If it ever is used elsewhere too, it can
be split out from there.
The recent alloc-track and BQL-related savevm-async changes have been
left separate for now, because it's not 100% clear they are the best
approach yet. This depends on what upstream decides about the BQL
stuff and whether and what kind of issues with the changes pop up.
The qemu-img dd snapshot patch has been re-ordered to after the other
qemu-img dd patches.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:56 +03:00
|
|
|
+ uint8_t *buf;
|
|
|
|
+ bool inline_buf = true;
|
|
|
|
+
|
|
|
|
+ /* for single-buffer IO vectors we can fast-path the write directly to it */
|
|
|
|
+ if (qiov->niov == 1 && qiov->iov->iov_len >= bytes) {
|
|
|
|
+ buf = qiov->iov->iov_base;
|
|
|
|
+ } else {
|
|
|
|
+ inline_buf = false;
|
|
|
|
+ buf = g_malloc(bytes);
|
|
|
|
+ }
|
2020-07-09 14:15:49 +03:00
|
|
|
+
|
2022-02-11 12:24:33 +03:00
|
|
|
+ if (offset < 0 || bytes < 0) {
|
|
|
|
+ fprintf(stderr, "unexpected negative 'offset' or 'bytes' value!\n");
|
2022-10-14 15:07:16 +03:00
|
|
|
+ return -EIO;
|
2022-02-11 12:24:33 +03:00
|
|
|
+ }
|
|
|
|
+
|
2020-07-09 14:15:49 +03:00
|
|
|
+ ReadCallbackData rcb = {
|
|
|
|
+ .co = qemu_coroutine_self(),
|
2021-04-06 17:25:42 +03:00
|
|
|
+ .ctx = bdrv_get_aio_context(bs),
|
2020-07-09 14:15:49 +03:00
|
|
|
+ };
|
|
|
|
+
|
2022-02-11 12:24:33 +03:00
|
|
|
+ proxmox_restore_read_image_at_async(s->conn, s->aid, buf, (uint64_t)offset, (uint64_t)bytes,
|
2020-07-09 14:15:49 +03:00
|
|
|
+ read_callback, (void *) &rcb, &ret, &pbs_error);
|
|
|
|
+
|
|
|
|
+ qemu_coroutine_yield();
|
|
|
|
+
|
|
|
|
+ if (ret < 0) {
|
|
|
|
+ fprintf(stderr, "error during PBS read: %s\n", pbs_error ? pbs_error : "unknown error");
|
|
|
|
+ if (pbs_error) proxmox_backup_free_error(pbs_error);
|
|
|
|
+ return -EIO;
|
|
|
|
+ }
|
|
|
|
+
|
squash related patches
where there is no good reason to keep them separate. It's a pain
during rebase if there are multiple patches changing the same code
over and over again. This was especially bad for the backup-related
patches. If the history of patches really is needed, it can be
extracted via git. Additionally, compilation with partial application
of patches was broken since a long time, because one of the master key
changes became part of an earlier patch during a past rebase.
If only the same files were changed by a subsequent patch and the
changes felt to belong together (obvious for later bug fixes, but also
done for features e.g. adding master key support for PBS), the patches
were squashed together.
The PBS namespace support patch was split into the individual parts
it changes, i.e. PBS block driver, pbs-restore binary and QMP backup
infrastructure, and squashed into the respective patches.
No code change is intended, git diff in the submodule should not show
any difference between applying all patches before this commit and
applying all patches after this commit.
The query-proxmox-support QMP function has been left as part of the
"PVE-Backup: Proxmox backup patches for QEMU" patch, because it's
currently only used there. If it ever is used elsewhere too, it can
be split out from there.
The recent alloc-track and BQL-related savevm-async changes have been
left separate for now, because it's not 100% clear they are the best
approach yet. This depends on what upstream decides about the BQL
stuff and whether and what kind of issues with the changes pop up.
The qemu-img dd snapshot patch has been re-ordered to after the other
qemu-img dd patches.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:56 +03:00
|
|
|
+ if (!inline_buf) {
|
|
|
|
+ qemu_iovec_from_buf(qiov, 0, buf, bytes);
|
|
|
|
+ g_free(buf);
|
|
|
|
+ }
|
2020-07-09 14:15:49 +03:00
|
|
|
+
|
2022-10-14 15:07:16 +03:00
|
|
|
+ return 0;
|
2020-07-09 14:15:49 +03:00
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static coroutine_fn int pbs_co_pwritev(BlockDriverState *bs,
|
2022-02-11 12:24:33 +03:00
|
|
|
+ int64_t offset, int64_t bytes,
|
|
|
|
+ QEMUIOVector *qiov, BdrvRequestFlags flags)
|
2020-07-09 14:15:49 +03:00
|
|
|
+{
|
|
|
|
+ fprintf(stderr, "pbs-bdrv: cannot write to backup file, make sure "
|
|
|
|
+ "any attached disk devices are set to read-only!\n");
|
|
|
|
+ return -EPERM;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void pbs_refresh_filename(BlockDriverState *bs)
|
|
|
|
+{
|
|
|
|
+ BDRVPBSState *s = bs->opaque;
|
squash related patches
where there is no good reason to keep them separate. It's a pain
during rebase if there are multiple patches changing the same code
over and over again. This was especially bad for the backup-related
patches. If the history of patches really is needed, it can be
extracted via git. Additionally, compilation with partial application
of patches was broken since a long time, because one of the master key
changes became part of an earlier patch during a past rebase.
If only the same files were changed by a subsequent patch and the
changes felt to belong together (obvious for later bug fixes, but also
done for features e.g. adding master key support for PBS), the patches
were squashed together.
The PBS namespace support patch was split into the individual parts
it changes, i.e. PBS block driver, pbs-restore binary and QMP backup
infrastructure, and squashed into the respective patches.
No code change is intended, git diff in the submodule should not show
any difference between applying all patches before this commit and
applying all patches after this commit.
The query-proxmox-support QMP function has been left as part of the
"PVE-Backup: Proxmox backup patches for QEMU" patch, because it's
currently only used there. If it ever is used elsewhere too, it can
be split out from there.
The recent alloc-track and BQL-related savevm-async changes have been
left separate for now, because it's not 100% clear they are the best
approach yet. This depends on what upstream decides about the BQL
stuff and whether and what kind of issues with the changes pop up.
The qemu-img dd snapshot patch has been re-ordered to after the other
qemu-img dd patches.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:56 +03:00
|
|
|
+ if (s->namespace) {
|
|
|
|
+ snprintf(bs->exact_filename, sizeof(bs->exact_filename), "%s/%s:%s(%s)",
|
|
|
|
+ s->repository, s->namespace, s->snapshot, s->archive);
|
|
|
|
+ } else {
|
|
|
|
+ snprintf(bs->exact_filename, sizeof(bs->exact_filename), "%s/%s(%s)",
|
|
|
|
+ s->repository, s->snapshot, s->archive);
|
|
|
|
+ }
|
2020-07-09 14:15:49 +03:00
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static const char *const pbs_strong_runtime_opts[] = {
|
|
|
|
+ NULL
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static BlockDriver bdrv_pbs_co = {
|
|
|
|
+ .format_name = "pbs",
|
|
|
|
+ .protocol_name = "pbs",
|
|
|
|
+ .instance_size = sizeof(BDRVPBSState),
|
|
|
|
+
|
|
|
|
+ .bdrv_parse_filename = pbs_parse_filename,
|
|
|
|
+
|
|
|
|
+ .bdrv_file_open = pbs_file_open,
|
|
|
|
+ .bdrv_open = pbs_open,
|
|
|
|
+ .bdrv_close = pbs_close,
|
update submodule and patches to QEMU 8.0.0
Many changes were necessary this time around:
* QAPI was changed to avoid redundant has_* variables, see commit
44ea9d9be3 ("qapi: Start to elide redundant has_FOO in generated C")
for details. This affected many QMP commands added by Proxmox too.
* Pending querying for migration got split into two functions, one to
estimate, one for exact value, see commit c8df4a7aef ("migration:
Split save_live_pending() into state_pending_*") for details. Relevant
for savevm-async and PBS dirty bitmap.
* Some block (driver) functions got converted to coroutines, so the
Proxmox block drivers needed to be adapted.
* Alloc track auto-detaching during PBS live restore got broken by
AioContext-related changes resulting in a deadlock. The current, hacky
method was replaced by a simpler one. Stefan apparently ran into a
problem with that when he wrote the driver, but there were
improvements in the stream job code since then and I didn't manage to
reproduce the issue. It's a separate patch "alloc-track: fix deadlock
during drop" for now, you can find the details there.
* Async snapshot-related changes:
- The pending querying got adapted to the above-mentioned split and
a patch is added to optimize it/make it more similar to what
upstream code does.
- Added initialization of the compression counters (for
future-proofing).
- It's necessary the hold the BQL (big QEMU lock = iothread mutex)
during the setup phase, because block layer functions are used there
and not doing so leads to racy, hard-to-debug crashes or hangs. It's
necessary to change some upstream code too for this, a version of
the patch "migration: for snapshots, hold the BQL during setup
callbacks" is intended to be upstreamed.
- Need to take the bdrv graph read lock before flushing.
* hmp_info_balloon was moved to a different file.
* Needed to include a new headers from time to time to still get the
correct functions.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:53 +03:00
|
|
|
+ .bdrv_co_getlength = pbs_co_getlength,
|
2020-07-09 14:15:49 +03:00
|
|
|
+
|
|
|
|
+ .bdrv_co_preadv = pbs_co_preadv,
|
|
|
|
+ .bdrv_co_pwritev = pbs_co_pwritev,
|
|
|
|
+
|
|
|
|
+ .bdrv_refresh_filename = pbs_refresh_filename,
|
|
|
|
+ .strong_runtime_opts = pbs_strong_runtime_opts,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static void bdrv_pbs_init(void)
|
|
|
|
+{
|
|
|
|
+ bdrv_register(&bdrv_pbs_co);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+block_init(bdrv_pbs_init);
|
|
|
|
diff --git a/configure b/configure
|
2023-10-17 15:10:09 +03:00
|
|
|
index 133f4e3235..f5a830c1f3 100755
|
2020-07-09 14:15:49 +03:00
|
|
|
--- a/configure
|
|
|
|
+++ b/configure
|
2023-10-17 15:10:09 +03:00
|
|
|
@@ -256,6 +256,7 @@ qemu_suffix="qemu"
|
|
|
|
softmmu="yes"
|
|
|
|
linux_user=""
|
update submodule and patches to 7.1.0
Notable changes:
* The only big change is the switch to using a custom QIOChannel for
savevm-async, because the previously used QEMUFileOps was dropped.
Changes to the current implementation:
* Switch to vector based methods as required for an IO channel. For
short reads the passed-in IO vector is stuffed with zeroes at the
end, just to be sure.
* For reading: The documentation in include/io/channel.h states that
at least one byte should be read, so also error out when whe are
at the very end instead of returning 0.
* For reading: Fix off-by-one error when request goes beyond end.
The wrong code piece was:
if ((pos + size) > maxlen) {
size = maxlen - pos - 1;
}
Previously, the last byte would not be read. It's actually
possible to get a snapshot .raw file that has content all the way
up the final 512 byte (= BDRV_SECTOR_SIZE) boundary without any
trailing zero bytes (I wrote a script to do it).
Luckily, it didn't cause a real issue, because qemu_loadvm_state()
is not interested in the final (i.e. QEMU_VM_VMDESCRIPTION)
section. The buffer for reading it is simply freed up afterwards
and the function will assume that it read the whole section, even
if that's not the case.
* For writing: Make use of the generated blk_pwritev() wrapper
instead of manually wrapping the coroutine to simplify and save a
few lines.
* Adapt to changed interfaces for blk_{pread,pwrite}:
* a9262f551e ("block: Change blk_{pread,pwrite}() param order")
* 3b35d4542c ("block: Add a 'flags' param to blk_pread()")
* bf5b16fa40 ("block: Make blk_{pread,pwrite}() return 0 on success")
Those changes especially affected the qemu-img dd patches, because
the context also changed, but also some of our block drivers used
the functions.
* Drop qemu-common.h include: it got renamed after essentially
everything was moved to other headers. The only remaining user I
could find for things dropped from the header between 7.0 and 7.1
was qemu_get_vm_name() in the iscsi-initiatorname patch, but it
already includes the header to which the function was moved.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2022-10-14 15:07:13 +03:00
|
|
|
bsd_user=""
|
2020-07-09 14:15:49 +03:00
|
|
|
+pbs_bdrv="yes"
|
2022-02-11 12:24:33 +03:00
|
|
|
plugins="$default_feature"
|
2022-12-14 17:16:32 +03:00
|
|
|
ninja=""
|
2023-10-17 15:10:09 +03:00
|
|
|
python=
|
|
|
|
@@ -809,6 +810,10 @@ for opt do
|
update submodule and patches to QEMU 8.0.0
Many changes were necessary this time around:
* QAPI was changed to avoid redundant has_* variables, see commit
44ea9d9be3 ("qapi: Start to elide redundant has_FOO in generated C")
for details. This affected many QMP commands added by Proxmox too.
* Pending querying for migration got split into two functions, one to
estimate, one for exact value, see commit c8df4a7aef ("migration:
Split save_live_pending() into state_pending_*") for details. Relevant
for savevm-async and PBS dirty bitmap.
* Some block (driver) functions got converted to coroutines, so the
Proxmox block drivers needed to be adapted.
* Alloc track auto-detaching during PBS live restore got broken by
AioContext-related changes resulting in a deadlock. The current, hacky
method was replaced by a simpler one. Stefan apparently ran into a
problem with that when he wrote the driver, but there were
improvements in the stream job code since then and I didn't manage to
reproduce the issue. It's a separate patch "alloc-track: fix deadlock
during drop" for now, you can find the details there.
* Async snapshot-related changes:
- The pending querying got adapted to the above-mentioned split and
a patch is added to optimize it/make it more similar to what
upstream code does.
- Added initialization of the compression counters (for
future-proofing).
- It's necessary the hold the BQL (big QEMU lock = iothread mutex)
during the setup phase, because block layer functions are used there
and not doing so leads to racy, hard-to-debug crashes or hangs. It's
necessary to change some upstream code too for this, a version of
the patch "migration: for snapshots, hold the BQL during setup
callbacks" is intended to be upstreamed.
- Need to take the bdrv graph read lock before flushing.
* hmp_info_balloon was moved to a different file.
* Needed to include a new headers from time to time to still get the
correct functions.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:53 +03:00
|
|
|
;;
|
2023-10-17 15:10:09 +03:00
|
|
|
--enable-download) download="enabled"; git_submodules_action=update;
|
2020-07-09 14:15:49 +03:00
|
|
|
;;
|
|
|
|
+ --disable-pbs-bdrv) pbs_bdrv="no"
|
|
|
|
+ ;;
|
|
|
|
+ --enable-pbs-bdrv) pbs_bdrv="yes"
|
|
|
|
+ ;;
|
2023-10-17 15:10:09 +03:00
|
|
|
--enable-plugins) if test "$mingw32" = "yes"; then
|
|
|
|
error_exit "TCG plugins not currently supported on Windows platforms"
|
|
|
|
else
|
|
|
|
@@ -959,6 +964,7 @@ cat << EOF
|
|
|
|
bsd-user all BSD usermode emulation targets
|
|
|
|
pie Position Independent Executables
|
|
|
|
debug-tcg TCG debugging (default is disabled)
|
2020-07-09 14:15:49 +03:00
|
|
|
+ pbs-bdrv Proxmox backup server read-only block driver support
|
2022-06-27 14:05:40 +03:00
|
|
|
|
|
|
|
NOTE: The object files are built at the place where configure is launched
|
update submodule and patches to 7.1.0
Notable changes:
* The only big change is the switch to using a custom QIOChannel for
savevm-async, because the previously used QEMUFileOps was dropped.
Changes to the current implementation:
* Switch to vector based methods as required for an IO channel. For
short reads the passed-in IO vector is stuffed with zeroes at the
end, just to be sure.
* For reading: The documentation in include/io/channel.h states that
at least one byte should be read, so also error out when whe are
at the very end instead of returning 0.
* For reading: Fix off-by-one error when request goes beyond end.
The wrong code piece was:
if ((pos + size) > maxlen) {
size = maxlen - pos - 1;
}
Previously, the last byte would not be read. It's actually
possible to get a snapshot .raw file that has content all the way
up the final 512 byte (= BDRV_SECTOR_SIZE) boundary without any
trailing zero bytes (I wrote a script to do it).
Luckily, it didn't cause a real issue, because qemu_loadvm_state()
is not interested in the final (i.e. QEMU_VM_VMDESCRIPTION)
section. The buffer for reading it is simply freed up afterwards
and the function will assume that it read the whole section, even
if that's not the case.
* For writing: Make use of the generated blk_pwritev() wrapper
instead of manually wrapping the coroutine to simplify and save a
few lines.
* Adapt to changed interfaces for blk_{pread,pwrite}:
* a9262f551e ("block: Change blk_{pread,pwrite}() param order")
* 3b35d4542c ("block: Add a 'flags' param to blk_pread()")
* bf5b16fa40 ("block: Make blk_{pread,pwrite}() return 0 on success")
Those changes especially affected the qemu-img dd patches, because
the context also changed, but also some of our block drivers used
the functions.
* Drop qemu-common.h include: it got renamed after essentially
everything was moved to other headers. The only remaining user I
could find for things dropped from the header between 7.0 and 7.1
was qemu_get_vm_name() in the iscsi-initiatorname patch, but it
already includes the header to which the function was moved.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2022-10-14 15:07:13 +03:00
|
|
|
EOF
|
2023-10-17 15:10:09 +03:00
|
|
|
@@ -1744,6 +1750,9 @@ if test "$solaris" = "yes" ; then
|
2020-07-09 14:15:49 +03:00
|
|
|
fi
|
2023-10-17 15:10:09 +03:00
|
|
|
echo "SRC_PATH=$source_path" >> $config_host_mak
|
|
|
|
echo "TARGET_DIRS=$target_list" >> $config_host_mak
|
2020-07-09 14:15:49 +03:00
|
|
|
+if test "$pbs_bdrv" = "yes" ; then
|
|
|
|
+ echo "CONFIG_PBS_BDRV=y" >> $config_host_mak
|
|
|
|
+fi
|
update submodule and patches to 7.1.0
Notable changes:
* The only big change is the switch to using a custom QIOChannel for
savevm-async, because the previously used QEMUFileOps was dropped.
Changes to the current implementation:
* Switch to vector based methods as required for an IO channel. For
short reads the passed-in IO vector is stuffed with zeroes at the
end, just to be sure.
* For reading: The documentation in include/io/channel.h states that
at least one byte should be read, so also error out when whe are
at the very end instead of returning 0.
* For reading: Fix off-by-one error when request goes beyond end.
The wrong code piece was:
if ((pos + size) > maxlen) {
size = maxlen - pos - 1;
}
Previously, the last byte would not be read. It's actually
possible to get a snapshot .raw file that has content all the way
up the final 512 byte (= BDRV_SECTOR_SIZE) boundary without any
trailing zero bytes (I wrote a script to do it).
Luckily, it didn't cause a real issue, because qemu_loadvm_state()
is not interested in the final (i.e. QEMU_VM_VMDESCRIPTION)
section. The buffer for reading it is simply freed up afterwards
and the function will assume that it read the whole section, even
if that's not the case.
* For writing: Make use of the generated blk_pwritev() wrapper
instead of manually wrapping the coroutine to simplify and save a
few lines.
* Adapt to changed interfaces for blk_{pread,pwrite}:
* a9262f551e ("block: Change blk_{pread,pwrite}() param order")
* 3b35d4542c ("block: Add a 'flags' param to blk_pread()")
* bf5b16fa40 ("block: Make blk_{pread,pwrite}() return 0 on success")
Those changes especially affected the qemu-img dd patches, because
the context also changed, but also some of our block drivers used
the functions.
* Drop qemu-common.h include: it got renamed after essentially
everything was moved to other headers. The only remaining user I
could find for things dropped from the header between 7.0 and 7.1
was qemu_get_vm_name() in the iscsi-initiatorname patch, but it
already includes the header to which the function was moved.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2022-10-14 15:07:13 +03:00
|
|
|
|
|
|
|
# XXX: suppress that
|
|
|
|
if [ "$bsd" = "yes" ] ; then
|
2021-02-11 19:11:11 +03:00
|
|
|
diff --git a/meson.build b/meson.build
|
2023-10-17 15:10:09 +03:00
|
|
|
index c3330310d9..cbfc9a43fb 100644
|
2021-02-11 19:11:11 +03:00
|
|
|
--- a/meson.build
|
|
|
|
+++ b/meson.build
|
2023-10-17 15:10:09 +03:00
|
|
|
@@ -4319,7 +4319,7 @@ summary_info += {'bzip2 support': libbzip2}
|
2022-06-27 14:05:40 +03:00
|
|
|
summary_info += {'lzfse support': liblzfse}
|
2022-02-11 12:24:33 +03:00
|
|
|
summary_info += {'zstd support': zstd}
|
2022-06-27 14:05:40 +03:00
|
|
|
summary_info += {'NUMA host support': numa}
|
update submodule and patches to 7.1.0
Notable changes:
* The only big change is the switch to using a custom QIOChannel for
savevm-async, because the previously used QEMUFileOps was dropped.
Changes to the current implementation:
* Switch to vector based methods as required for an IO channel. For
short reads the passed-in IO vector is stuffed with zeroes at the
end, just to be sure.
* For reading: The documentation in include/io/channel.h states that
at least one byte should be read, so also error out when whe are
at the very end instead of returning 0.
* For reading: Fix off-by-one error when request goes beyond end.
The wrong code piece was:
if ((pos + size) > maxlen) {
size = maxlen - pos - 1;
}
Previously, the last byte would not be read. It's actually
possible to get a snapshot .raw file that has content all the way
up the final 512 byte (= BDRV_SECTOR_SIZE) boundary without any
trailing zero bytes (I wrote a script to do it).
Luckily, it didn't cause a real issue, because qemu_loadvm_state()
is not interested in the final (i.e. QEMU_VM_VMDESCRIPTION)
section. The buffer for reading it is simply freed up afterwards
and the function will assume that it read the whole section, even
if that's not the case.
* For writing: Make use of the generated blk_pwritev() wrapper
instead of manually wrapping the coroutine to simplify and save a
few lines.
* Adapt to changed interfaces for blk_{pread,pwrite}:
* a9262f551e ("block: Change blk_{pread,pwrite}() param order")
* 3b35d4542c ("block: Add a 'flags' param to blk_pread()")
* bf5b16fa40 ("block: Make blk_{pread,pwrite}() return 0 on success")
Those changes especially affected the qemu-img dd patches, because
the context also changed, but also some of our block drivers used
the functions.
* Drop qemu-common.h include: it got renamed after essentially
everything was moved to other headers. The only remaining user I
could find for things dropped from the header between 7.0 and 7.1
was qemu_get_vm_name() in the iscsi-initiatorname patch, but it
already includes the header to which the function was moved.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2022-10-14 15:07:13 +03:00
|
|
|
-summary_info += {'capstone': capstone}
|
2021-02-11 19:11:11 +03:00
|
|
|
+summary_info += {'PBS bdrv support': config_host.has_key('CONFIG_PBS_BDRV')}
|
2022-02-11 12:24:33 +03:00
|
|
|
summary_info += {'libpmem support': libpmem}
|
|
|
|
summary_info += {'libdaxctl support': libdaxctl}
|
update submodule and patches to 7.1.0
Notable changes:
* The only big change is the switch to using a custom QIOChannel for
savevm-async, because the previously used QEMUFileOps was dropped.
Changes to the current implementation:
* Switch to vector based methods as required for an IO channel. For
short reads the passed-in IO vector is stuffed with zeroes at the
end, just to be sure.
* For reading: The documentation in include/io/channel.h states that
at least one byte should be read, so also error out when whe are
at the very end instead of returning 0.
* For reading: Fix off-by-one error when request goes beyond end.
The wrong code piece was:
if ((pos + size) > maxlen) {
size = maxlen - pos - 1;
}
Previously, the last byte would not be read. It's actually
possible to get a snapshot .raw file that has content all the way
up the final 512 byte (= BDRV_SECTOR_SIZE) boundary without any
trailing zero bytes (I wrote a script to do it).
Luckily, it didn't cause a real issue, because qemu_loadvm_state()
is not interested in the final (i.e. QEMU_VM_VMDESCRIPTION)
section. The buffer for reading it is simply freed up afterwards
and the function will assume that it read the whole section, even
if that's not the case.
* For writing: Make use of the generated blk_pwritev() wrapper
instead of manually wrapping the coroutine to simplify and save a
few lines.
* Adapt to changed interfaces for blk_{pread,pwrite}:
* a9262f551e ("block: Change blk_{pread,pwrite}() param order")
* 3b35d4542c ("block: Add a 'flags' param to blk_pread()")
* bf5b16fa40 ("block: Make blk_{pread,pwrite}() return 0 on success")
Those changes especially affected the qemu-img dd patches, because
the context also changed, but also some of our block drivers used
the functions.
* Drop qemu-common.h include: it got renamed after essentially
everything was moved to other headers. The only remaining user I
could find for things dropped from the header between 7.0 and 7.1
was qemu_get_vm_name() in the iscsi-initiatorname patch, but it
already includes the header to which the function was moved.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2022-10-14 15:07:13 +03:00
|
|
|
summary_info += {'libudev': libudev}
|
2020-07-09 14:15:49 +03:00
|
|
|
diff --git a/qapi/block-core.json b/qapi/block-core.json
|
2024-01-30 17:14:37 +03:00
|
|
|
index 1b8462a51b..d67a6d448a 100644
|
2020-07-09 14:15:49 +03:00
|
|
|
--- a/qapi/block-core.json
|
|
|
|
+++ b/qapi/block-core.json
|
2023-10-17 15:10:09 +03:00
|
|
|
@@ -3396,6 +3396,7 @@
|
2022-12-14 17:16:32 +03:00
|
|
|
'parallels', 'preallocate', 'qcow', 'qcow2', 'qed', 'quorum',
|
|
|
|
'raw', 'rbd',
|
2022-02-11 12:24:33 +03:00
|
|
|
{ 'name': 'replication', 'if': 'CONFIG_REPLICATION' },
|
2021-10-11 14:55:34 +03:00
|
|
|
+ 'pbs',
|
2022-12-14 17:16:32 +03:00
|
|
|
'ssh', 'throttle', 'vdi', 'vhdx',
|
|
|
|
{ 'name': 'virtio-blk-vfio-pci', 'if': 'CONFIG_BLKIO' },
|
|
|
|
{ 'name': 'virtio-blk-vhost-user', 'if': 'CONFIG_BLKIO' },
|
2023-10-17 15:10:09 +03:00
|
|
|
@@ -3482,6 +3483,17 @@
|
2020-07-09 14:15:49 +03:00
|
|
|
{ 'struct': 'BlockdevOptionsNull',
|
|
|
|
'data': { '*size': 'int', '*latency-ns': 'uint64', '*read-zeroes': 'bool' } }
|
|
|
|
|
|
|
|
+##
|
|
|
|
+# @BlockdevOptionsPbs:
|
|
|
|
+#
|
|
|
|
+# Driver specific block device options for the PBS backend.
|
|
|
|
+#
|
|
|
|
+##
|
|
|
|
+{ 'struct': 'BlockdevOptionsPbs',
|
|
|
|
+ 'data': { 'repository': 'str', 'snapshot': 'str', 'archive': 'str',
|
|
|
|
+ '*keyfile': 'str', '*password': 'str', '*fingerprint': 'str',
|
squash related patches
where there is no good reason to keep them separate. It's a pain
during rebase if there are multiple patches changing the same code
over and over again. This was especially bad for the backup-related
patches. If the history of patches really is needed, it can be
extracted via git. Additionally, compilation with partial application
of patches was broken since a long time, because one of the master key
changes became part of an earlier patch during a past rebase.
If only the same files were changed by a subsequent patch and the
changes felt to belong together (obvious for later bug fixes, but also
done for features e.g. adding master key support for PBS), the patches
were squashed together.
The PBS namespace support patch was split into the individual parts
it changes, i.e. PBS block driver, pbs-restore binary and QMP backup
infrastructure, and squashed into the respective patches.
No code change is intended, git diff in the submodule should not show
any difference between applying all patches before this commit and
applying all patches after this commit.
The query-proxmox-support QMP function has been left as part of the
"PVE-Backup: Proxmox backup patches for QEMU" patch, because it's
currently only used there. If it ever is used elsewhere too, it can
be split out from there.
The recent alloc-track and BQL-related savevm-async changes have been
left separate for now, because it's not 100% clear they are the best
approach yet. This depends on what upstream decides about the BQL
stuff and whether and what kind of issues with the changes pop up.
The qemu-img dd snapshot patch has been re-ordered to after the other
qemu-img dd patches.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2023-05-15 16:39:56 +03:00
|
|
|
+ '*key_password': 'str', '*namespace': 'str' } }
|
2020-07-09 14:15:49 +03:00
|
|
|
+
|
|
|
|
##
|
|
|
|
# @BlockdevOptionsNVMe:
|
|
|
|
#
|
2024-01-30 17:14:37 +03:00
|
|
|
@@ -4890,6 +4902,7 @@
|
2020-07-09 14:15:49 +03:00
|
|
|
'nfs': 'BlockdevOptionsNfs',
|
|
|
|
'null-aio': 'BlockdevOptionsNull',
|
|
|
|
'null-co': 'BlockdevOptionsNull',
|
|
|
|
+ 'pbs': 'BlockdevOptionsPbs',
|
|
|
|
'nvme': 'BlockdevOptionsNVMe',
|
2022-12-14 17:16:32 +03:00
|
|
|
'nvme-io_uring': { 'type': 'BlockdevOptionsNvmeIoUring',
|
|
|
|
'if': 'CONFIG_BLKIO' },
|
2023-01-10 11:40:57 +03:00
|
|
|
diff --git a/qapi/pragma.json b/qapi/pragma.json
|
2023-05-24 16:56:52 +03:00
|
|
|
index 325e684411..b6079f6a0e 100644
|
2023-01-10 11:40:57 +03:00
|
|
|
--- a/qapi/pragma.json
|
|
|
|
+++ b/qapi/pragma.json
|
2023-05-24 16:56:52 +03:00
|
|
|
@@ -45,6 +45,7 @@
|
2023-01-10 11:40:57 +03:00
|
|
|
'BlockInfo', # query-block
|
|
|
|
'BlockdevAioOptions', # blockdev-add, -blockdev
|
|
|
|
'BlockdevDriver', # blockdev-add, query-blockstats, ...
|
|
|
|
+ 'BlockdevOptionsPbs', # for PBS backwards compat
|
|
|
|
'BlockdevVmdkAdapterType', # blockdev-create (to match VMDK spec)
|
|
|
|
'BlockdevVmdkSubformat', # blockdev-create (to match VMDK spec)
|
|
|
|
'ColoCompareProperties', # object_add, -object
|