[pve-devel] applied: [PATCH qemu-server] fix #2120: use hosts initiator name with qemu-img
Thomas Lamprecht
t.lamprecht at proxmox.com
Thu Mar 7 16:02:13 CET 2019
On 3/7/19 1:43 PM, Dominik Csapak wrote:
> qemu-img uses the qemu default initiator name 'iqn.2008-11.org.linux-kvm'
> since we use the one of the host (/etc/iscsi/initiatorname.iscsi) when
> using it with a running vm, we want to using it also when moving a disk
> with qemu-img
>
> to do that we have give qemu-img the image in as a full option string
>
> this fixes the issue that we could not move an zfs-over-iscsi disk
> without allowing the default qemu initiator
applied, thanks!
>
> Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
> ---
> PVE/QemuServer.pm | 40 ++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 38 insertions(+), 2 deletions(-)
>
> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
> index 5efb584..546b22e 100644
> --- a/PVE/QemuServer.pm
> +++ b/PVE/QemuServer.pm
> @@ -6540,6 +6540,23 @@ sub template_create {
> });
> }
>
> +sub convert_iscsi_path {
> + my ($path) = @_;
> +
> + if ($path =~ m|^iscsi://([^/]+)/([^/]+)/(.+)$|) {
> + my $portal = $1;
> + my $target = $2;
> + my $lun = $3;
> +
> + my $initiator_name = get_initiator_name();
> +
> + return "file.driver=iscsi,file.transport=tcp,file.initiator-name=$initiator_name,".
> + "file.portal=$portal,file.target=$target,file.lun=$lun,driver=raw";
> + }
> +
> + die "cannot convert iscsi path '$path', unkown format\n";
> +}
> +
> sub qemu_img_convert {
> my ($src_volid, $dst_volid, $size, $snapname, $is_zero_initialized) = @_;
>
> @@ -6560,13 +6577,32 @@ sub qemu_img_convert {
> my $src_path = PVE::Storage::path($storecfg, $src_volid, $snapname);
> my $dst_path = PVE::Storage::path($storecfg, $dst_volid);
>
> + my $src_is_iscsi = ($src_path =~ m|^iscsi://|);
> + my $dst_is_iscsi = ($dst_path =~ m|^iscsi://|);
> +
> my $cmd = [];
> push @$cmd, '/usr/bin/qemu-img', 'convert', '-p', '-n';
> push @$cmd, '-l', "snapshot.name=$snapname" if($snapname && $src_format eq "qcow2");
> push @$cmd, '-t', 'none' if $dst_scfg->{type} eq 'zfspool';
> push @$cmd, '-T', 'none' if $src_scfg->{type} eq 'zfspool';
> - push @$cmd, '-f', $src_format, '-O', $dst_format, $src_path;
> - if ($is_zero_initialized) {
> +
> + if ($src_is_iscsi) {
> + push @$cmd, '--image-opts';
> + $src_path = convert_iscsi_path($src_path);
> + } else {
> + push @$cmd, '-f', $src_format;
> + }
> +
> + if ($dst_is_iscsi) {
> + push @$cmd, '--target-image-opts';
> + $dst_path = convert_iscsi_path($dst_path);
> + } else {
> + push @$cmd, '-O', $dst_format;
> + }
> +
> + push @$cmd, $src_path;
> +
> + if (!$dst_is_iscsi && $is_zero_initialized) {
> push @$cmd, "zeroinit:$dst_path";
> } else {
> push @$cmd, $dst_path;
>
More information about the pve-devel
mailing list