From 73b80ec2d999c45ce13f3e034704249d80829f7e Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 7 Mar 2014 04:31:26 +0100 Subject: gpt-auto-generator: automatically find the root disk of the system MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When run in an initrd and no root= argument is set (or is set to root=gpt-auto) we will automatically look for the root partition on the same disk the EFI ESP is located on. Since we look for swap, /home and /srv on the disk the root partition is located on, we hence have a fully discoverable chain: Firmware discovers the EFI ESP partition → the initrd discovers the root partition → the host OS discovers swap, /home, and /srv. Note that this requires an EFI boot loader that sets the LoaderDevicePartUUID EFI variable, such as Gummiboot. --- src/shared/efivars.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src/shared/efivars.c') diff --git a/src/shared/efivars.c b/src/shared/efivars.c index 5ee8f1eb0b..f18f5c4b16 100644 --- a/src/shared/efivars.c +++ b/src/shared/efivars.c @@ -440,9 +440,6 @@ int efi_loader_get_boot_usec(usec_t *firmware, usec_t *loader) { int efi_loader_get_device_part_uuid(sd_id128_t *u) { _cleanup_free_ char *p = NULL; int r, parsed[16]; - unsigned i; - - assert(u); r = efi_get_variable_string(EFI_VENDOR_LOADER, "LoaderDevicePartUUID", &p); if (r < 0) @@ -455,8 +452,12 @@ int efi_loader_get_device_part_uuid(sd_id128_t *u) { &parsed[12], &parsed[13], &parsed[14], &parsed[15]) != 16) return -EIO; - for (i = 0; i < ELEMENTSOF(parsed); i++) - u->bytes[i] = parsed[i]; + if (u) { + unsigned i; + + for (i = 0; i < ELEMENTSOF(parsed); i++) + u->bytes[i] = parsed[i]; + } return 0; } -- cgit v1.2.3-54-g00ecf