Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/archinstall/lib/disk
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
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')
-rw-r--r--archinstall/lib/disk/btrfs.py36
-rw-r--r--archinstall/lib/disk/helpers.py4
2 files changed, 37 insertions, 3 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
diff --git a/archinstall/lib/disk/helpers.py b/archinstall/lib/disk/helpers.py
index 65abdea2..2e84a657 100644
--- a/archinstall/lib/disk/helpers.py
+++ b/archinstall/lib/disk/helpers.py
@@ -1,5 +1,7 @@
import re
import json
+import pathlib
+from typing import Union
from .blockdevice import BlockDevice
from ..exceptions import SysCallError
from ..general import SysCommand
@@ -114,7 +116,7 @@ def harddrive(size=None, model=None, fuzzy=False):
return collection[drive]
-def get_mount_info(path) -> dict:
+def get_mount_info(path :Union[pathlib.Path, str]) -> dict:
try:
output = SysCommand(f'/usr/bin/findmnt --json {path}').decode('UTF-8')
except SysCallError: