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.

This commit is contained in:
Anton Hvornum 2021-10-27 13:13:10 +00:00
parent 7149b76f3b
commit 68b891837c
2 changed files with 37 additions and 3 deletions

View File

@ -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}/@")
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)}")

View File

@ -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: