From 6b6c9c84bed1e4640f5f46282da1767827f977a9 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Tue, 23 Nov 2021 11:37:51 +0000 Subject: Adding a warning when /boot is reasonably too small (#738) * Moved convert_size_to_gb() into disk/helpers.py, Added a Partition().size property meta function. Using the .size value to check if /boot is too small which will raise an exception. The only drawback is that it's done post-formatting. This in order to catch scenarios where formatting isn't used. * Changed /boot warning from 0.15GB to 0.25GB * Changed the wording in the warning when /boot is too small. --- archinstall/lib/disk/blockdevice.py | 8 ++------ archinstall/lib/disk/helpers.py | 4 ++++ archinstall/lib/disk/partition.py | 19 ++++++++++++++----- 3 files changed, 20 insertions(+), 11 deletions(-) (limited to 'archinstall/lib/disk') diff --git a/archinstall/lib/disk/blockdevice.py b/archinstall/lib/disk/blockdevice.py index b3195784..c4802a5f 100644 --- a/archinstall/lib/disk/blockdevice.py +++ b/archinstall/lib/disk/blockdevice.py @@ -2,13 +2,12 @@ import os import json import logging import time +from .helpers import convert_size_to_gb from ..exceptions import DiskError from ..output import log from ..general import SysCommand from ..storage import storage -GIGA = 2 ** 30 - class BlockDevice: def __init__(self, path, info=None): if not info: @@ -155,15 +154,12 @@ class BlockDevice: for partition in json.loads(SysCommand(f'lsblk -J -o+UUID {self.path}').decode('UTF-8'))['blockdevices']: return partition.get('uuid', None) - def convert_size_to_gb(self, size): - return round(size / GIGA,1) - @property def size(self): output = json.loads(SysCommand(f"lsblk --json -b -o+SIZE {self.path}").decode('UTF-8')) for device in output['blockdevices']: - return self.convert_size_to_gb(device['size']) + return convert_size_to_gb(device['size']) @property def bus_type(self): diff --git a/archinstall/lib/disk/helpers.py b/archinstall/lib/disk/helpers.py index fea9ef65..46d86bd5 100644 --- a/archinstall/lib/disk/helpers.py +++ b/archinstall/lib/disk/helpers.py @@ -10,6 +10,10 @@ from ..general import SysCommand from ..output import log ROOT_DIR_PATTERN = re.compile('^.*?/devices') +GIGA = 2 ** 30 + +def convert_size_to_gb(size): + return round(size / GIGA,1) def sort_block_devices_based_on_performance(block_devices): result = {device: 0 for device in block_devices} diff --git a/archinstall/lib/disk/partition.py b/archinstall/lib/disk/partition.py index 4aea3832..b27c8459 100644 --- a/archinstall/lib/disk/partition.py +++ b/archinstall/lib/disk/partition.py @@ -7,7 +7,7 @@ import os import hashlib from typing import Optional from .blockdevice import BlockDevice -from .helpers import get_mount_info, get_filesystem_type +from .helpers import get_mount_info, get_filesystem_type, convert_size_to_gb from ..storage import storage from ..exceptions import DiskError, SysCallError, UnknownFilesystemFormat from ..output import log @@ -110,6 +110,19 @@ class Partition: if partition['node'] == self.path: return partition['size'] # * self.sector_size + @property + def size(self): + for i in range(storage['DISK_RETRY_ATTEMPTS']): + self.partprobe() + + if (handle := SysCommand(f"lsblk --json -b -o+SIZE {self.path}")).exit_code == 0: + lsblk = json.loads(handle.decode('UTF-8')) + + for device in lsblk['blockdevices']: + return convert_size_to_gb(device['size']) + + time.sleep(storage['DISK_TIMEOUTS']) + @property def boot(self): output = json.loads(SysCommand(f"sfdisk --json {self.block_device.path}").decode('UTF-8')) @@ -117,11 +130,7 @@ class Partition: # Get the bootable flag from the sfdisk output: # { # "partitiontable": { - # "label":"dos", - # "id":"0xd202c10a", # "device":"/dev/loop0", - # "unit":"sectors", - # "sectorsize":512, # "partitions": [ # {"node":"/dev/loop0p1", "start":2048, "size":10483712, "type":"83", "bootable":true} # ] -- cgit v1.2.3-54-g00ecf