5
0
mirror of git://git.proxmox.com/git/pve-storage.git synced 2024-12-23 17:34:34 +03:00

fix #2777 create zpools with stable dev paths

when compiling the disk list add a property with a stable
/dev/disk/by-id/ path for a block device when available.

This is needed to create zpools with the stable by-id links

The /dev/disk/by-id/ directory can contain multiple links to the same device
(e.g. when it's used as a LVM PV, or one for the wwn/nvme-eui in addition
to the one with vendor and serial). We take the first one which matches
the bus where the disk is attached. For nvme disks we exclude the one
containing the nvme-eui.

The patch assumes that not all disks need to have such a link (e.g.
virtio-block devices as we pass them to guests).

Additionally the tests were adapted to run successfully.

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
This commit is contained in:
Stoiko Ivanov 2020-06-05 15:24:56 +02:00 committed by Thomas Lamprecht
parent 8b4c2a7ec6
commit 0f0d99a3e5
3 changed files with 13 additions and 1 deletions

View File

@ -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};

View File

@ -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;

View File

@ -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"
}
}