From c4f688ce4c9ce89748e11bd0565c9b3720e66b74 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Sat, 30 Oct 2021 16:28:55 +0200 Subject: Added some error handling to mount points not getting mounted properly. --- archinstall/lib/disk/btrfs.py | 2 +- archinstall/lib/disk/helpers.py | 5 ++++- archinstall/lib/installer.py | 7 +++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/archinstall/lib/disk/btrfs.py b/archinstall/lib/disk/btrfs.py index b56430b8..cf60095f 100644 --- a/archinstall/lib/disk/btrfs.py +++ b/archinstall/lib/disk/btrfs.py @@ -25,7 +25,7 @@ def mount_subvolume(installation, location :Union[pathlib.Path, str], force=Fals raise DiskError(f"Cannot mount subvolume to {installation.target/location} because it contains data (non-empty folder target)") log(f"Mounting {location} as a subvolume", level=logging.INFO) - print(get_mount_info(installation.target/location)) + print(get_mount_info(installation.target/location, traverse=True)) # Mount the logical volume to the physical structure mount_location = get_mount_info(installation.target/location)['source'] SysCommand(f"umount {mount_location}") diff --git a/archinstall/lib/disk/helpers.py b/archinstall/lib/disk/helpers.py index 0111d327..8a6d5a48 100644 --- a/archinstall/lib/disk/helpers.py +++ b/archinstall/lib/disk/helpers.py @@ -116,7 +116,7 @@ def harddrive(size=None, model=None, fuzzy=False): return collection[drive] -def get_mount_info(path :Union[pathlib.Path, str]) -> dict: +def get_mount_info(path :Union[pathlib.Path, str], traverse=False) -> dict: for traversal in list(map(str, [str(path)] + list(pathlib.Path(str(path)).parents))): try: output = SysCommand(f'/usr/bin/findmnt --json {traversal}').decode('UTF-8') @@ -125,6 +125,9 @@ def get_mount_info(path :Union[pathlib.Path, str]) -> dict: except SysCallError: pass + if not traverse: + break + if not output: return {} diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 41d918a1..b0a7c5f1 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -1,11 +1,14 @@ +import time from .disk import * from .hardware import * from .locale_helpers import verify_keyboard_layout, verify_x11_keyboard_layout +from .helpers import get_mount_info from .mirrors import * from .plugins import plugins from .storage import storage from .user_interaction import * from .disk.btrfs import create_subvolume, mount_subvolume +from .exceptions import DiskError, ServiceException # Any package that the Installer() is responsible for (optional and the default ones) __packages__ = ["base", "base-devel", "linux-firmware", "linux", "linux-lts", "linux-zen", "linux-hardened"] @@ -144,6 +147,10 @@ class Installer: else: mountpoints[mountpoint]['device_instance'].mount(f"{self.target}{mountpoint}") + time.sleep(1) + if not get_mount_info(f"{self.target}{mountpoint}", traverse=False): + raise DiskError(f"Target {self.target}{mountpoint} never got mounted properly.") + if (subvolumes := mountpoints[mountpoint].get('btrfs', {}).get('subvolumes', {})): for name, location in subvolumes.items(): create_subvolume(self, location) -- cgit v1.2.3-54-g00ecf