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:
parent
7149b76f3b
commit
68b891837c
|
|
@ -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)}")
|
||||
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Reference in New Issue