From 9abeed7d2a87970fa05b34e1406c8655fb1a56b1 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Mon, 22 Dec 2025 10:29:38 +0100 Subject: [PATCH 1/2] use pull and udev sync --- archinstall/lib/disk/device_handler.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/archinstall/lib/disk/device_handler.py b/archinstall/lib/disk/device_handler.py index 5c6b350ee9..2ec92c20de 100644 --- a/archinstall/lib/disk/device_handler.py +++ b/archinstall/lib/disk/device_handler.py @@ -422,11 +422,18 @@ def _lvm_info_with_retry( cmd: str, info_type: Literal['lv', 'vg', 'pvseg'], ) -> LvmVolumeInfo | LvmGroupInfo | LvmPVInfo | None: - while True: + # Retry for up to 30 seconds (10 attempts * 3 seconds) + max_retries = 10 + for attempt in range(max_retries): try: return self._lvm_info(cmd, info_type) except ValueError: - time.sleep(3) + if attempt < max_retries - 1: + debug(f'LVM info query failed (attempt {attempt + 1}/{max_retries}), retrying in 3 seconds...') + time.sleep(3) + + debug(f'LVM info query failed after {max_retries} attempts') + return None def lvm_vol_info(self, lv_name: str) -> LvmVolumeInfo | None: cmd = f'lvs --reportformat json --unit B -S lv_name={lv_name}' @@ -477,6 +484,13 @@ def lvm_pv_create(self, pvs: Iterable[Path]) -> None: worker.poll() worker.write(b'y\n', line_ending=False) + # Wait for the command to complete + while worker.is_alive(): + worker.poll() + + # Sync with udev to ensure the PVs are visible + self.udev_sync() + def lvm_vg_create(self, pvs: Iterable[Path], vg_name: str) -> None: pvs_str = ' '.join([str(pv) for pv in pvs]) cmd = f'vgcreate --yes {vg_name} {pvs_str}' @@ -487,6 +501,13 @@ def lvm_vg_create(self, pvs: Iterable[Path], vg_name: str) -> None: worker.poll() worker.write(b'y\n', line_ending=False) + # Wait for the command to complete + while worker.is_alive(): + worker.poll() + + # Sync with udev to ensure the VG is visible + self.udev_sync() + def lvm_vol_create(self, vg_name: str, volume: LvmVolume, offset: Size | None = None) -> None: if offset is not None: length = volume.length - offset From 9ce06d7c03f34d87e5d7175b87cf81a065d0b899 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Thu, 25 Dec 2025 00:48:07 +0100 Subject: [PATCH 2/2] 30s -> 5min --- archinstall/lib/disk/device_handler.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/archinstall/lib/disk/device_handler.py b/archinstall/lib/disk/device_handler.py index 2ec92c20de..3365a89363 100644 --- a/archinstall/lib/disk/device_handler.py +++ b/archinstall/lib/disk/device_handler.py @@ -422,8 +422,8 @@ def _lvm_info_with_retry( cmd: str, info_type: Literal['lv', 'vg', 'pvseg'], ) -> LvmVolumeInfo | LvmGroupInfo | LvmPVInfo | None: - # Retry for up to 30 seconds (10 attempts * 3 seconds) - max_retries = 10 + # Retry for up to 5 mins + max_retries = 100 for attempt in range(max_retries): try: return self._lvm_info(cmd, info_type)