Add support for loop devices (#2097)
This commit is contained in:
parent
f078c74692
commit
ab5de3e2e6
|
|
@ -10,7 +10,7 @@ from typing import List, Dict, Any, Optional, TYPE_CHECKING
|
||||||
from parted import ( # type: ignore
|
from parted import ( # type: ignore
|
||||||
Disk, Geometry, FileSystem,
|
Disk, Geometry, FileSystem,
|
||||||
PartitionException, DiskLabelException,
|
PartitionException, DiskLabelException,
|
||||||
getAllDevices, freshDisk, Partition, Device
|
getDevice, getAllDevices, freshDisk, Partition, Device
|
||||||
)
|
)
|
||||||
|
|
||||||
from .device_model import (
|
from .device_model import (
|
||||||
|
|
@ -45,7 +45,18 @@ class DeviceHandler(object):
|
||||||
def load_devices(self):
|
def load_devices(self):
|
||||||
block_devices = {}
|
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':
|
if get_lsblk_info(device.path).type == 'rom':
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -374,7 +374,10 @@ class _DeviceInfo:
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_disk(cls, disk: Disk) -> _DeviceInfo:
|
def from_disk(cls, disk: Disk) -> _DeviceInfo:
|
||||||
device = disk.device
|
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)
|
sector_size = Size(device.sectorSize, Unit.B)
|
||||||
free_space = [DeviceGeometry(g, sector_size) for g in disk.getFreeSpaceRegions()]
|
free_space = [DeviceGeometry(g, sector_size) for g in disk.getFreeSpaceRegions()]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue