diff --git a/PVE/API2/Disks/ZFS.pm b/PVE/API2/Disks/ZFS.pm index 551f21a..7a633a7 100644 --- a/PVE/API2/Disks/ZFS.pm +++ b/PVE/API2/Disks/ZFS.pm @@ -343,6 +343,9 @@ __PACKAGE__->register_method ({ foreach my $dev (@$devs) { $dev = PVE::Diskmanage::verify_blockdev_path($dev); PVE::Diskmanage::assert_disk_unused($dev); + my $sysfsdev = $dev =~ s!^/dev/!/sys/block/!r; + my $udevinfo = PVE::Diskmanage::get_udev_info($sysfsdev); + $dev = $udevinfo->{by_id_link} if defined($udevinfo->{by_id_link}); } PVE::Storage::assert_sid_unused($name) if $param->{add_storage}; diff --git a/PVE/Diskmanage.pm b/PVE/Diskmanage.pm index cac944d..267da08 100644 --- a/PVE/Diskmanage.pm +++ b/PVE/Diskmanage.pm @@ -359,6 +359,11 @@ sub get_udev_info { $data->{wwn} = $1; } + if ($info =~ m/^E: DEVLINKS=(.+)$/m) { + my @devlinks = grep(m#^/dev/disk/by-id/(ata|scsi|nvme(?!-eui))#, split (/ /, $1)); + $data->{by_id_link} = $devlinks[0] if defined($devlinks[0]); + } + return $data; } @@ -584,6 +589,9 @@ sub get_disks { wearout => $wearout, }; + my $by_id_link = $data->{by_id_link}; + $disklist->{$dev}->{by_id_link} = $by_id_link if defined($by_id_link); + my $osdid = -1; my $bluestore = 0; my $osdencrypted = 0; diff --git a/test/disk_tests/sas/disklist_expected.json b/test/disk_tests/sas/disklist_expected.json index 7814765..39b14a5 100644 --- a/test/disk_tests/sas/disklist_expected.json +++ b/test/disk_tests/sas/disklist_expected.json @@ -11,6 +11,7 @@ "rpm" : -1, "size" : 5120000, "serial" : "SER2", - "wearout" : "N/A" + "wearout" : "N/A", + "by_id_link" : "/dev/disk/by-id/scsi-00000000000000000" } }