From 58fa0059a683b26e28e4c709f8f11f265852507f Mon Sep 17 00:00:00 2001 From: rbp Date: Sun, 14 Dec 2025 17:52:49 -0500 Subject: [PATCH] Do not mount btrfs partitions unless required, tested working and solves issue #3689 --- archinstall/lib/installer.py | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 621573255a..84d5e97bf5 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -355,11 +355,14 @@ def _mount_partition(self, part_mod: PartitionModification) -> None: target = self.target / part_mod.relative_mountpoint device_handler.mount(part_mod.dev_path, target, options=part_mod.mount_options) elif part_mod.fs_type == FilesystemType.Btrfs: - self._mount_btrfs_subvol( - part_mod.dev_path, - part_mod.btrfs_subvols, - part_mod.mount_options, - ) + # Only mount BTRFS subvolumes that have mountpoints specified + subvols_with_mountpoints = [sv for sv in part_mod.btrfs_subvols if sv.mountpoint is not None] + if subvols_with_mountpoints: + self._mount_btrfs_subvol( + part_mod.dev_path, + part_mod.btrfs_subvols, + part_mod.mount_options, + ) elif part_mod.is_swap(): device_handler.swapon(part_mod.dev_path) @@ -370,14 +373,20 @@ def _mount_lvm_vol(self, volume: LvmVolume) -> None: device_handler.mount(volume.dev_path, target, options=volume.mount_options) if volume.fs_type == FilesystemType.Btrfs and volume.dev_path: - self._mount_btrfs_subvol(volume.dev_path, volume.btrfs_subvols, volume.mount_options) + # Only mount BTRFS subvolumes that have mountpoints specified + subvols_with_mountpoints = [sv for sv in volume.btrfs_subvols if sv.mountpoint is not None] + if subvols_with_mountpoints: + self._mount_btrfs_subvol(volume.dev_path, volume.btrfs_subvols, volume.mount_options) def _mount_luks_partition(self, part_mod: PartitionModification, luks_handler: Luks2) -> None: if not luks_handler.mapper_dev: return None if part_mod.fs_type == FilesystemType.Btrfs and part_mod.btrfs_subvols: - self._mount_btrfs_subvol(luks_handler.mapper_dev, part_mod.btrfs_subvols, part_mod.mount_options) + # Only mount BTRFS subvolumes that have mountpoints specified + subvols_with_mountpoints = [sv for sv in part_mod.btrfs_subvols if sv.mountpoint is not None] + if subvols_with_mountpoints: + self._mount_btrfs_subvol(luks_handler.mapper_dev, part_mod.btrfs_subvols, part_mod.mount_options) elif part_mod.mountpoint: target = self.target / part_mod.relative_mountpoint device_handler.mount(luks_handler.mapper_dev, target, options=part_mod.mount_options) @@ -389,7 +398,10 @@ def _mount_luks_volume(self, volume: LvmVolume, luks_handler: Luks2) -> None: device_handler.mount(luks_handler.mapper_dev, target, options=volume.mount_options) if volume.fs_type == FilesystemType.Btrfs and luks_handler.mapper_dev: - self._mount_btrfs_subvol(luks_handler.mapper_dev, volume.btrfs_subvols, volume.mount_options) + # Only mount BTRFS subvolumes that have mountpoints specified + subvols_with_mountpoints = [sv for sv in volume.btrfs_subvols if sv.mountpoint is not None] + if subvols_with_mountpoints: + self._mount_btrfs_subvol(luks_handler.mapper_dev, volume.btrfs_subvols, volume.mount_options) def _mount_btrfs_subvol( self, @@ -397,7 +409,9 @@ def _mount_btrfs_subvol( subvolumes: list[SubvolumeModification], mount_options: list[str] = [], ) -> None: - for subvol in sorted(subvolumes, key=lambda x: x.relative_mountpoint): + # Filter out subvolumes without mountpoints to avoid errors when sorting + subvols_with_mountpoints = [sv for sv in subvolumes if sv.mountpoint is not None] + for subvol in sorted(subvols_with_mountpoints, key=lambda x: x.relative_mountpoint): mountpoint = self.target / subvol.relative_mountpoint options = mount_options + [f'subvol={subvol.name}'] device_handler.mount(dev_path, mountpoint, options=options)