Add support for loop devices (#2097)

This commit is contained in:
codefiles 2023-09-23 20:51:20 -04:00 committed by GitHub
parent f078c74692
commit ab5de3e2e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 3 deletions

View File

@ -10,7 +10,7 @@ from typing import List, Dict, Any, Optional, TYPE_CHECKING
from parted import ( # type: ignore
Disk, Geometry, FileSystem,
PartitionException, DiskLabelException,
getAllDevices, freshDisk, Partition, Device
getDevice, getAllDevices, freshDisk, Partition, Device
)
from .device_model import (
@ -45,7 +45,18 @@ class DeviceHandler(object):
def load_devices(self):
block_devices = {}
for device in getAllDevices():
devices = getAllDevices()
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():
loop_device = getDevice(ld_info.split(':', maxsplit=1)[0])
devices.append(loop_device)
for device in devices:
if get_lsblk_info(device.path).type == 'rom':
continue

View File

@ -374,7 +374,10 @@ class _DeviceInfo:
@classmethod
def from_disk(cls, disk: Disk) -> _DeviceInfo:
device = disk.device
device_type = parted.devices[device.type]
if device.type == 18:
device_type = 'loop'
else:
device_type = parted.devices[device.type]
sector_size = Size(device.sectorSize, Unit.B)
free_space = [DeviceGeometry(g, sector_size) for g in disk.getFreeSpaceRegions()]