From ab5de3e2e6f5afba81d441cc9a46ebadaad88732 Mon Sep 17 00:00:00 2001 From: codefiles <11915375+codefiles@users.noreply.github.com> Date: Sat, 23 Sep 2023 20:51:20 -0400 Subject: Add support for loop devices (#2097) --- archinstall/lib/disk/device_handler.py | 15 +++++++++++++-- archinstall/lib/disk/device_model.py | 5 ++++- 2 files changed, 17 insertions(+), 3 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/disk/device_handler.py b/archinstall/lib/disk/device_handler.py index 494319a1..9646103f 100644 --- a/archinstall/lib/disk/device_handler.py +++ b/archinstall/lib/disk/device_handler.py @@ -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 diff --git a/archinstall/lib/disk/device_model.py b/archinstall/lib/disk/device_model.py index ad2628ae..b520ad1b 100644 --- a/archinstall/lib/disk/device_model.py +++ b/archinstall/lib/disk/device_model.py @@ -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()] -- cgit v1.2.3-54-g00ecf