Error on starting the device:
  error : virStorageBackendLogicalMatchPoolSource:692 : unsupported 
configuration: cannot find any matching source devices for logical volume group 
'testpool1'

That error from the log matches the error in the UI of virsh.

The reason is that even thou it was defined by-path the lvm toolchain
has stored it as /dev/vdd and /dev/vdc

$ sudo /sbin/pvs --noheadings -o pv_name,vg_name
  /dev/vdc   testpool1
  /dev/vdd   testpool2

That is exactly the command it uses to build a list of existing VGs and then it 
looks for.
It finds the pool and then will check for the sources that are registered.

 666     /* If the pool has defined source device(s), then let's make sure      
      
 667      * they match as well; otherwise, matching can only occur on the       
      
 668      * pool's name.                                                        
      
 669      */                                                                    
      
 670    if (!def->source.ndevice) {                                             
      
 671         ret = true;                                                        
      
 672         goto cleanup;                                                      
      
 673     }                                                                      
      
 674                                                                            
      
 675     /* Let's make sure the pool's device(s) match what the pvs output has  
      
 676      * for volume group devices.                                           
      
 677      */                                                                    
      
 678     for (i = 0; i < def->source.ndevice; i++) {                            
      
 679         for (j = 0; j < thisSource->ndevice; j++) {                        
      
 680             if (STREQ(def->source.devices[i].path,                         
      
 681                       thisSource->devices[j].path))                        
      
 682                 matchcount++;                                              
      
 683         }                                                                  
      
 684     }                                                                      
      
 685                                                                            
      
 686     /* If we didn't find any matches, then this pool has listed (a) source 
      
 687      * device path(s) that don't/doesn't match what was created for the 
pool     
 688      */                                                                    
      
 689     if (matchcount == 0) { 

Since this will not match as above output has stored it as /dev/vdd it
cann't find it and will hit the issue described here.

Commands from the pool-build run:
 /sbin/pvcreate /dev/disk/by-path/virtio-pci-0000:00:07.0
 /sbin/vgcreate testpool1 /dev/disk/by-path/virtio-pci-0000:00:07.0

I cleared the vg/lv/pv configuration from my disks and did the same without any 
libvirt in play.
ubuntu@cosmic-storage-pools:~$ sudo /sbin/pvcreate 
/dev/disk/by-path/virtio-pci-0000:00:07.0
  Physical volume "/dev/disk/by-path/virtio-pci-0000:00:07.0" successfully 
created.
ubuntu@cosmic-storage-pools:~$ sudo /sbin/vgcreate testpool1 
/dev/disk/by-path/virtio-pci-0000:00:07.0
  Volume group "testpool1" successfully created
ubuntu@cosmic-storage-pools:~$ sudo vgdisplay 
  --- Volume group ---
  VG Name               testpool1
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               28.00 MiB
  PE Size               4.00 MiB
  Total PE              7
  Alloc PE / Size       0 / 0   
  Free  PE / Size       7 / 28.00 MiB
  VG UUID               0P3X39-nzR0-OtOP-3sts-W3oz-N5z6-tezzgA
   
ubuntu@cosmic-storage-pools:~$ sudo pvdisplay 
  --- Physical volume ---
  PV Name               /dev/vdc
  VG Name               testpool1
  PV Size               30.00 MiB / not usable 2.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              7
  Free PE               7
  Allocated PE          0
  PV UUID               UstNOO-rYvf-9RDP-2Kfz-laI9-cMTr-5VSr16
   
ubuntu@cosmic-storage-pools:~$ sudo /sbin/pvs --noheadings -o pv_name,vg_name
  /dev/vdc   testpool1


As you can see already lvm tools do the remapping from by-path and store the 
current raw device path - there is not much libvirt can do about it.

We have to consider if it is an lvm2 issue thou - I'll re-tag the bug
here.

@Jan - could you add a link to the upstream Mailing list discussion you
referred please?

** Also affects: lvm2 (Ubuntu)
   Importance: Undecided
       Status: New

** Changed in: libvirt (Ubuntu)
       Status: Confirmed => Invalid

** Description changed:

+ lvm2 tools do not store by-path values in their config.
+ That can drive scripts/tools (like the libvirt case here) mad.
+ Simplified example:
+ 
+ $ sudo /sbin/pvcreate /dev/disk/by-path/virtio-pci-0000:00:07.0
+ $ sudo /sbin/pvs --noheadings -o pv_name,vg_name
+   /dev/vdc
+ 
+ It is NOT using /dev/disk/by-path/virtio-pci-0000:00:07.0 as instructed,
+ but instead did the mapping to /dev/vdd and keeps that from now on.
+ 
+ I know that "inside" lvm all that is done via metadata and it won't matter.
+ But tools around it get confused.
+ Not sure yet if it is a real issue, or just "works as designed".
+ 
+ 
+ --- started as libvirt issue - keeping old desc below ---
+ 
  I am trying to create a logical volume storage pool with persistent
  device names for the block devices, because I can't/don't want to ensure
  that /dev/sd* names are persistent through reboots.
  
  virsh # pool-define-as web2067 logical - -
  /dev/disk/by-path/pci-0000:18:00.0-scsi-0:2:2:0  web2067 /dev/web2067
  virsh # pool-build web2067
  
  These two steps work as expected and the pv and the vg get created, but
  when I try to start the pool I get the following error:
  
  virsh # pool-start web2067
  error: Failed to start pool web2067
  error: unsupported configuration: cannot find any matching source
  devices for logical volume group 'web2067'
  
  If I do the same steps just with /dev/sdX instead of
  /dev/disk/by-path/..., the pool gets created correctly.
  
- According to the libvirt mailing list /dev and /dev/disk/by-path are 
+ According to the libvirt mailing list /dev and /dev/disk/by-path are
  supposed to work the same way.

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to lvm2 in Ubuntu.
https://bugs.launchpad.net/bugs/1801918

Title:
  storage pool with persistent device names fails

Status in libvirt package in Ubuntu:
  Invalid
Status in lvm2 package in Ubuntu:
  New

Bug description:
  lvm2 tools do not store by-path values in their config.
  That can drive scripts/tools (like the libvirt case here) mad.
  Simplified example:

  $ sudo /sbin/pvcreate /dev/disk/by-path/virtio-pci-0000:00:07.0
  $ sudo /sbin/pvs --noheadings -o pv_name,vg_name
    /dev/vdc

  It is NOT using /dev/disk/by-path/virtio-pci-0000:00:07.0 as
  instructed, but instead did the mapping to /dev/vdd and keeps that
  from now on.

  I know that "inside" lvm all that is done via metadata and it won't matter.
  But tools around it get confused.
  Not sure yet if it is a real issue, or just "works as designed".

  
  --- started as libvirt issue - keeping old desc below ---

  I am trying to create a logical volume storage pool with persistent
  device names for the block devices, because I can't/don't want to ensure
  that /dev/sd* names are persistent through reboots.

  virsh # pool-define-as web2067 logical - -
  /dev/disk/by-path/pci-0000:18:00.0-scsi-0:2:2:0  web2067 /dev/web2067
  virsh # pool-build web2067

  These two steps work as expected and the pv and the vg get created, but
  when I try to start the pool I get the following error:

  virsh # pool-start web2067
  error: Failed to start pool web2067
  error: unsupported configuration: cannot find any matching source
  devices for logical volume group 'web2067'

  If I do the same steps just with /dev/sdX instead of
  /dev/disk/by-path/..., the pool gets created correctly.

  According to the libvirt mailing list /dev and /dev/disk/by-path are
  supposed to work the same way.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1801918/+subscriptions

-- 
Mailing list: https://launchpad.net/~touch-packages
Post to     : touch-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~touch-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to