]> git.proxmox.com Git - pve-storage.git/blobdiff - PVE/Diskmanage.pm
Fix #2020: use /sys to map nvmeXnY to nvmeX
[pve-storage.git] / PVE / Diskmanage.pm
index def0791d720ba5d3430a0a8d31465e703b72fe64..854f0a5bfa43bb84153197c52abaae31c17c3597 100644 (file)
@@ -79,8 +79,11 @@ sub get_smart_data {
 
     my $returncode = 0;
 
-    $disk =~ s/n\d+$//
-        if $disk =~ m!^/dev/nvme\d+n\d+$!;
+    if ($disk =~ m!^/dev/(nvme\d+n\d+)$!) {
+       my $info = get_sysdir_info("/sys/block/$1");
+       $disk = "/dev/".($info->{device}
+           or die "failed to get nvme controller device for $disk\n");
+    }
 
     my $cmd = [$SMARTCTL, '-H'];
     push @$cmd, '-A', '-f', 'brief' if !$healthonly;
@@ -306,6 +309,11 @@ sub get_sysdir_info {
     $data->{vendor} = file_read_firstline("$sysdir/device/vendor") || 'unknown';
     $data->{model} = file_read_firstline("$sysdir/device/model") || 'unknown';
 
+    if (defined(my $device = readlink("$sysdir/device"))) {
+       # strip directory and untaint:
+       ($data->{device}) = $device =~ m!([^/]+)$!;
+    }
+
     return $data;
 }