diff --git a/truenas_install/__main__.py b/truenas_install/__main__.py index 7a47e00..6d2bd10 100644 --- a/truenas_install/__main__.py +++ b/truenas_install/__main__.py @@ -51,6 +51,7 @@ from .utils import getmntinfo, get_pids # noqa logger = logging.getLogger(__name__) +BIOS_BOOT_PARTITION_GUID = "21686148-6449-6E6F-744E-656564454649" EFI_SYSTEM_PARTITION_GUID = "C12A7328-F81F-11D2-BA4B-00A0C93EC93B" RE_UNSQUASHFS_PROGRESS = re.compile(r"\[.+]\s+(?P[0-9]+)/(?P[0-9]+)\s+(?P[0-9]+)%") @@ -606,11 +607,37 @@ def main(): os.makedirs(f"{root}/boot/efi", exist_ok=True) for i, disk in enumerate(disks): - efi_partition_number = 2 + if old_root is None: + # Fresh installation - we know the layout + efi_partition_number = 2 + run_command([ + "chroot", root, "grub-install", "--target=i386-pc", f"/dev/{disk}" + ]) + else: + partition_1_guid = None + try: + partition_1_guid = get_partition_guid(disk, 1) + except Exception: + pass - run_command([ - "chroot", root, "grub-install", "--target=i386-pc", f"/dev/{disk}" - ]) + if partition_1_guid == BIOS_BOOT_PARTITION_GUID: + run_command([ + "chroot", root, "grub-install", "--target=i386-pc", f"/dev/{disk}" + ]) + + # EFI partition: position 2 (SCALE) or 1 (Core migrations) + efi_partition_number = None + if partition_1_guid == EFI_SYSTEM_PARTITION_GUID: + efi_partition_number = 1 + else: + try: + if get_partition_guid(disk, 2) == EFI_SYSTEM_PARTITION_GUID: + efi_partition_number = 2 + except Exception: + pass + + if efi_partition_number is None: + continue if get_partition_guid(disk, efi_partition_number) != EFI_SYSTEM_PARTITION_GUID: continue