Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/archinstall/lib/disk/btrfs.py
diff options
context:
space:
mode:
Diffstat (limited to 'archinstall/lib/disk/btrfs.py')
-rw-r--r--archinstall/lib/disk/btrfs.py33
1 files changed, 21 insertions, 12 deletions
diff --git a/archinstall/lib/disk/btrfs.py b/archinstall/lib/disk/btrfs.py
index f682cd7c..a71fb1f4 100644
--- a/archinstall/lib/disk/btrfs.py
+++ b/archinstall/lib/disk/btrfs.py
@@ -6,29 +6,38 @@ from ..exceptions import DiskError
from ..general import SysCommand
from ..output import log
-def mount_subvolume(installation, location :Union[pathlib.Path, str], force=False) -> bool:
+def mount_subvolume(installation, subvolume_location :Union[pathlib.Path, str], force=False) -> bool:
"""
This function uses mount to mount a subvolume on a given device, at a given location with a given subvolume name.
@installation: archinstall.Installer instance
- @location: a localized string or path inside the installation / or /boot for instance without specifying /mnt/boot
+ @subvolume_location: a localized string or path inside the installation / or /boot for instance without specifying /mnt/boot
@force: overrides the check for weither or not the subvolume mountpoint is empty or not
"""
+
+ installation_mountpoint = installation.target
+ if type(installation_mountpoint) == str:
+ installation_mountpoint = pathlib.Path(installation_mountpoint)
# Set up the required physical structure
- if type(location) == str:
- location = pathlib.Path(location)
+ if type(subvolume_location) == str:
+ subvolume_location = pathlib.Path(subvolume_location)
- if not (installation.target/location).exists():
- (installation.target/location).mkdir(parents=True)
+ target = installation_mountpoint / subvolume_location.relative_to(subvolume_location.anchor)
- if glob.glob(str(installation.target/location/'*')) and force is False:
- raise DiskError(f"Cannot mount subvolume to {installation.target/location} because it contains data (non-empty folder target)")
+ if not (target).exists():
+ (target).mkdir(parents=True)
+
+ if glob.glob(str(target/'*')) and force is False:
+ raise DiskError(f"Cannot mount subvolume to {target} because it contains data (non-empty folder target)")
- log(f"Mounting {installation.target/location} as a subvolume", level=logging.INFO)
+ log(f"Mounting {target} as a subvolume", level=logging.INFO)
# Mount the logical volume to the physical structure
- mount_location = get_mount_info(installation.target/location, traverse=True)['source']
- SysCommand(f"umount {mount_location}")
- return SysCommand(f"mount {mount_location} {installation.target}/{str(location)} -o subvol=@/{str(location)}").exit_code == 0
+ mountpoint_device, mountpoint_device_real_path = get_mount_info(target, traverse=True, return_real_path=True)['source']
+ if mountpoint_device_real_path == str(target):
+ log(f"Unmounting non-subvolume {mountpoint_device} previously mounted at {target}")
+ SysCommand(f"umount {mountpoint_device}")
+
+ return SysCommand(f"mount {mountpoint_device} {target} -o subvol=@{subvolume_location}").exit_code == 0
def create_subvolume(installation, location :Union[pathlib.Path, str]) -> bool:
"""