index : archinstall32 | |
Archlinux32 installer | gitolite user |
summaryrefslogtreecommitdiff |
-rw-r--r-- | archinstall/lib/disk/diskinfo.py | 40 |
diff --git a/archinstall/lib/disk/diskinfo.py b/archinstall/lib/disk/diskinfo.py new file mode 100644 index 00000000..b56ba282 --- /dev/null +++ b/archinstall/lib/disk/diskinfo.py @@ -0,0 +1,40 @@ +import dataclasses +import json +from dataclasses import dataclass, field +from typing import Optional, List + +from ..general import SysCommand +from ..exceptions import DiskError + +@dataclass +class LsblkInfo: + size: int = 0 + log_sec: int = 0 + pttype: Optional[str] = None + rota: bool = False + tran: Optional[str] = None + ptuuid: Optional[str] = None + partuuid: Optional[str] = None + uuid: Optional[str] = None + fstype: Optional[str] = None + type: Optional[str] = None + mountpoints: List[str] = field(default_factory=list) + + +def get_lsblk_info(dev_path: str) -> LsblkInfo: + fields = [f.name for f in dataclasses.fields(LsblkInfo)] + lsblk_fields = ','.join([f.upper().replace('_', '-') for f in fields]) + + output = SysCommand(f'lsblk --json -b -o+{lsblk_fields} {dev_path}').decode('UTF-8') + + if output: + block_devices = json.loads(output) + info = block_devices['blockdevices'][0] + lsblk_info = LsblkInfo() + + for f in fields: + setattr(lsblk_info, f, info[f.replace('_', '-')]) + + return lsblk_info + + raise DiskError(f'Failed to read disk "{dev_path}" with lsblk') |