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:
authorAnton Hvornum <anton.feeds@gmail.com>2021-10-27 13:13:10 +0000
committerAnton Hvornum <anton.feeds@gmail.com>2021-10-27 13:13:10 +0000
commit68b891837c6174d1f75babf42ee6657d4726576b (patch)
tree251cd675cbcc45d48d89fc1ef32197f3dc5aacd4 /archinstall/lib/disk/btrfs.py
parent7149b76f3bd3163938fe7413546e5f678f98851f (diff)
Finalized the create_subvolume and mount_subvolume functions. Remaining is to call these functions during the disk setup process to create the subvolumes and mount them in place, rather than doing the normal steps.
Diffstat (limited to 'archinstall/lib/disk/btrfs.py')
-rw-r--r--archinstall/lib/disk/btrfs.py36
1 files changed, 34 insertions, 2 deletions
diff --git a/archinstall/lib/disk/btrfs.py b/archinstall/lib/disk/btrfs.py
index d6758b3f..558a249e 100644
--- a/archinstall/lib/disk/btrfs.py
+++ b/archinstall/lib/disk/btrfs.py
@@ -1,4 +1,36 @@
+import pathlib, glob
+from typing import Union
+from .helpers import get_mount_info
+from ..exceptions import DiskError
from ..general import SysCommand
-def create_subvolume(installation):
- SysCommand(f"btrfs subvolume create {installation.target}/@") \ No newline at end of file
+def mount_subvolume(installation, 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
+ @force: overrides the check for weither or not the subvolume mountpoint is empty or not
+ """
+ # Set up the required physical structure
+ if type(location) == str:
+ location = pathlib.Path(location)
+
+ if not location.exists():
+ location.mkdir(parents=True)
+
+ 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)")
+
+ # Mount the logical volume to the physical structure
+ return SysCommand(f"mount {get_mount_info(installation.target/location)['source']} {installation.target}/{str(location)} -o subvol=@/{str(location)}").exit_code == 0
+
+def create_subvolume(installation, location :Union[pathlib.Path, str]) -> bool:
+ """
+ This function uses btrfs to create a subvolume.
+
+ @installation: archinstall.Installer instance
+ @location: a localized string or path inside the installation / or /boot for instance without specifying /mnt/boot
+ """
+
+ SysCommand(f"btrfs subvolume create {installation.target}/{str(location)}") \ No newline at end of file