Added two new functions. partition.safe_to_format() and partition.has_content(). The first does some sanity checks to verify if we can format the partition or not. The second temporarly mounts the parition and checks if there's content inside and returns accordingly.
This commit is contained in:
parent
6306de4bfe
commit
fb55e318e5
|
|
@ -1,4 +1,4 @@
|
|||
import glob, re, os, json, time # Time is only used to gracefully wait for new paritions to come online
|
||||
import glob, re, os, json, time, hashlib
|
||||
from collections import OrderedDict
|
||||
from .exceptions import DiskError
|
||||
from .general import *
|
||||
|
|
@ -173,6 +173,22 @@ class Partition():
|
|||
else:
|
||||
return f'Partition(path={self.path}, fs={self.filesystem}{mount_repr})'
|
||||
|
||||
def has_content(self):
|
||||
temporary_mountpoint = '/tmp/'+hashlib.md5(bytes(f"{time.time()}", 'UTF-8')+os.urandom(12)).hexdigest()
|
||||
if (handle := sys_command(f'/usr/bin/mount {self.path} {temporary_mountpoint}')).exit_code != 0:
|
||||
raise DiskError(f'Could not mount and check for content on {self.path} because: {b"".join(handle)}')
|
||||
|
||||
files = len(glob.glob(f"{temporary_mountpoint}/*"))
|
||||
sys_command(f'/usr/bin/umount {temporary_mountpoint}')
|
||||
|
||||
return True if files > 0 else False
|
||||
|
||||
def safe_to_format(self):
|
||||
if self.target_mountpoint == '/boot' and self.has_content():
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def format(self, filesystem=None, path=None, allow_formatting=None, log_formating=True):
|
||||
"""
|
||||
Format can be given an overriding path, for instance /dev/null to test
|
||||
|
|
@ -223,7 +239,7 @@ class Partition():
|
|||
encrypted_partition = luks2(self, None, None)
|
||||
encrypted_partition.format(path)
|
||||
self.filesystem = 'crypto_LUKS'
|
||||
|
||||
|
||||
else:
|
||||
raise UnknownFilesystemFormat(f"Fileformat '{filesystem}' is not yet implemented.")
|
||||
return True
|
||||
|
|
|
|||
|
|
@ -281,8 +281,10 @@ with archinstall.Filesystem(archinstall.arguments['harddrive'], archinstall.GPT)
|
|||
fs.use_entire_disk(archinstall.arguments.get('filesystem', 'ext4'))
|
||||
else:
|
||||
for partition in archinstall.arguments['harddrive']:
|
||||
if partition.allow_formatting:
|
||||
if partition.allow_formatting and partition.safe_to_format():
|
||||
partition.format()
|
||||
else:
|
||||
archinstall.log(f"Did not format {partition} because .safe_to_format() returned False or .allow_formatting was False", level=archinstall.LOG_LEVELS.Debug)
|
||||
|
||||
if archinstall.arguments.get('!encryption-password', None):
|
||||
# First encrypt and unlock, then format the desired partition inside the encrypted part.
|
||||
|
|
|
|||
Loading…
Reference in New Issue