Commit Graph

2161 Commits

Author SHA1 Message Date
32e482a617 fix #957: iscsi: improve iscsi_test_portal logic
Check if there is already a logged session present and fall back to
previous TCP check port connection.

pvestatd is calling check_connection every 10 seconds.  This check
produces a lot of noise at the iscsi server logging.

Signed-off-by: Victor Seva <linuxmaniac@torreviejawireless.org>
Tested-by: Mira Limbeck <m.limbeck@proxmox.com>
Reviewed-by: Mira Limbeck <m.limbeck@proxmox.com>
Tested-by: Friedrich Weber <f.weber@proxmox.com>
Reviewed-by: Friedrich Weber <f.weber@proxmox.com>
2025-03-25 19:35:09 +01:00
9dd136c8df btrfs: volume export: add note to clarify special handling of 'snapshot' argument
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2025-02-24 10:18:38 +01:00
424280a16c btrfs: avoid superfluous check in foreach_snapshot_of_subvol() helper
The helper iterates with the BTRFS_SNAPSHOT_REGEX regular expression,
so there will always be a snapshot name.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2025-02-24 10:18:35 +01:00
a25b1050ce btrfs: rename snapshot parameter
It was originally introduced as $snapshot to match the argument name of
foreach_subvol, we rename it here to make it clear that it only contains
the snapshot name.

Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
2025-02-20 15:57:02 +01:00
3abd10cedf btrfs: remove foreach_subvol
This method is not used anymore.

Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
2025-02-20 15:57:02 +01:00
cae30fef56 btrfs: rename volume regex
The regex only lists snapshots.

Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
2025-02-20 15:57:02 +01:00
d3b84d73fd btrfs: forcefully set image to readwrite
When a subvolume is transferred via btrfs send/receive the resulting
image contains the received_uuid property set. This property is required
to do incremental snapshots.

A downside though is that once the received_uuid property is set, it is
not possible to make the image readwrite again without the force (-f)
flag, and in such case the received_uuid property is lost. Since we know
the images are only set to rw for the duration of the move, it is safe
to set the flag forcefully and then in a future commit add the
received_uuid property by force.

Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
2025-02-20 15:57:02 +01:00
c2db0cb7d5 btrfs: use foreach_snapshot_of_subvol helper in free_image
Replaces the current use without changes. The `$dir` variable is not
used anymore at that moment so it is defined later.

Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
2025-02-20 15:57:02 +01:00
c05ef0dbce fix #3873: btrfs: use foreach_snapshot_of_subvol helper in volume_export
Suppose we are taking a snapshot of VM 100's disk-0. The
dir_glob_foreach runs over $path=/subvolume/images/100, lists all
snapshot names and appends their names to the path of the disk, e.g.
/subvolume/images/vm-100-disk-0@SNAP_NAME, but the original directory
$path might contain a second disk `vm-100-disk-1` which is also listed
by the dir_glib_foreach.

By using the helper we only iterate over the snapshots of the guest.

Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
2025-02-20 15:57:02 +01:00
171b760d81 btrfs: add helper to iterate over snapshots of a subvolume
In this context a subvolume means a BTRFS subvolume.
`$volume\@$snap_name` would be for example
`btrfs_volume/images/102/vm-102-disk-0@snap_name`.

Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
2025-02-20 15:57:02 +01:00
70955c2d34 api: {upload, download}_url: factor out common parameter hash accesses
Minor cleanup to reduce the amount of `$param->{...}` to variables in
the upload and download url API handler.

Signed-off-by: Daniel Kral <d.kral@proxmox.com>
2025-02-19 16:25:40 +01:00
bdabd1296b iscsidirect plugin: do not use cache in list_images()
A static cache key 'directiscsi' was used to cache storeid-specific
information. This was causing issues in case of multiple instances.

Drop $cache usage instead of fixing the issue as there is no caller
using it and the same portal/storeid multiple times.

Remove $storeid from iscsi_ls() and its callers.

Signed-off-by: Dmitry Petrov <dpetrov67@gmail.com>
2025-02-12 14:28:34 +01:00
9b7c1746f1 rbd plugin: do not use cache in list_images()
A static cache key 'rbd' was used to cache pool/storeid-specific
information. This was causing issues in case of multiple RBD pools.

Drop $cache usage instead of fixing the issue as there is no caller
using it and the same pool/storeid multiple times.

Remove $pool from rbd_ls() and get_rbd_path($scfg) from list_images().

Signed-off-by: Dmitry Petrov <dpetrov67@gmail.com>
2025-02-12 14:28:32 +01:00
e5f4af47d0 bump version to 8.3.3
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
2024-12-19 15:16:45 +01:00
b3c844b858 rbd plugin: list: drop outdated error message check
This became outdated after Ceph commit ac547a5b7dc ("rbd: return 0 and
an empty list when pool is entirely empty") 11 years ago. See also:
https://tracker.ceph.com/issues/6693

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-19 12:38:59 +01:00
a1140d77d0 plugins: volume import: align size up to 1KiB
Previously, the size was rounded down which, in case of an image with
non-1KiB-aligned sze (only possible for external plugins or manually
created images) would lead to errors when attempting to write beyond
the end of the too small allocated target image.

For image allocation, the size is already rounded up to the
granularity of the storage. Do the same for import.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-19 12:38:59 +01:00
c41d7755c3 common: introduce common module
This module's purpose is to provide shared functions, constants, etc.
for storage plugins and storage-related operations.

It starts out with a align_size_up() function, that will (initially)
be used for volume import.

[FE: start out with a different function for my use case
     fixup Makefile]

Originally-by: Max Carrara <m.carrara@proxmox.com>
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-19 12:38:59 +01:00
cc0efbd250 iscsi direct plugin: support volume export
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
Tested-by: Filip Schauer <f.schauer@proxmox.com>
2024-12-19 12:38:08 +01:00
d8a67cb6bf iscsi plugin: support volume export
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
Tested-by: Filip Schauer <f.schauer@proxmox.com>
2024-12-19 12:37:58 +01:00
e2cf3cea96 rbd plugin: improve volume exists helper
Currently, the helper would not distinguish between different kinds
of errors. Instead of relying on an error, list the images and check
there.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-19 12:34:14 +01:00
b6f4b89640 rbd plugin: implement volume import/export
For now, only 'raw+size' is supported and it's not possible to
export/import with snapshots. The volume or snapshot is exported or
imported via the corresponding 'rbd' commands.

Introducing an 'rbd' transport format might be feasible for more
complete (i.e. with snapshots, incremental) transfer between two RBD
storages.

Use the '--dest-pool' switch rather than '-p' for import, because the
latter is deprecated.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-19 12:34:14 +01:00
3bf2193b44 rbd plugin: factor out helper to check if volume already exists
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-19 12:34:14 +01:00
9adc4c69ef export: redirect stdout to avoid any unrelated messages ending up in the export stream
Current export implementations luckily seems to not run into this
issue yet. However, for the upcoming implementation for RBD, mapping a
volume would print the device path to STDOUT, thus messing up the
export stream.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-19 12:34:14 +01:00
7166db2ce4 rbd plugin: schema: document default value for 'krbd' setting
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-19 12:34:14 +01:00
a16bf6f791 plugin: export/import: fix calls to path() method
The plugin API does not require call context detection for the
returned value of the path() method. See other plugins like
ISCSIDirect/ZFS that do not implement it. So do not expect it for
external plugins either.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-19 12:34:14 +01:00
edb18d6386 bump version to 8.3.2
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2024-12-11 15:41:54 +01:00
652154c0b0 btrfs: fix handling of non-images volumes
previously, only 'images' returned a format, now other volume types do too, so
differentiate where needed.

reported on the forum: https://forum.proxmox.com/threads/158888/

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
2024-12-11 14:53:07 +01:00
c0304618f5 bump version to 8.3.1
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
2024-12-10 14:33:11 +01:00
a9e0f50d4a file_size_info: add warning when falling back to raw format
in case this gets called with an explicit format that is none of:
- 'auto-detect'
- 'subvol'
- a member of the list of known "qemu" formats

this should only affect third-party storage plugins that either call this
directly with a format, or via inherited code that gets a format from
parse_volname and passes it to file_size_info.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
Reviewed-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-10 14:31:50 +01:00
081ce2c9df esxi: fix return value of volume_size_info for vmx volumes
in case of an array context, it should also return the format, else a caller
might assume it failed.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
Reviewed-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-10 14:31:49 +01:00
bfb3dff319 storage: plugin: return 'raw' format when parsing non-image volumes
since `volume_size_info` passes the parsed format to `file_size_info`, which
prints a warning if the format is undef before falling back to auto-detection,
and these should always be treated as raw files anyway.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
Reviewed-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-10 14:31:46 +01:00
93c1af6ba4 esxi: anchor vmdk regex in parse_volname
otherwise, `volname.vmdk.raw` would be picked up as a `vmdk` formatted
image, which may not be desired.

Signed-off-by: Shannon Sterz <s.sterz@proxmox.com>
2024-12-10 10:21:21 +01:00
5784c84e8f bump version to 8.3.0
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
2024-12-09 12:01:23 +01:00
f1ea2c5c89 file_size_info: add missing format parameters
these calls would print spurious warnings otherwise.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
2024-12-09 11:48:01 +01:00
a8d246e784 bump version to 8.2.10
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
2024-12-09 10:42:44 +01:00
0cc5492707 esxi: parse volname: explicitly return format for vmx configuration file
For consistency with the list_images() call and so that callers can
better deal with it.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-09 08:55:10 +01:00
541064a95b list images: return 'invalid' format value for image that cannot be queried in expected format
The only (transitive) caller that seems to be interested in the format
is the API endpoint for content listing.

The warning about not being able to query in the expected format might
not be seen by consumers that only use the API result, so this helps
admins detect such images. It is also for future-proofing, should any
new callers want to use only images of certain formats to error out
early.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-09 08:55:10 +01:00
936fbe3f35 file size info: prepare to make format parameter mandatory
In almost all cases, there already is an expected format. Allow
setting a special value 'auto-detect' to opt-in to automatic format
detection by 'qemu-img' for the exceptions.

Suggested-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-09 08:55:10 +01:00
9612844ff3 btrfs: list images: specify format when querying file info
This avoids auto-detection by qemu-img and so the information will be
correct with respect to the actual image format on the storage layer.

Should the image not be in the correct format, warn and try again
querying as raw, so the image is still listed. The image is present,
so it is better if it is listed and for some backwards compatibility.
The format is still returned as the matched format in such a case,
because that is how the image is treated, even if corrupt.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-09 08:55:10 +01:00
6e22cae004 plugin: list images: specify format when querying file info
This avoids auto-detection by qemu-img and so the information will be
correct with respect to the actual image format on the storage layer.

Should the image not be in the correct format, warn and try again
querying as raw, so the image is still listed. The image is present,
so it is better if it is listed and for some backwards compatibility.
The format is still returned as the matched format in such a case,
because that is how the image is treated, even if corrupt.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-09 08:55:10 +01:00
c29152c691 plugin: create base: specify format when querying file info
By passing in the format, qemu-img will also check that the file is a
valid instance of the expected format instead of auto-detecting. The
size will also be correct when there previously was a wrong
auto-detection, but it is already only used for checking that the call
was successful.

It looks like this could also avoid wrongly failing checks with the
parent information, but a raw image cannot have a base volume and raw
images are those where the auto-detection might lead to a different
format.

Remove the unused variable $used while at it.

The check for $format in the result became obsolete with 35533c6 ("add
subvol support for directory storage").

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-09 08:55:10 +01:00
adfd7e9166 btrfs: volume size info: specify format when querying file info
This avoids auto-detection by qemu-img and so the information will be
correct with respect to the actual image format on the storage layer.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-09 08:55:10 +01:00
44ff2de576 plugin: volume size info: specify format when querying file info
This avoids auto-detection by qemu-img and so the information will be
correct with respect to the actual image format on the storage layer.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-09 08:55:10 +01:00
e50dde06fa volume export: rely on storage plugin's format
Make it consistent with importing, which already relies on
parse_volname() for the format.

This could cause migration failures where the format returned by
file_size_info() would not match the one from parse_volname().

Pass the format that will be used for export to file_size_info() to
ensure the correct size will be determined.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-09 08:55:10 +01:00
83648951d7 file size info: allow specifying file format
Allow callers to opt-out of 'qemu-img' autodetecting the format.

Currently not supported to be done together with untrusted, because it
can lead to less checks being done. Could be further refined (e.g.
disallow only untrusted together with format being 'raw') should the
need arise.

For 'subvol' format, the checking is handled outside of 'qemu-img' of
course, based on whether it is a directory or not.

Currently, there is a fallback to 'raw' should the format not be among
the ones allowed for the 'pve-qm-image-format' standard option. This
is to reduce potential for fallout, in particular for the plan to
change the base plugin's volume_size_info() to pass in the expected
format when calling file_size_info() too.

While not explicitly part of the storage plugin API, the 'untrusted'
parameter is now in a different place, so a compat check is added for
external plugins that might've still used it.

Breaks for qemu-server needed (if we don't want to just rely on the
compat check).

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-09 08:55:10 +01:00
10d338baa8 file size info: introduce error handling helper
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-09 08:55:10 +01:00
4836e98901 test: fix file_size_info() mocking
Pass along all parameters.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
2024-12-09 08:55:10 +01:00
39fd552d14 bump version to 8.2.9
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2024-11-19 21:05:48 +01:00
3633dee46d untrusted image checks: also handle multi-part vmdk files
neither vmdk images with multiple children, nor ones with multiple extents
(that might in turn be backed by multiple files) are allowed when an image is
untrusted.

Reported-by: Friedrich Weber <f.weber@proxmox.com>
Suggested-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
2024-11-19 21:04:54 +01:00
a3db720967 bump version to 8.2.8
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2024-11-18 21:11:46 +01:00