Add get_loop_devices() (#2698)

This commit is contained in:
codefiles 2024-09-25 09:02:51 -04:00 committed by GitHub
parent 8e9b1bc727
commit 8db3c7d65d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 26 additions and 9 deletions

View File

@ -10,7 +10,7 @@ from typing import List, Dict, Any, Optional, TYPE_CHECKING, Literal, Iterable
from parted import (
Disk, Geometry, FileSystem,
PartitionException, DiskException,
PartitionException, DiskException, IOException,
getDevice, getAllDevices, newDisk, freshDisk, Partition, Device
)
@ -50,14 +50,7 @@ class DeviceHandler(object):
self.udev_sync()
all_lsblk_info = get_all_lsblk_info()
devices = getAllDevices()
try:
loop_devices = SysCommand(['losetup', '-a'])
for ld_info in str(loop_devices).splitlines():
loop_device = getDevice(ld_info.split(':', maxsplit=1)[0])
devices.append(loop_device)
except Exception as err:
debug(f'Failed to get loop devices: {err}')
devices.extend(self.get_loop_devices())
for device in devices:
dev_lsblk_info = find_lsblk_info(device.path, all_lsblk_info)
@ -111,6 +104,30 @@ class DeviceHandler(object):
self._devices = block_devices
@staticmethod
def get_loop_devices() -> list[Device]:
devices = []
try:
loop_devices = SysCommand(['losetup', '-a'])
except SysCallError as err:
debug(f'Failed to get loop devices: {err}')
else:
for ld_info in str(loop_devices).splitlines():
try:
loop_device_path, _ = ld_info.split(':', maxsplit=1)
except ValueError:
continue
try:
loop_device = getDevice(loop_device_path)
except IOException as err:
debug(f'Failed to get loop device: {err}')
else:
devices.append(loop_device)
return devices
def _determine_fs_type(
self,
partition: Partition,