From c06bee965f14607c3a792ecd670e7c336ddca217 Mon Sep 17 00:00:00 2001 From: Guillaume Abrioux Date: Thu, 5 Feb 2026 15:34:26 +0000 Subject: [PATCH] ceph-volume: include LVM mapper devices in get_devices() MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit `ceph-volume inventory --list-all` doesn't include LVs devices: ``` NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS vda 253:0 0 61G 0 disk └─vda1 253:1 0 61G 0 part /etc/ceph/ceph.keyring /etc/ceph/ceph.conf /run/podman-init /rootfs/var/lib/containers/storage/overlay /rootfs vdb 253:16 0 200G 0 disk vdc 253:32 0 200G 0 disk vdd 253:48 0 200G 0 disk vde 253:64 0 200G 0 disk vdf 253:80 0 200G 0 disk vdg 253:96 0 200G 0 disk vdh 253:112 0 200G 0 disk vdi 253:128 0 200G 0 disk vdj 253:144 0 200G 0 disk vdk 253:160 0 200G 0 disk └─vg_test-lv1 252:0 0 200G 0 lvm Device Path Size Device nodes rotates available Model name /dev/vdb 200.00 GB vdb True True /dev/vdc 200.00 GB vdc True True /dev/vdd 200.00 GB vdd True True /dev/vde 200.00 GB vde True True /dev/vdf 200.00 GB vdf True True /dev/vdg 200.00 GB vdg True True /dev/vdh 200.00 GB vdh True True /dev/vdi 200.00 GB vdi True True /dev/vdj 200.00 GB vdj True True /dev/vda 61.00 GB vda True False /dev/vda1 61.00 GB vda False False /dev/vdk 200.00 GB vdk True False ``` This commit removes the UdevData(diskname).is_lvm check so LVs devices are no longer skipped when listing devices. ``` Device Path Size Device nodes rotates available Model name /dev/vdb 200.00 GB vdb True True /dev/vdc 200.00 GB vdc True True /dev/vdd 200.00 GB vdd True True /dev/vde 200.00 GB vde True True /dev/vdf 200.00 GB vdf True True /dev/vdg 200.00 GB vdg True True /dev/vdh 200.00 GB vdh True True /dev/vdi 200.00 GB vdi True True /dev/vdj 200.00 GB vdj True True /dev/vda 61.00 GB vda True False /dev/vda1 61.00 GB vda False False /dev/vdk 200.00 GB vdk True False /dev/vg_test/lv1 200.00 GB vdk True False ``` Fixes: https://tracker.ceph.com/issues/74775 Signed-off-by: Guillaume Abrioux --- .../ceph_volume/tests/util/test_disk.py | 22 +++++++++++++++++++ src/ceph-volume/ceph_volume/util/disk.py | 8 ------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/ceph-volume/ceph_volume/tests/util/test_disk.py b/src/ceph-volume/ceph_volume/tests/util/test_disk.py index 6abe8571b4e..68eb944a34c 100644 --- a/src/ceph-volume/ceph_volume/tests/util/test_disk.py +++ b/src/ceph-volume/ceph_volume/tests/util/test_disk.py @@ -344,6 +344,28 @@ class TestGetDevices(object): result = disk.get_devices() assert result[sda_path]['actuators'] == fake_actuator_nb + def test_lvm_device_is_included(self, patched_get_block_devs_sysfs, fake_filesystem): + lv_path = '/dev/vg_test/lv1' + dm_path = '/dev/dm-0' + mapper_path = '/dev/mapper/vg_test-lv1' + patched_get_block_devs_sysfs.return_value = [ + [dm_path, mapper_path, 'lvm', dm_path] + ] + fake_filesystem.create_dir('/sys/block/dm-0/slaves') + fake_filesystem.create_dir('/sys/block/dm-0/queue') + fake_filesystem.create_file('/sys/block/dm-0/size', contents='204800') + fake_filesystem.create_file('/sys/block/dm-0/queue/rotational', contents='1') + fake_filesystem.create_file('/sys/block/dm-0/queue/hw_sector_size', contents='512') + with patch("ceph_volume.util.disk.UdevData") as MockUdevData: + mock_instance = MagicMock() + mock_instance.slashed_path = lv_path + mock_instance.environment = {} + MockUdevData.return_value = mock_instance + result = disk.get_devices() + assert lv_path in result + assert result[lv_path]['type'] == 'lvm' + assert result[lv_path]['human_readable_size'] == '100.00 MB' + class TestSizeCalculations(object): diff --git a/src/ceph-volume/ceph_volume/util/disk.py b/src/ceph-volume/ceph_volume/util/disk.py index 31b35bb566d..d8871a17437 100644 --- a/src/ceph-volume/ceph_volume/util/disk.py +++ b/src/ceph-volume/ceph_volume/util/disk.py @@ -800,14 +800,6 @@ def get_devices(_sys_block_path='/sys/block', device=''): if is_ceph_rbd(diskname): continue - # If the mapper device is a logical volume it gets excluded - try: - if UdevData(diskname).is_lvm: - continue - except RuntimeError: - logger.debug("get_devices(): device {} couldn't be found.".format(diskname)) - continue - # all facts that have no defaults # (, ) facts = [('removable', 'removable'), -- 2.47.3