Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GPT table creation does not recover old disk and partition GUIDs #2548

Closed
DEvil0000 opened this issue Dec 21, 2020 · 7 comments
Closed

GPT table creation does not recover old disk and partition GUIDs #2548

DEvil0000 opened this issue Dec 21, 2020 · 7 comments
Assignees
Labels
minor bug An alternative or workaround exists won't fix / can't fix / obsolete

Comments

@DEvil0000
Copy link
Contributor

DEvil0000 commented Dec 21, 2020

  • ReaR version ("/usr/sbin/rear -V"): 2.6
  • OS version ("cat /etc/os-release" or "lsb_release -a" or "cat /etc/rear/os.conf"): ubuntu 20.04
  • Firmware (BIOS or UEFI or Open Firmware) and bootloader (GRUB or ELILO or Petitboot): uefi/grub
  • Partition table type on system: gpt
  • Description of the issue (ideally so that others can reproduce it):
    After a recover a new UEFI boot entry gets created for the recovered efi since the GPT partition GUID changed.
    Of course this is more a minor issue only affecting people making use of multiple boot options tried to boot in order.
    This however has two side effects:
    1. it changes the boot order putting the recovered efi partition as first
    2. it fills the boot records list with another entry keeping the old one (getting messy and maybe running out of entries over time)
  • Workaround/solution:
    There are at least two possible workarounds/fixes possible for this:
    • one can cleanup the old efi boot entries and set the boot order again (manually or with e.g. evibootmgr)
    • one can replace the GUID (e.g. using gdisk or sgdisk) and use the old efi boot entry

The complete fix for rear would be also writing GPT GUIDs to the layout file and then setting them e.g. with sgdisk.

@gdha gdha added the minor bug An alternative or workaround exists label Jan 8, 2021
@gdha
Copy link
Member

gdha commented Jan 8, 2021

@DEvil0000 No interest in writing a PR for your proposal?

@gdha
Copy link
Member

gdha commented Jan 12, 2021

@DEvil0000 PR has been merged, if you could recheck if all goes well?

@DEvil0000
Copy link
Contributor Author

The vfat ID now gets set for the UEFI partition but the GPT partition GUID (not type id) is still newly generated and was not addressed by #2546

@gdha
Copy link
Member

gdha commented Jan 22, 2021

@DEvil0000 Sorry for the delay in answer - please show us what is really missing here - it seems we misunderstood

@DEvil0000
Copy link
Contributor Author

DEvil0000 commented Jan 22, 2021

A efi boot entry contains disk, partition and efi payload path. There may also be a filesystem ID/UUID but thats not what this ticket is about.
Example UEFI boot entries (might use less details or different ids and methods - UEFI records are quite a beast):

Boot0019* Ubuntu 1	HD(1,800,32000,a44dc908-e0d1-4df5-903f-a8db5f6f66b3)File(\EFI\ubuntu\grubx64.efi)
Boot001A* Ubuntu 2	HD(4,df6609e,2fbe1,773a0059-be41-4828-944a-32217f941c95)File(\EFI\ubuntu\grubx64.efi)

The disk may be referenced by its bios id (a integer based on boot order bios settings normally) or by a disk UUID. See wiki (Partition table header, offset 0x38) for GPT but I think msdos has the same thing at the same offset in this case.

When using a msdos partition table the partitions are numberd from 1-4 or such. For an UEFI boot (payload) record you reference the partition id then.
When using GPT partition tables the partitions have a UUID for the partition type and a UUID for the actual partition. See wiki (Partition entries, offset 0x10). This Unique partition GUID must get recovered so existing old UEFI boot entries still match otherwise the system BIOS/Firmware will create a new entry or you would need to create one manually.

So when using a GPT partition table and UEFI you should definitely save the GPT UUIDs (disk and partition) and also insert those when creating the partition on recover. This way you restore the system "as it was".
Then you will not face any issues with UEFI and existing boot entries.

Edit:
My proposal is to also store those GPT UUIDs in the layout file and write them correctly to GPT when created.
There is also a GPT partition name which you might need to recover - don't remember if that was recovered.
BTW I am using USB method if that makes a difference.

@gdha
Copy link
Member

gdha commented Jan 25, 2021

@DEvil0000 Not all system are equal it seems - my UEFI knowledge became a bit rusty...

root@velo:~# efibootmgr 
BootCurrent: 0004
Timeout: 0 seconds
BootOrder: 0004,0003,0000,0001
Boot0000* UEFI Micron 2200S NVMe 512GB 194624E8DCEE 1
Boot0001* Linux Firmware Updater
Boot0003* UEFI Micron 2200S NVMe 512GB 194624E8DCEE 1 2
Boot0004* ubuntu

root@velo:~# parted /dev/nvme0n1 print
Model: Micron 2200S NVMe 512GB (nvme)
Disk /dev/nvme0n1: 512GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name                  Flags
 1      1049kB  819MB   818MB   fat32        EFI system partition  boot, esp
 2      819MB   6188MB  5369MB  fat32        Basic data partition  msftres
 3      6188MB  512GB   506GB   ext4

Not sure where to start? @gozora Do you have some more insights on these matters?

@gozora
Copy link
Member

gozora commented Jan 26, 2021

Let us not forget that there are also users that are migrating to different HW. For this group of people recreating all the UEFI boot configuration entries make little sense.
I think that current minimalist approach, that adds just entry for newly restored system, is good because it is simple. If one is concerned about mess in boot entries, he can easily clean it up (using efibootmgr).

Of course if anybody is willing to cover this complex topic with a pull request, I have no objections.

Hope it helps.

V.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
minor bug An alternative or workaround exists won't fix / can't fix / obsolete
Projects
None yet
Development

No branches or pull requests

4 participants