[pve-devel] [PATCH v2 storage 05/10] rbd plugin: implement volume import/export

Daniel Kral d.kral at proxmox.com
Wed Dec 18 15:20:02 CET 2024


On 12/17/24 16:48, Fiona Ebner wrote:
> [ ... ]
> +
> +    die "volume export format $format not available for $class\n" if $format ne 'raw+size';
> +    die "cannot export volumes together with their snapshots in $class\n" if $with_snapshots;
> +    die "cannot export an incremental stream in $class\n" if defined($base_snapshot);
> +
> +    my $file = $class->map_volume($storeid, $scfg, $volname, $snapshot);
> +    eval {
> +

nit: unnecessary newline

> +	my $size;
> +	# should be faster than querying RBD, also checks for the device file's availability
> +	run_command(['/sbin/blockdev', '--getsize64', $file], outfunc => sub {
> +	    my ($line) = @_;
> +	    die "unexpected output from /sbin/blockdev: $line\n" if $line !~ /^(\d+)$/;
> +	    $size = int($1);
> +	});
> [ ... ]
> +
> +    die "volume import format $format not available for $class\n" if $format ne 'raw+size';
> +    die "cannot import volumes together with their snapshots in $class\n" if $with_snapshots;
> +    die "cannot import an incremental stream in $class\n" if defined($base_snapshot);
> +
> +    my (undef, $name, $vmid, undef, undef, undef, $file_format) = $class->parse_volname($volname);

nit: is there any downside to

`my ($name, $vmid, $format) = ($class->parse_volname($volname))[1,2,6];`

> +    die "cannot import format $format into a volume of format $file_format\n"
> +	if $file_format ne 'raw';
> [ ... ]

Besides the two minor remarks, the `volume_{import,export}{,_formats}` 
subs look good to me (wrt. the LVMPlugin implementation it is based on). 
In the future it would probably be nice to factor out some common logic 
between the RBD, LVM and (now) ISCSI storage plugin.

With respect to patch #2, #4, #5, #8, #9, #10 and the followup patch #1 
from [0], I've tested the manual exports, manual imports and remote 
migrations of VMs and container with rbd storages.

- When exporting with "pvesm export ... --with-snapshots 1" I get an 
expected error
- When exporting with any format besides "raw+size" I get an expected error
- When exporting with "pvesm export ... --snapshot <snapshot>" the 
volume is correctly mapped and exported
- When exporting with "pvesm export ...", the volume has the same 
checksum as with "rbd export ..." with the size header prepended
- When importing with "--allow-rename" the volume is correctly renamed
- Remote migration works for VMs with `qm remote-migrate ...` from RBD 
to directory storage (ext4, xfs) and lvm
- Remote migration works for container with `pct remote-migrate ...` 
(after also applying patch #1 from the follow up) from RBD to directory 
storage (ext4, xfs) and lvm

I checked the integrity of the volumes with `md5sum` and if they boot up 
fine. The only thing that I noticed - which is probably unrelated to 
this patch series - is that VMs as well as container have "migrate" 
locks after successful remote migrations (the lock is removed if I kill 
the migration during the process). From the log output alone it seems 
that the local VM/CT is never unlocked, only the one on the remote.

I also tested importing the volumes with `pvesm import ...`, which I had 
exported before with `pvesm export ...`, which worked just as expected.

Consider this patch as:

Reviewed-by: Daniel Kral <d.kral at proxmox.com>
Tested-by: Daniel Kral <d.kral at proxmox.com>




More information about the pve-devel mailing list