]> git.proxmox.com Git - pve-storage.git/log
pve-storage.git
3 years agopbs: allow setting up a master key
Fabian Grünbichler [Mon, 8 Feb 2021 13:08:34 +0000 (14:08 +0100)]
pbs: allow setting up a master key

similar to the existing encryption key handling, but without
auto-generation since we only have the public part here.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
3 years agorbd: fix typo in error message
Fabian Ebner [Tue, 20 Apr 2021 08:14:01 +0000 (10:14 +0200)]
rbd: fix typo in error message

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agodiskmanage: get_partnum: fix check
Fabian Ebner [Tue, 20 Apr 2021 12:07:50 +0000 (14:07 +0200)]
diskmanage: get_partnum: fix check

Not replacing it with return, because the current behavior is dying:
    Can't "next" outside a loop block
and the single existing caller in pve-manager's API2/Ceph/OSD.pm does not check
the return value.

Also check for $st, which can be undefined in case a non-existing path was
provided. This also led to dying previously:
    Can't call method "mode" on an undefined value

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agodiskmanage: improve setting usage for whole disk with include-partitions
Fabian Ebner [Fri, 16 Apr 2021 10:34:50 +0000 (12:34 +0200)]
diskmanage: improve setting usage for whole disk with include-partitions

in case a disk with partitions also has an fstype set, which happens for our ZFS
boot disks. Do not change the behavior without include-partitons, as we
prefer(red) to be more specific than simply 'partitions' then.

Reported in the enterprise support channel.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agoimport: allow import from UNIX socket
Fabian Grünbichler [Tue, 13 Apr 2021 12:16:33 +0000 (14:16 +0200)]
import: allow import from UNIX socket

this allows forwarding over websockets without requiring a (free) port.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
3 years agobump version to 6.3-9
Thomas Lamprecht [Mon, 12 Apr 2021 14:14:36 +0000 (16:14 +0200)]
bump version to 6.3-9

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agotest: rbd: improve usage output
Thomas Lamprecht [Mon, 12 Apr 2021 13:43:42 +0000 (15:43 +0200)]
test: rbd: improve usage output

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agotest: rbd: typo fix
Thomas Lamprecht [Mon, 12 Apr 2021 13:27:14 +0000 (15:27 +0200)]
test: rbd: typo fix

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agotest: rbd: indendation cleanup, allow -d short-opt for debug
Thomas Lamprecht [Mon, 12 Apr 2021 13:26:59 +0000 (15:26 +0200)]
test: rbd: indendation cleanup, allow -d short-opt for debug

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agotest: rbd: actually use debug helper
Thomas Lamprecht [Mon, 12 Apr 2021 13:26:34 +0000 (15:26 +0200)]
test: rbd: actually use debug helper

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agovolume export/import: allow uppercase letters
Fabian Ebner [Mon, 12 Apr 2021 11:37:15 +0000 (13:37 +0200)]
volume export/import: allow uppercase letters

Bug reported in the community forum[0].

Currently, it's possible to break replication by:
1. have an existing snapshot whose name contains an uppercase letter
2. set up a replication job and run it
3. rollback to the existing snapshot
4. replicate again -> fails

The failure occurs, because after step 3, the most recent common snapshot is the
previously existing one and currently no uppercase letters are allowed for
export/import.

The pve-snapshot-name option uses the CONFIGID_RE
    qr/[a-z][a-z0-9_-]+/i
so it cannot be used here, because it would not allow for e.g. '__migrate__'.
Simply allow uppercase letters, to be backwards compatible and allow all
possible pve-snapshot-name values.

There is still an issue if there also was state volume, but that's a different
bug[1].

[0]: https://forum.proxmox.com/threads/solved-migration-error-base-value-does-not-match-the-regex-pattern.85946/
[1]: https://bugzilla.proxmox.com/show_bug.cgi?id=3111

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agotests: rbd ns: exit cleanly on help, and allow short-opt -h
Thomas Lamprecht [Mon, 12 Apr 2021 12:46:12 +0000 (14:46 +0200)]
tests: rbd ns: exit cleanly on help, and allow short-opt -h

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agotests: rbd ns: avoid underscore in CLI param name
Thomas Lamprecht [Mon, 12 Apr 2021 12:42:38 +0000 (14:42 +0200)]
tests: rbd ns: avoid underscore in CLI param name

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agofix #3345: zfs: restore container volume to ZFS with size 0
Aaron Lauterer [Fri, 9 Apr 2021 15:10:25 +0000 (17:10 +0200)]
fix #3345: zfs: restore container volume to ZFS with size 0

A restore to ZFS for a container which has a volume (rootfs / mount
point) of size 0 failed because the refquota property does not accept
'0k' but wants 'none' in that situation.

Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agorbd: make volume param for get_rbd_path to allow further use
Thomas Lamprecht [Fri, 9 Apr 2021 12:19:48 +0000 (14:19 +0200)]
rbd: make volume param for get_rbd_path to allow further use

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agorbd: list images: early return to avoid indentation
Thomas Lamprecht [Fri, 9 Apr 2021 11:51:15 +0000 (13:51 +0200)]
rbd: list images: early return to avoid indentation

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agorbd: list images: sort by keys when pushing on result array
Thomas Lamprecht [Fri, 9 Apr 2021 11:49:56 +0000 (13:49 +0200)]
rbd: list images: sort by keys when pushing on result array

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agorbd: indentation and whitespace cleanups
Thomas Lamprecht [Fri, 9 Apr 2021 11:48:27 +0000 (13:48 +0200)]
rbd: indentation and whitespace cleanups

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agorbd: get kernel device sub returns a path, not a name
Thomas Lamprecht [Fri, 9 Apr 2021 11:45:17 +0000 (13:45 +0200)]
rbd: get kernel device sub returns a path, not a name

also transform to private sub instead of local variable closure.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agorbd: consistent closure call style
Thomas Lamprecht [Fri, 9 Apr 2021 11:42:23 +0000 (13:42 +0200)]
rbd: consistent closure call style

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agorbd: build cmd: allow "falsy" namespace value also here
Thomas Lamprecht [Fri, 9 Apr 2021 11:40:13 +0000 (13:40 +0200)]
rbd: build cmd: allow "falsy" namespace value also here

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agorbd: use private sub for get_rbd_path
Thomas Lamprecht [Fri, 9 Apr 2021 11:39:32 +0000 (13:39 +0200)]
rbd: use private sub for get_rbd_path

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agorbd: add integration test for namespace handling
Aaron Lauterer [Wed, 7 Apr 2021 14:22:18 +0000 (16:22 +0200)]
rbd: add integration test for namespace handling

This test is intended to be run on a hyperconverged PVE cluster to test
the most common operations of VMs using a namespaced Ceph RBD pool.

Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
3 years agorbd: fix #3286 add namespace support
Aaron Lauterer [Wed, 7 Apr 2021 14:22:17 +0000 (16:22 +0200)]
rbd: fix #3286 add namespace support

This patch introduces support for Cephs RBD namespaces.

A new storage config parameter 'namespace' defines the namespace to be
used for the RBD storage.

The namespace must already exist in the Ceph cluster as it is not
automatically created.

The main intention is to use this for external Ceph clusters. With
namespaces, each PVE cluster can get its own namespace and will not
conflict with other PVE clusters.

Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
3 years agorbd: centralize rbd path concatenation
Aaron Lauterer [Wed, 7 Apr 2021 14:22:16 +0000 (16:22 +0200)]
rbd: centralize rbd path concatenation

The <pool>/<image> paths are needed in quite a lot of places. Having one
single place where they are created helps to reduce duplicate code and
makes it easier to introduce new features.

The 'add_pool_to_disk' sub was already doing that but the name was not
really fitting. This commit renames it to the more general
'get_rbd_path' and changes the second parameter to the more widely used
$volume instead of $disk.

Furthermore, all occurences where "$pool/$volume" has been concatenated
have been replaced with a call to get_rbd_path.

Plus some minor code style cleanups for long function calls that were
touched.

Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
3 years agoprune backups: improve internal errors messages slightly
Thomas Lamprecht [Fri, 9 Apr 2021 10:49:55 +0000 (12:49 +0200)]
prune backups: improve internal errors messages slightly

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agoplugin: get_subdir_files: add comment
Thomas Lamprecht [Fri, 9 Apr 2021 10:46:46 +0000 (12:46 +0200)]
plugin: get_subdir_files: add comment

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agoprune backups: make vmid filtering more robust
Fabian Ebner [Wed, 7 Apr 2021 10:25:37 +0000 (12:25 +0200)]
prune backups: make vmid filtering more robust

by relying on archive_info's vmid first. archive_info is already used to
determine if it's a standard name, and in that case the vmid is certainly set.

Also add asserts to make sure we got what we expected.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agoplugin: subdir files: backup: don't match for vmid against the full path
Fabian Ebner [Wed, 7 Apr 2021 10:25:36 +0000 (12:25 +0200)]
plugin: subdir files: backup: don't match for vmid against the full path

Only match against the file name to avoid false positives with
directory names containing "-$vmid-".

Found while trying to debug/reproduce a forum thread[0], but the path
there should not be affected by this...

[0]: https://forum.proxmox.com/threads/vzdump-removing-too-many-backups.87072/

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agobump version to 6.3-8
Thomas Lamprecht [Thu, 1 Apr 2021 13:04:16 +0000 (15:04 +0200)]
bump version to 6.3-8

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agoOptionally allow blockdev in abs_filesystem_path
Dominic Jäger [Fri, 26 Mar 2021 12:32:25 +0000 (13:32 +0100)]
Optionally allow blockdev in abs_filesystem_path

This is required to import from LVM storages, for example

Signed-off-by: Dominic Jäger <d.jaeger@proxmox.com>
3 years agofix #3348: NFS: select correct transport to check for service
Fabian Ebner [Wed, 17 Mar 2021 12:49:42 +0000 (13:49 +0100)]
fix #3348: NFS: select correct transport to check for service

Suggested-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agofix #3363: avoid undef-warning for PBS crypt-mode
Fabian Grünbichler [Wed, 24 Mar 2021 12:24:41 +0000 (13:24 +0100)]
fix #3363: avoid undef-warning for PBS crypt-mode

it is optional after all, and missing (/None) for files stored in the
snapshot dir but not referenced in the manifest for whatever reason.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
3 years agovdisk list: allow specifying content type
Fabian Ebner [Mon, 22 Mar 2021 14:32:41 +0000 (15:32 +0100)]
vdisk list: allow specifying content type

and only scan storages that support it if specified.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agoRevert "vdisk list: only collect images from storages with an appropriate content...
Fabian Ebner [Mon, 22 Mar 2021 14:32:40 +0000 (15:32 +0100)]
Revert "vdisk list: only collect images from storages with an appropriate content type"

This reverts commit a44c18925d223a971296801a0985db34707ada4d and adds a reminder
comment.

The mentioned commit is actually a backwards-incompatible change that leads to
slightly different behavior when migrating a VM with volumes on a misconfigured
storage. For example, unreferenced volumes on a misconfigured storage won't be
picked up, even though they were before. And for referenced volumes on a
misconfigured storage, the disk size would not be updated on migration anymore.

We should wait until the next major release for this change and then also
re-evaluate the migration behavior with misconfigured disks.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agofix #3354: support notes on ceph backups
Dylan Whyte [Fri, 19 Mar 2021 13:58:15 +0000 (14:58 +0100)]
fix #3354: support notes on ceph backups

use DirPlugin's get/update_volume_notes implementation (which all the
other supported file systems use)

Signed-off-by: Dylan Whyte <d.whyte@proxmox.com>
3 years agotests: zfs: complain when a first sub-test dies
Fabian Ebner [Fri, 12 Mar 2021 09:50:27 +0000 (10:50 +0100)]
tests: zfs: complain when a first sub-test dies

Previously, $count was not increased and no test failure was reported.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agovdisk list: only collect images from storages with an appropriate content type
Fabian Ebner [Fri, 12 Mar 2021 09:50:26 +0000 (10:50 +0100)]
vdisk list: only collect images from storages with an appropriate content type

Only these storages are activated in the first place, and it's bad behavior to
list images when no appropriate content type is not set.

For example, on VM destruction, this avoids unreferenced images to be deleted
from a storage with only 'backup' content type set, which is supposedly what
happened in this[0] forum thread.

(Some) callers expect all keys to be present and valid array references in the
result, so initialization is needed.

Now, the enabled check is already done by the preceding code for every element
that is iterated over, and thus isn't needed in the main loop anymore.

[0]: https://forum.proxmox.com/threads/erasing-all-vm-disks-after-a-failed-vm-migration-task.85068

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agoapi: disk list: allow if an audit permission for the node is present
Fabian Ebner [Wed, 10 Mar 2021 09:26:27 +0000 (10:26 +0100)]
api: disk list: allow if an audit permission for the node is present

as that seems to be the more natural permission path for listing a nodes local
disks. For backwards compatibility, the old permission check has to be kept
(relevant with propagate=0).

This API call was originally part of the Ceph API and got copied here later,
which might explain the current permission check.

In the UI, the Disk panel is visible with a node audit permission, but the API
call itself failed without the '/' audit permission.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agod/control: record pve-qemu-kvm | qemu-utils build depenency for tests
Thomas Lamprecht [Tue, 2 Mar 2021 16:20:57 +0000 (17:20 +0100)]
d/control: record pve-qemu-kvm | qemu-utils build depenency for tests

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agodisks: zfs: scan is only returned optionally
Stoiko Ivanov [Thu, 25 Feb 2021 21:23:04 +0000 (22:23 +0100)]
disks: zfs: scan is only returned optionally

the line is not present if a zpool has never been scrubbed before
(e.g. if it's freshly setup)

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
3 years agobump version to 6.3-7
Thomas Lamprecht [Fri, 19 Feb 2021 14:49:27 +0000 (15:49 +0100)]
bump version to 6.3-7

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agostorage migration: insecure: improve logging
Fabian Ebner [Thu, 11 Feb 2021 10:24:13 +0000 (11:24 +0100)]
storage migration: insecure: improve logging

by including the message/error from the remote side. Some people on the forum[0]
ran into 'no tunnel IP received', but without information from the remote side
it's hard to tell why.

[0]: https://forum.proxmox.com/threads/failed-no-tunnel-ip-received.80172

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agoDiskmanage: replace check for zpool binary with a function and mock it
Fabian Ebner [Wed, 10 Feb 2021 10:18:42 +0000 (11:18 +0100)]
Diskmanage: replace check for zpool binary with a function and mock it

so the test still works when it's not installed.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agozpool: activate: move mount check out and make program flow easier
Thomas Lamprecht [Fri, 19 Feb 2021 14:21:16 +0000 (15:21 +0100)]
zpool: activate: move mount check out and make program flow easier

Early return when mounted heuristics returns true, that allows to get
rid of an indentation level.

Moving the heuristic out makes the activate method smaller and easier
to grasp

Best viewed with ignoring whitespace changes (`git show -w`).

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agozpool: activate: don't eval procfs read, if it fails it should be fatal
Thomas Lamprecht [Fri, 19 Feb 2021 14:06:20 +0000 (15:06 +0100)]
zpool: activate: don't eval procfs read, if it fails it should be fatal

highly unlikely to fail in our setups, most realistic case is when
procfs is not mounted at /proc, which breaks much else anyway and is
a requirement

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agozpool: activate: drop intermediate state variable, return directly
Thomas Lamprecht [Fri, 19 Feb 2021 14:04:53 +0000 (15:04 +0100)]
zpool: activate: drop intermediate state variable, return directly

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agozpool: avoid wrong mount-decoding of dataset
Thomas Lamprecht [Fri, 19 Feb 2021 14:01:36 +0000 (15:01 +0100)]
zpool: avoid wrong mount-decoding of dataset

this was mistakenly done as the procfs code uses it and it was
assumed we need to decode this too to get both in the same
encoding-space and thus correct comparission.

But only procfs has that encoding, we don't have it for pool values
in the storage config, so we must not do a decode on that value, that
could potentially break.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agozfspoolplugin: check if imported before importing
Stoiko Ivanov [Fri, 19 Feb 2021 12:45:44 +0000 (13:45 +0100)]
zfspoolplugin: check if imported before importing

This commit is a small performance optimization to the previous one:
`zpool list` is cheaper than `zpool import -d /dev..` (the latter
scans the disks in the provided directory for zfs signatures,
unconditionally)

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
3 years agozfspoolplugin: check if mounted instead of imported
Stoiko Ivanov [Fri, 19 Feb 2021 12:45:43 +0000 (13:45 +0100)]
zfspoolplugin: check if mounted instead of imported

This patch addresses an issue we recently saw on a production machine:
* after booting a ZFS pool failed to get imported (due to an empty
  /etc/zfs/zpool.cache)
* pvestatd/guest-startall eventually tried to import the pool
* the pool was imported, yet the datasets of the pool remained
  not mounted

A bit of debugging showed that `zpool import <poolname>` is not
atomic, in fact it does fork+exec `mount` with appropriate parameters.
If an import ran longer than the hardcoded timeout of 15s, it could
happen that the pool got imported, but the zpool command (and its
forks) got terminated due to timing out.

reproducing this is straight-forward by setting (drastic) bw+iops
limits on a guests' disk (which contains a zpool) - e.g.:
`qm set 100 -scsi1 wd:vm-100-disk-1,iops_rd=10,iops_rd_max=20,\
iops_wr=15,iops_wr_max=20,mbps_rd=10,mbps_rd_max=15,mbps_wr=10,\
mbps_wr_max=15`
afterwards running `timeout 15 zpool import <poolname>` resulted in
that situation in the guest on my machine

The patch changes the check in activate_storage for the ZFSPoolPlugin,
to check if any dataset below the 'pool' (which can also be a sub-dataset)
is mounted by parsing /proc/mounts:
* this is cheaper than running `zfs get` or `zpool list`
* it catches a properly imported and mounted pool in case the
  root-dataset has 'canmount' set to off (or noauto), as long
  as any dataset below is mounted

After trying to import the pool, we also run `zfs mount -a` (in case
another check of /proc/mounts fails).

Potential for regression:
* running `zfs mount -a` is problematic, if a dataset is manually
  umounted after booting (without setting 'canmount')
* a pool without any mounted dataset (no mountpoint property set and
  only zvols) - will result in repeated calls to `zfs mount -a`

both of the above seem unlikely and should not occur, if using our
tooling.

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
3 years agozfspoolplugin: activate_storage: minor cleanup
Stoiko Ivanov [Fri, 19 Feb 2021 12:45:42 +0000 (13:45 +0100)]
zfspoolplugin: activate_storage: minor cleanup

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
3 years agobump version to 6.3-6
Thomas Lamprecht [Tue, 9 Feb 2021 11:14:00 +0000 (12:14 +0100)]
bump version to 6.3-6

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agoNFS: avoid using obsolete rpcinfo option
Fabian Ebner [Thu, 4 Feb 2021 08:04:26 +0000 (09:04 +0100)]
NFS: avoid using obsolete rpcinfo option

as suggested in the man page.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agoDiskmanage: also set type for partitions
Fabian Ebner [Tue, 9 Feb 2021 08:04:32 +0000 (09:04 +0100)]
Diskmanage: also set type for partitions

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agoremove lock from is_base_and_used check
Fabian Ebner [Fri, 15 Jan 2021 10:58:05 +0000 (11:58 +0100)]
remove lock from is_base_and_used check

and squash the __no_lock-variant into it.

This lock is not broad enough, because for a caller that plans to do or not do
some storage operation based on the result of the check, the following could
happen:
1. volume_is_base_and_used is called and the result is used to enter a branch
2. situation on the storage changes in the meantime
3. the branch chosen in 1. might not be the one that should be taken anymore

This means that callers are responsible for locking, and luckily the existing
callers do use their own locks already:
1. vdisk_free used the __no_lock-variant with a broader lock also covering
   the free operation.
2. vdisk_clone is not a caller, but is relevant and it does lock the storage
2. the calls during VM migration and VM destruction happen in the context of a
   locked VM config. Because the clone operation also locks the VM config, it
   cannot happen that a linked clone is created while the template VM is
   migrated away or destroyed or vice versa. And even if that were the case,
   the base disk would not be freed, because of what vdisk_free/vdisk_clone do.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agoDiskmanage: also include partitions with get_disks if flag is set
Fabian Ebner [Tue, 26 Jan 2021 11:45:27 +0000 (12:45 +0100)]
Diskmanage: also include partitions with get_disks if flag is set

and have a parent key for partitions, to be able to see the associated disk in
the result without having to rely on naming heuristics (just adding a number at
the end doesn't work for NVMes).

The disk's usage will not be based on the partitions usage if the flag is set,
but will simply be 'partitions'.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agoDiskmanage: save OSD information for individual partitions
Fabian Ebner [Tue, 26 Jan 2021 11:45:26 +0000 (12:45 +0100)]
Diskmanage: save OSD information for individual partitions

in preparation to including partitions for get_disks()

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agoDiskmanage: introduce ceph info helper
Fabian Ebner [Tue, 26 Jan 2021 11:45:25 +0000 (12:45 +0100)]
Diskmanage: introduce ceph info helper

so it can be re-used for partitions.

Also changes the regular expression in get_ceph_volume_info to match the full
device/partition name the LV is on. Not only is this needed for partitions,
especially if there's multiple partitions with an OSD, but it also fixes
handling NVMe devices with an OSD as a side effect. Previuosly those were not
detected here, because of the digits in the name, e.g. /dev/nvme0n1

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agoDiskmanage: also detect BIOS boot, EFI and ZFS reserved type partitions
Fabian Ebner [Tue, 26 Jan 2021 11:45:24 +0000 (12:45 +0100)]
Diskmanage: also detect BIOS boot, EFI and ZFS reserved type partitions

as they are relevant to most PVE setups.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agoDiskmanage: introduce usage helper
Fabian Ebner [Tue, 26 Jan 2021 11:45:23 +0000 (12:45 +0100)]
Diskmanage: introduce usage helper

Note that this is a slight behavior change, because now the first
partition's usage which is not simply 'partition' will become the disk's
usage. Previously, if any partition was 'mounted', it would become the disk's
usage, then 'LVM', 'ZFS', etc.

A partitions usage defaults to 'partition' if nothing more specific can be
found, and is never treated as unused for now.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agoDiskmanage: collect partitions in hash
Fabian Ebner [Tue, 26 Jan 2021 11:45:22 +0000 (12:45 +0100)]
Diskmanage: collect partitions in hash

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agoDiskmanage: introduce get_sysdir_size helper
Fabian Ebner [Tue, 26 Jan 2021 11:45:21 +0000 (12:45 +0100)]
Diskmanage: introduce get_sysdir_size helper

to be used for partitions as well.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agoDiskmanage: also check for filesystem type when determining usage
Fabian Ebner [Tue, 26 Jan 2021 11:45:20 +0000 (12:45 +0100)]
Diskmanage: also check for filesystem type when determining usage

Like this, a non-ZFS filesystem living on a whole disk will also be detected
when it is not mounted.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agoDiskmanage: refactor and rename get_parttype_info
Fabian Ebner [Tue, 26 Jan 2021 11:45:19 +0000 (12:45 +0100)]
Diskmanage: refactor and rename get_parttype_info

in preparation to also query the file system type from lsblk. Note that the
result now also includes devices without a parttype, so a definedness check in
get_devices_by_partuuid is needed. This will be useful when the whole device
contains a filesystem.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agoDiskmanage: replace closure with direct hash access
Fabian Ebner [Tue, 26 Jan 2021 11:45:18 +0000 (12:45 +0100)]
Diskmanage: replace closure with direct hash access

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agoDisks: return correct journal disk candidates
Fabian Ebner [Tue, 26 Jan 2021 11:45:17 +0000 (12:45 +0100)]
Disks: return correct journal disk candidates

Previously any GPT initialized disk without an osdid (i.e. equal to -1) would
be included in the list of journal disk candidates, for example a ZFS disk. But
the OSD creation API call will fail for those. To fix it, re-use the condition
from the corresponding check in that API call (in PVE/API2/Ceph/OSD.pm).
Now, included disks are unused disks, those with usage 'partitions' and GPT, and
those with usage 'LVM'.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agoapi: storage/config: use extract_sensitive_params from tools
Dominik Csapak [Wed, 2 Dec 2020 09:21:05 +0000 (10:21 +0100)]
api: storage/config: use extract_sensitive_params from tools

we have a more general version there

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
3 years agomark PBS storages as shared
Fabian Ebner [Wed, 27 Jan 2021 12:57:36 +0000 (13:57 +0100)]
mark PBS storages as shared

Like this, the property will get added when parsing the storage configuration
and PBS storages will correctly show up as shared storages in API results.

AFAICT the only affected PBS operation is free_image via vdisk_free, which will
now be protected by a cluster-wide lock, and that shouldn't hurt.

Another issue this fixes, which is the reason this patch exists, was reported
in the forum[0]. The free space from PBS storages was counted once for each node
that had access to the storage.

[0]: https://forum.proxmox.com/threads/pve-6-3-the-storage-size-was-displayed-incorrectly.83136/

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agolvm: Fix #3159: Show RAID LVs as storage content
Dominic Jäger [Wed, 13 Jan 2021 12:19:54 +0000 (13:19 +0100)]
lvm: Fix #3159: Show RAID LVs as storage content

LVM RAID logical volumes (including mirrors) can be valid disk images, so they
should show up in storage content listings (for example pvesm list).

Including LV types is safer than excluding, especially because of possible
additional types in the future.

Co-developed-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
Signed-off-by: Dominic Jäger <d.jaeger@proxmox.com>
3 years agofix: check connection for nfs v4 only server
Alwin Antreich [Wed, 16 Dec 2020 11:59:04 +0000 (12:59 +0100)]
fix: check connection for nfs v4 only server

the check_connection is done by querying the exports of the nfs server
in question. With nfs v4 those exports aren't listed anymore since nfs
v4 employs a pseudo-filesystem starting from root (/).

rpcinfo allows to query the existence of an nfs v4 service.

Signed-off-by: Alwin Antreich <a.antreich@proxmox.com>
3 years agobump version to 6.3-5
Thomas Lamprecht [Tue, 26 Jan 2021 17:37:38 +0000 (18:37 +0100)]
bump version to 6.3-5

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agoadd workaround for zfs rollback bug
Dominik Csapak [Thu, 21 Jan 2021 15:47:59 +0000 (16:47 +0100)]
add workaround for zfs rollback bug

as described in the zfs bug https://github.com/openzfs/zfs/issues/10931
the kernel keeps around cached data from mmaps after a rollback, thus
having invalid data in files that were allegedly rolled back

to workaround this (until a real fix comes along), we unmount the subvol,
invalidating the kernel cache anyway

the dataset gets mounted on the next 'activate_volume' again

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
3 years agodrop absolute udevadm path
Fabian Grünbichler [Mon, 25 Jan 2021 08:10:38 +0000 (09:10 +0100)]
drop absolute udevadm path

the compat symlink from bin to sbin has been dropped with bullseye, and
we rely on PATH begin set properly in our daemons/CLI tools anyway..

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
3 years agodebian/control: use https in homepage link
Thomas Lamprecht [Tue, 26 Jan 2021 13:04:15 +0000 (14:04 +0100)]
debian/control: use https in homepage link

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agoDiskmanage: extend wearout detection for SAS disk
Dominik Csapak [Fri, 11 Dec 2020 13:52:41 +0000 (14:52 +0100)]
Diskmanage: extend wearout detection for SAS disk

for some controllers/disks there the line is
Percentage used endurance indicator: x%

so extend the regex for that possibilty.
We even had a test-case for SAS but did not notice we could extract
that info from there...

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
3 years agotests: add ssd sas disk
Dominik Csapak [Fri, 11 Dec 2020 13:52:40 +0000 (14:52 +0100)]
tests: add ssd sas disk

copied from test 'sas' with rotational set to 0
this has then the type 'ssd', rpm: 0, and health: 'OK'

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
3 years agofix #3199: by fixing usage of strftime
Fabian Ebner [Tue, 15 Dec 2020 10:59:29 +0000 (11:59 +0100)]
fix #3199: by fixing usage of strftime

In a very early version I wanted to parse the date from the backup
name, and when switching to using the ctime and localtime() instead,
I forgot to update the usage of strftime.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agodrbd: comment that the builtin plugin is depreacated
Thomas Lamprecht [Tue, 15 Dec 2020 11:58:20 +0000 (12:58 +0100)]
drbd: comment that the builtin plugin is depreacated

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agod/control: update
Thomas Lamprecht [Mon, 14 Dec 2020 20:58:24 +0000 (21:58 +0100)]
d/control: update

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agod/compat: update to 10
Thomas Lamprecht [Mon, 14 Dec 2020 20:53:13 +0000 (21:53 +0100)]
d/compat: update to 10

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agobump version to 6.3-4
Thomas Lamprecht [Mon, 14 Dec 2020 15:15:07 +0000 (16:15 +0100)]
bump version to 6.3-4

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agoprune mark: correctly keep track of already included backups
Fabian Ebner [Mon, 14 Dec 2020 15:03:17 +0000 (15:03 +0000)]
prune mark: correctly keep track of already included backups

This needs to happen in a separate loop, because some time intervals are not
subsets of others, i.e. weeks and months. Previously, with a daily backup
schedule, having:
* a backup on Sun, 06 Dec 2020 kept by keep-daily
* a backup on Sun, 29 Nov 2020 kept by keep-weekly
would lead to the backup on Mon, 30 Nov 2020 to be selected for keep-monthly,
because the iteration did not yet reach the backup on Sun, 29 Nov 2020 that
would mark November as being covered.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
3 years agonfs and cifs: implement backup notes helper
Thomas Lamprecht [Mon, 7 Dec 2020 15:13:04 +0000 (16:13 +0100)]
nfs and cifs: implement backup notes helper

reuse the one from DirPlugin by directing the call to it, but with
the actual $class. This should stay stable, as we provide an ABI and
try to always use $class->helpers.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agoapi: content/backup: handle deletion of notes
Thomas Lamprecht [Mon, 7 Dec 2020 15:10:07 +0000 (16:10 +0100)]
api: content/backup: handle deletion of notes

Previous to this we did not called the plugins update_volume_notes at
all in the case where a user delted the textarea, which results to
passing a falsy value ('').

Also adapt the currently sole implementation to delete the notes field
in the undef or '' value case. This can be done safely, as we default
to returning an empty string if no notes file exists.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agodir plugin: code cleanup
Thomas Lamprecht [Mon, 7 Dec 2020 15:07:36 +0000 (16:07 +0100)]
dir plugin: code cleanup

mostly re-ordering to improve statement grouping and avoiding the
need for an intermediate variable

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agobump version to 6.3-3
Thomas Lamprecht [Thu, 3 Dec 2020 16:24:59 +0000 (17:24 +0100)]
bump version to 6.3-3

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agod/control: bump versioned dependency for libpve-common-perl
Thomas Lamprecht [Thu, 3 Dec 2020 15:55:23 +0000 (16:55 +0100)]
d/control: bump versioned dependency for libpve-common-perl

so the new get_repository helper for PBS is available

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agoPBSPlugin: use get_repository from PVE::PBSClient
Dominik Csapak [Thu, 3 Dec 2020 11:43:39 +0000 (12:43 +0100)]
PBSPlugin: use get_repository from PVE::PBSClient

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
3 years agopbs: fix token auth with PVE::APIClient
Wolfgang Bumiller [Thu, 3 Dec 2020 13:03:43 +0000 (14:03 +0100)]
pbs: fix token auth with PVE::APIClient

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
3 years agoapi: scan: note that USB is depreacated
Thomas Lamprecht [Wed, 2 Dec 2020 10:31:03 +0000 (11:31 +0100)]
api: scan: note that USB is depreacated

It now got moved in /nodes/<node>/hardware/usb as envisioned[0], this
allows to sunset the usb scan API endpoint here and drop it with 7.0

[0]: https://lists.proxmox.com/pipermail/pve-devel/2018-November/034694.html

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agobump version to 6.3-2
Thomas Lamprecht [Tue, 1 Dec 2020 18:27:54 +0000 (19:27 +0100)]
bump version to 6.3-2

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agoapi/cli: add pbs scan endpoint and command
Thomas Lamprecht [Tue, 1 Dec 2020 18:21:43 +0000 (19:21 +0100)]
api/cli: add pbs scan endpoint and command

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agopvesm: also map the password param for new style cifs scan command
Thomas Lamprecht [Tue, 1 Dec 2020 18:20:44 +0000 (19:20 +0100)]
pvesm: also map the password param for new style cifs scan command

not only for the old deprecated alias

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agoapi: scan: move over index and usb scan from manager
Thomas Lamprecht [Tue, 1 Dec 2020 16:48:21 +0000 (17:48 +0100)]
api: scan: move over index and usb scan from manager

Add the missing pieces allowing pve-manager to just point the
/nodes/<node>/scan api directory at this module, dropping it's
duplicated copy.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agoapi: scan cifs: port over NT_STATUS filter from pve-manager
Thomas Lamprecht [Tue, 1 Dec 2020 17:08:58 +0000 (18:08 +0100)]
api: scan cifs: port over NT_STATUS filter from pve-manager

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agofactor out scan CLI definition to real API module
Thomas Lamprecht [Tue, 1 Dec 2020 16:15:35 +0000 (17:15 +0100)]
factor out scan CLI definition to real API module

we have a 1:1 copy of that code in pve-manager's PVE::API2::Scan,
which we can avoid by using a common module form pvesm CLI and the
API.

This is the first basic step of dropping the code duplication in
pve-manager.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agopbs: activate storage: fully validate if storage config works
Thomas Lamprecht [Tue, 1 Dec 2020 18:18:05 +0000 (19:18 +0100)]
pbs: activate storage: fully validate if storage config works

improves UX of on_update and on_add hooks *a lot*.

This is a bit more expensive than the TCP ping, or even just an
unauthenticated ping, but not as bad as a full datastore status - as
this only reads the datastore config file (which is normally in page
cache anyway).

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agopbs: add scan datastore helper
Thomas Lamprecht [Tue, 1 Dec 2020 18:15:49 +0000 (19:15 +0100)]
pbs: add scan datastore helper

for use in both, the scan API and the on_add/on_update hooks

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agopbs: reuse pve apiclient for api connect helper
Thomas Lamprecht [Tue, 1 Dec 2020 08:53:38 +0000 (09:53 +0100)]
pbs: reuse pve apiclient for api connect helper

it is flexible enough to easily do so, and should do well until we
actually have cheap native bindings (e.g., through wolfgangs rust
permlod magic).

Make it a private helper, we do *not* want to expose it directly for
now.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agoplugin: hooks: add explicit returns
Fabian Ebner [Fri, 27 Nov 2020 09:35:44 +0000 (10:35 +0100)]
plugin: hooks: add explicit returns

to avoid returning something unexpected. Finish what
afeda182566292be15413d9b874720876eac14c9 already started for all the other
plugins. At least for ZFS's on_add_hook this is necessary (adding a ZFS storage
currently fails as reported here [0]), but it cannot hurt
in the other places either as the only hooks we expect to return something
currently are PBS's on_add_hook and on_update_hook.

[0]: https://forum.proxmox.com/threads/gui-add-zfs-storage-verification-failed-400-config-type-check-object-failed.79734/

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>