From: Fabian Ebner <f.ebner@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH v2 qemu 3/3] add patch for loading a snapshot with qemu-img dd
Date: Fri, 11 Feb 2022 10:24:35 +0100 [thread overview]
Message-ID: <20220211092435.84731-3-f.ebner@proxmox.com> (raw)
In-Reply-To: <20220211092435.84731-1-f.ebner@proxmox.com>
Will be used when cloning from a qcow2 efidisk.
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
---
New in v2.
...-add-l-option-for-loading-a-snapshot.patch | 129 ++++++++++++++++++
debian/patches/series | 1 +
2 files changed, 130 insertions(+)
create mode 100644 debian/patches/pve/0049-qemu-img-dd-add-l-option-for-loading-a-snapshot.patch
diff --git a/debian/patches/pve/0049-qemu-img-dd-add-l-option-for-loading-a-snapshot.patch b/debian/patches/pve/0049-qemu-img-dd-add-l-option-for-loading-a-snapshot.patch
new file mode 100644
index 0000000..f239cd4
--- /dev/null
+++ b/debian/patches/pve/0049-qemu-img-dd-add-l-option-for-loading-a-snapshot.patch
@@ -0,0 +1,129 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Fabian Ebner <f.ebner@proxmox.com>
+Date: Mon, 7 Feb 2022 14:21:01 +0100
+Subject: [PATCH] qemu-img: dd: add -l option for loading a snapshot
+
+Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
+---
+ docs/tools/qemu-img.rst | 6 +++---
+ qemu-img-cmds.hx | 4 ++--
+ qemu-img.c | 33 +++++++++++++++++++++++++++++++--
+ 3 files changed, 36 insertions(+), 7 deletions(-)
+
+diff --git a/docs/tools/qemu-img.rst b/docs/tools/qemu-img.rst
+index a49badb158..1039aec01c 100644
+--- a/docs/tools/qemu-img.rst
++++ b/docs/tools/qemu-img.rst
+@@ -492,10 +492,10 @@ Command description:
+ it doesn't need to be specified separately in this case.
+
+
+-.. option:: dd [--image-opts] [-U] [-f FMT] [-O OUTPUT_FMT] [-n] [bs=BLOCK_SIZE] [count=BLOCKS] [skip=BLOCKS] if=INPUT of=OUTPUT
++.. option:: dd [--image-opts] [-U] [-f FMT] [-O OUTPUT_FMT] [-n] [-l SNAPSHOT_PARAM] [bs=BLOCK_SIZE] [count=BLOCKS] [skip=BLOCKS] if=INPUT of=OUTPUT
+
+- dd copies from *INPUT* file to *OUTPUT* file converting it from
+- *FMT* format to *OUTPUT_FMT* format.
++ dd copies from *INPUT* file or snapshot *SNAPSHOT_PARAM* to *OUTPUT* file
++ converting it from *FMT* format to *OUTPUT_FMT* format.
+
+ The data is by default read and written using blocks of 512 bytes but can be
+ modified by specifying *BLOCK_SIZE*. If count=\ *BLOCKS* is specified
+diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx
+index f3b2b1b4de..e77ed9347f 100644
+--- a/qemu-img-cmds.hx
++++ b/qemu-img-cmds.hx
+@@ -58,9 +58,9 @@ SRST
+ ERST
+
+ DEF("dd", img_dd,
+- "dd [--image-opts] [-U] [-f fmt] [-O output_fmt] [-n] [bs=block_size] [count=blocks] [skip=blocks] [osize=output_size] if=input of=output")
++ "dd [--image-opts] [-U] [-f fmt] [-O output_fmt] [-n] [-l snapshot_param] [bs=block_size] [count=blocks] [skip=blocks] [osize=output_size] if=input of=output")
+ SRST
+-.. option:: dd [--image-opts] [-U] [-f FMT] [-O OUTPUT_FMT] [-n] [bs=BLOCK_SIZE] [count=BLOCKS] [skip=BLOCKS] [osize=OUTPUT_SIZE] if=INPUT of=OUTPUT
++.. option:: dd [--image-opts] [-U] [-f FMT] [-O OUTPUT_FMT] [-n] [-l SNAPSHOT_PARAM] [bs=BLOCK_SIZE] [count=BLOCKS] [skip=BLOCKS] [osize=OUTPUT_SIZE] if=INPUT of=OUTPUT
+ ERST
+
+ DEF("info", img_info,
+diff --git a/qemu-img.c b/qemu-img.c
+index 015d6d2ce4..7031195e32 100644
+--- a/qemu-img.c
++++ b/qemu-img.c
+@@ -4922,6 +4922,7 @@ static int img_dd(int argc, char **argv)
+ BlockDriver *drv = NULL, *proto_drv = NULL;
+ BlockBackend *blk1 = NULL, *blk2 = NULL;
+ QemuOpts *opts = NULL;
++ QemuOpts *sn_opts = NULL;
+ QemuOptsList *create_opts = NULL;
+ Error *local_err = NULL;
+ bool image_opts = false;
+@@ -4931,6 +4932,7 @@ static int img_dd(int argc, char **argv)
+ int64_t size = 0, readsize = 0;
+ int64_t block_count = 0, out_pos, in_pos;
+ bool force_share = false, skip_create = false;
++ const char *snapshot_name = NULL;
+ struct DdInfo dd = {
+ .flags = 0,
+ .count = 0,
+@@ -4968,7 +4970,7 @@ static int img_dd(int argc, char **argv)
+ { 0, 0, 0, 0 }
+ };
+
+- while ((c = getopt_long(argc, argv, ":hf:O:Un", long_options, NULL))) {
++ while ((c = getopt_long(argc, argv, ":hf:O:l:Un", long_options, NULL))) {
+ if (c == EOF) {
+ break;
+ }
+@@ -4991,6 +4993,19 @@ static int img_dd(int argc, char **argv)
+ case 'n':
+ skip_create = true;
+ break;
++ case 'l':
++ if (strstart(optarg, SNAPSHOT_OPT_BASE, NULL)) {
++ sn_opts = qemu_opts_parse_noisily(&internal_snapshot_opts,
++ optarg, false);
++ if (!sn_opts) {
++ error_report("Failed in parsing snapshot param '%s'",
++ optarg);
++ goto out;
++ }
++ } else {
++ snapshot_name = optarg;
++ }
++ break;
+ case 'U':
+ force_share = true;
+ break;
+@@ -5050,11 +5065,24 @@ static int img_dd(int argc, char **argv)
+ if (dd.flags & C_IF) {
+ blk1 = img_open(image_opts, in.filename, fmt, 0, false, false,
+ force_share);
+-
+ if (!blk1) {
+ ret = -1;
+ goto out;
+ }
++ if (sn_opts) {
++ bdrv_snapshot_load_tmp(blk_bs(blk1),
++ qemu_opt_get(sn_opts, SNAPSHOT_OPT_ID),
++ qemu_opt_get(sn_opts, SNAPSHOT_OPT_NAME),
++ &local_err);
++ } else if (snapshot_name != NULL) {
++ bdrv_snapshot_load_tmp_by_id_or_name(blk_bs(blk1), snapshot_name,
++ &local_err);
++ }
++ if (local_err) {
++ error_reportf_err(local_err, "Failed to load snapshot: ");
++ ret = -1;
++ goto out;
++ }
+ }
+
+ if (dd.flags & C_OSIZE) {
+@@ -5203,6 +5231,7 @@ static int img_dd(int argc, char **argv)
+ out:
+ g_free(arg);
+ qemu_opts_del(opts);
++ qemu_opts_del(sn_opts);
+ qemu_opts_free(create_opts);
+ blk_unref(blk1);
+ blk_unref(blk2);
diff --git a/debian/patches/series b/debian/patches/series
index daaff7c..a02a2d7 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -61,3 +61,4 @@ pve/0045-block-io-accept-NULL-qiov-in-bdrv_pad_request.patch
pve/0046-block-add-alloc-track-driver.patch
pve/0047-PVE-whitelist-invalid-QAPI-names-for-backwards-compa.patch
pve/0048-PVE-savevm-async-register-yank-before-migration_inco.patch
+pve/0049-qemu-img-dd-add-l-option-for-loading-a-snapshot.patch
--
2.30.2
next prev parent reply other threads:[~2022-02-11 9:25 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-11 9:24 [pve-devel] [PATCH v2 qemu 1/3] update submodule and patches to 6.2.0 Fabian Ebner
2022-02-11 9:24 ` [pve-devel] [PATCH v2 qemu 2/3] fix getopt-string when introducing -n option for qemu-img dd Fabian Ebner
2022-02-11 9:24 ` Fabian Ebner [this message]
2022-02-14 11:02 ` [pve-devel] [PATCH v2 qemu 4/4] vma: create: register all streams before entering coroutines Fabian Ebner
2022-02-14 14:51 ` [pve-devel] applied: " Thomas Lamprecht
2022-02-15 15:08 ` [pve-devel] applied-series: [PATCH v2 qemu 1/3] update submodule and patches to 6.2.0 Thomas Lamprecht
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220211092435.84731-3-f.ebner@proxmox.com \
--to=f.ebner@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal