Add PARTUUID detection support
v5 cover Add PARTUUID detection support
One new update for this patch series. This update allows for the partition UUID to be unconditionally passed via the kernel root=... boot parameter.
I have tested this patch using a setup similar to the one described by [1]. This could also be done by embedding the code inside the kernel image. However, updating the microcode via initramfs allows the microcode to be updated independently of kernel updates. However, there doesn't seem to be any standard naming scheme for the microcode initramfs, so I chose not to include that change in this patch set.
Thanks,
Nicholas Vinson
[1] https://wiki.gentoo.org/wiki/Intel_microcode#GRUB
Changes from Patch v4:
- Updated grub.texi to reflect new behavior for GRUB_ENABLE_LINUX_PARTUUID
- Updated 10_linux.in logic to favor the PARTUUID when GRUB_ENABLE_LINUX_PARTUUID is enabled and GRUB_DISABLE_LINUX_UUID is disabled.
Changes from Patch v3:
- Removed flex-2.6.3 compatibility patch
- Removed Steve Kenton's patch
Changes from Patch v2:
- Added flex-2.6.3 compatibility patch
- Fixed a GPT partition read error
- Added Steve Kenton's patch
- Changed struct grub_part_gpt_type name to struct grub_part_gpt_part_guid
- Changed grub_part_gpt_type_t typedef name to grub_part_gpt_guid_t
- Added sprint_gpt_guid to Steve Kenton's patch
- Updated v1 and Steve Kenton's patch to use similar methods when reading partition GUIDs.
Changes from Patch v1:
- Added GRUB_ENABLE_LINUX_PARTUUID variable description to grub.texi
- Removed added gpt_part_guid copy logic from
grub_gpt_partition_map_iterate()
- Removed added NT disk signature copy logic from grub_partition_msdos_iterate()
- Removed modifications to partition number increment logic
- Removed added guid union definition.
- Added GRUB_ENABLE_LINUX_PARTUUID to grub-mkconfig.in export list
- Moved PRINT_GPT_PARTTYPE printing logic to print_gpt_guid() function in grub-probe.c
- Updated PRINT_GPT_PARTTYPE case to call print_gpt_guid() function in grub-probe.c.
- Created probe_partuuid() function in grub-probe.c
- Updated print == PRINT_PARTUUID check logic in probe() to call probe_partuuid().
- Updated UUID logic in 10_linux.in to enable root=PARTUUID feature only if GRUB_DISABLE_LINUX_UUID is not set to true, and GRUB_DEVICE_PARTUUID is not empty, GRUB_ENABLE_LINUX_PARTUUID is set to true.
Hello,
This is a request to add PARTUUID detection support grub-probe for MBR and GPT partition schemes. The Linux kernel supports mounting the root filesystem by Linux device name or by the Partition [GU]UID. GRUB's mkconfig, however, currently only supports specifying the rootfs in the kernel command-line by Linux device name unless an initramfs is also present. When an initramfs is present GRUB's mkconfig will set the kernel's root parameter value to either the Linux device name or to the filesystem [GU]UID.
Therefore, the only way to protect a Linux system from failing to boot when its Linux storage device names change is to either manually edit grub.cfg or /etc/default/grub and append root=PARTUUID=xxx to the command-line or create an initramfs that understands how to mount devices by filesystem [G]UID and let grub-mkconfig pass the filesystem [GU]UID to the initramfs.
The goal of this patch set is to enable root=PARTUUID=xxx support in grub-mkconfig, so that users don't have to manually edit /etc/default/grub or grub.cfg, or create an initramfs for the sole purpose of having a robust bootloader configuration for Linux.
Thanks,
Nicholas Vinson
Nicholas Vinson (3):
Update grub_gpt_partentry; centralize guid prints Add PARTUUID detection support to grub-probe Update grub script template files
docs/grub.texi | 9 +++++ grub-core/disk/ldm.c | 2 +- grub-core/partmap/gpt.c | 4 +-- include/grub/gpt_partition.h | 8 ++--- util/grub-install.c | 2 +- util/grub-mkconfig.in | 3 ++ util/grub-probe.c | 81 ++++++++++++++++++++++++++++++++++++-------- util/grub.d/10_linux.in | 12 +++++-- 8 files changed, 95 insertions(+), 26 deletions(-)
Signature · 1 line
2.15.1
PATCH v5 1/3 Update grub_gpt_partentry; centralize guid prints
To help clean the code and simplify the code in util/grub-probe.c, this patch renames grub_gpt_part_type to grub_gpt_part_guid and updates grub_gpt_partentry to use this type for both the partition type GUID string and the partition GUID string entries.
This patch also moves the GUID printing logic in util/grub-probe.c to a separate function. This change allows the partuuid logic in the next commit to use the same printing logic without having to completely duplicate it.
--- grub-core/disk/ldm.c | 2 +- grub-core/partmap/gpt.c | 4 ++-- include/grub/gpt_partition.h | 8 ++++---- util/grub-install.c | 2 +- util/grub-probe.c | 30 +++++++++++++++--------------- 5 files changed, 23 insertions(+), 23 deletions(-)
grub-core/disk/ldm.c +1 -1
@@ -135,7 +135,7 @@ msdos_has_ldm_partition (grub_disk_t dsk)return has_ldm; } -static const grub_gpt_part_type_t ldm_type =GRUB_GPT_PARTITION_TYPE_LDM ; +static const grub_gpt_part_guid_t ldm_type =GRUB_GPT_PARTITION_TYPE_LDM ;/* Helper for gpt_ldm_sector. */ static int
grub-core/partmap/gpt.c +2 -2
@@ -33,10 +33,10 @@ static grub_uint8_t grub_gpt_magic[8] = 0x45, 0x46, 0x49, 0x20, 0x50, 0x41, 0x52, 0x54 }; -static const grub_gpt_part_type_t grub_gpt_partition_type_empty =GRUB_GPT_PARTITION_TYPE_EMPTY ; +static const grub_gpt_part_guid_t grub_gpt_partition_type_empty =GRUB_GPT_PARTITION_TYPE_EMPTY ;#ifdef GRUB_UTIL -static const grub_gpt_part_type_t grub_gpt_partition_type_bios_boot =GRUB_GPT_PARTITION_TYPE_BIOS_BOOT ; +static const grub_gpt_part_guid_t grub_gpt_partition_type_bios_boot =GRUB_GPT_PARTITION_TYPE_BIOS_BOOT ;#endif /* 512 << 7 = 65536 byte sectors. */
include/grub/gpt_partition.h +4 -4
@@ -22,14 +22,14 @@#include <grub/types.h> #include <grub/partition.h> -struct grub_gpt_part_type +struct grub_gpt_part_guid {grub_uint32_t data1;grub_uint16_t data2;grub_uint16_t data3;grub_uint8_t data4[8 ]; } __attribute__ ((aligned (8 ))); -typedef struct grub_gpt_part_type grub_gpt_part_type_t ; +typedef struct grub_gpt_part_guid grub_gpt_part_guid_t ;#define GRUB_GPT_PARTITION_TYPE_EMPTY \ { 0x0, 0x0, 0x0, \
@@ -70,8 +70,8 @@ struct grub_gpt_headerstruct grub_gpt_partentry { -grub_gpt_part_type_t type; -grub_uint8_t guid[16 ]; +grub_gpt_part_guid_t type; +grub_gpt_part_guid_t guid;grub_uint64_t start;grub_uint64_t end;grub_uint64_t attrib;
util/grub-install.c +1 -1
@@ -714,7 +714,7 @@ is_prep_partition (grub_device_t dev)if (grub_disk_read (dev->disk, p->offset, p->index,sizeof (gptdata), &gptdata) ==0 ) { -const grub_gpt_part_type_t template = { +const grub_gpt_part_guid_t template = {grub_cpu_to_le32_compile_time (0x9e1a2d38 ),grub_cpu_to_le16_compile_time (0xc612 ),grub_cpu_to_le16_compile_time (0x4316 ),
util/grub-probe.c +15 -15
@@ -129,6 +129,20 @@ get_targets_string (void)return str; } +static int +print_gpt_guid (grub_gpt_part_guid_t guid) +{ + guid.data1 =grub_le_to_cpu32 (guid.data1); + guid.data2 =grub_le_to_cpu16 (guid.data2); + guid.data3 =grub_le_to_cpu16 (guid.data3); + +return grub_printf ("%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x" , + guid.data1, guid.data2, guid.data3, guid.data4[0 ], + guid.data4[1 ], guid.data4[2 ], guid.data4[3 ], + guid.data4[4 ], guid.data4[5 ], guid.data4[6 ], + guid.data4[7 ]); +} +static void do_print (const char *x,void *data) {
@@ -641,21 +655,7 @@ probe (const char *path, char **device_names, char delim)if (grub_disk_read (dev->disk, p->offset, p->index,sizeof (gptdata), &gptdata) ==0 ) - { -grub_gpt_part_type_t gpttype; - gpttype.data1 =grub_le_to_cpu32 (gptdata.type.data1); - gpttype.data2 =grub_le_to_cpu16 (gptdata.type.data2); - gpttype.data3 =grub_le_to_cpu16 (gptdata.type.data3); -grub_memcpy (gpttype.data4, gptdata.type.data4,8 ); - -grub_printf ("%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x" , - gpttype.data1, gpttype.data2, - gpttype.data3, gpttype.data4[0 ], - gpttype.data4[1 ], gpttype.data4[2 ], - gpttype.data4[3 ], gpttype.data4[4 ], - gpttype.data4[5 ], gpttype.data4[6 ], - gpttype.data4[7 ]); - } +print_gpt_guid (gptdata.type); dev->disk->partition = p; }putchar (delim);
Signature · 1 line
2.15.1
Re: [GRUB PARTUUID PATCH V5 1/3] Update grub_gpt_partentry; centralize guid prints
Quoted 9 lines · Nicholas Vinson
To help clean the code and simplify the code in
util/grub-probe.c, this patch renamesgrub_gpt_part_typetogrub_gpt_part_guidand updatesgrub_gpt_partentryto use this type for both the partition type GUID string and the partition GUID string entries.This patch also moves the GUID printing logic in
util/grub-probe.cto a separate function. This change allows the partuuid logic in the next commit to use the same printing logic without having to completely duplicate it.
One logical change per patch please...
And please add your SOB next time.
Daniel
Re: [GRUB PARTUUID PATCH V5 1/3] Update grub_gpt_partentry; centralize guid prints
Sorry for the delay in responding. I just now saw these replies.
Quoted 6 lines · Daniel Kiper
Quoted 5 lines · Nicholas Vinson
To help clean the code and simplify the code in
util/grub-probe.c, this patch renamesgrub_gpt_part_typetogrub_gpt_part_guidand updatesgrub_gpt_partentryto use this type for both the partition type GUID string and the partition GUID string entries.
Quoted 6 lines
Quoted 4 lines
This patch also moves the GUID printing logic in
util/grub-probe.cto a separate function. This change allows the partuuid logic in the next commit to use the same printing logic without having to completely duplicate it.One logical change per patch please...
Done. I've split this patch into two.
Quoted 1 line
And please add your SOB next time.
Done. I'll submit a version 6 shortly.
Thanks,
Nicholas Vinson
Quoted 3 lines
Daniel
PATCH v5 2/3 Add PARTUUID detection support to grub-probe
In reply to Nicholas VinsonAdd PARTUUID detection support grub-probe for MBR and GPT partition schemes. The Linux kernel supports mounting the root filesystem by Linux device name or by the Partition [GU]UID. GRUB's mkconfig, however, currently only supports specifing the rootfs in the kernel command-line by Linux device name unless an initramfs is also present. When an initramfs is present GRUB's mkconfig will set the kernel's root parameter value to either the Linux device name or to the filesystem [GU]UID.
Therefore, the only way to protect a Linux system from failing to boot when its Linux storage device names change is to either manually edit grub.cfg or /etc/default/grub and append root=PARTUUID=xxx to the command-line or create an initramfs that understands how to mount devices by filesystem [G]UID and let grub-mkconfig pass the filesystem [GU]UID to the initramfs.
The goal of this patch set is to enable root=PARTUUID=xxx support in grub-mkconfig, so that users don't have to manually edit /etc/default/grub or grub.cfg, or create an initramfs for the sole purpose of having a robust bootloader configuration for Linux.
--- util/grub-probe.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+)
util/grub-probe.c +51 -0
@@ -28,6 +28,7 @@#include <grub/partition.h> #include <grub/msdos_partition.h> #include <grub/gpt_partition.h> +#include <grub/i386/pc/boot.h> #include <grub/emu/hostdisk.h> #include <grub/emu/getroot.h> #include <grub/term.h>
@@ -62,6 +63,7 @@ enum {PRINT_DRIVE ,PRINT_DEVICE ,PRINT_PARTMAP , +PRINT_PARTUUID ,PRINT_ABSTRACTION ,PRINT_CRYPTODISK_UUID , PRINT_HINT_STR,
@@ -85,6 +87,7 @@ static const char *targets[] = [PRINT_DRIVE] = "drive", [PRINT_DEVICE] = "device", [PRINT_PARTMAP] = "partmap", + [PRINT_PARTUUID] = "partuuid", [PRINT_ABSTRACTION] = "abstraction", [PRINT_CRYPTODISK_UUID] = "cryptodisk_uuid", [PRINT_HINT_STR] = "hints_string",
@@ -181,6 +184,48 @@ probe_partmap (grub_disk_t disk, char delim) } } +static void +probe_partuuid (grub_disk_t disk,char delim) +{ +/* +* Nested partitions not supported for now. +* Non-nested partitions must have disk->partition->parent == NULL +*/ +if (disk->partition && disk->partition->parent ==NULL ) + { +if (strcmp (disk->partition->partmap->name,"msdos" ) ==0 ) + { +/* +* The partition GUID for MSDOS is the partition number (starting +* with 1) prepended with the NT disk signature. +*/ +grub_uint32_t nt_disk_sig; +grub_partition_t p = disk->partition; + disk->partition = p->parent; + +if (grub_disk_read (disk,0 ,GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC , +sizeof (nt_disk_sig), &nt_disk_sig) ==0 ) + { +grub_printf ("%08x-%02x" , +grub_le_to_cpu32 (nt_disk_sig),1 + p->number); + } + disk->partition = p; + } +else if (strcmp (disk->partition->partmap->name,"gpt" ) ==0 ) + { +grub_partition_t p = disk->partition; +struct grub_gpt_partentry gptdata; + + disk->partition = p->parent; + +if (grub_disk_read (disk, p->offset, p->index, +sizeof (gptdata), &gptdata) ==0 ) +print_gpt_guid (gptdata.guid); + disk->partition = p; + } + } +} +static void probe_cryptodisk_uuid (grub_disk_t disk,char delim) {
@@ -635,6 +680,12 @@ probe (const char *path, char **device_names, char delim)/* Check if dev->disk itself is contained in a partmap. */ probe_partmap (dev->disk, delim); + else if (print == PRINT_PARTUUID) + { +probe_partuuid (dev->disk, delim); +putchar (delim); + } + else if (print == PRINT_MSDOS_PARTTYPE) { if (dev->disk->partition
Signature · 1 line
2.15.1
Re: [GRUB PARTUUID PATCH V5 2/3] Add PARTUUID detection support to grub-probe
Quoted 62 lines · Nicholas Vinson
Add PARTUUID detection support grub-probe for MBR and GPT partition schemes. The Linux kernel supports mounting the root filesystem by Linux device name or by the Partition [GU]UID. GRUB's mkconfig, however, currently only supports specifing the rootfs in the kernel command-line by Linux device name unless an initramfs is also present. When an initramfs is present GRUB's mkconfig will set the kernel's root parameter value to either the Linux device name or to the filesystem [GU]UID.
Therefore, the only way to protect a Linux system from failing to boot when its Linux storage device names change is to either manually edit grub.cfg or
/etc/default/gruband append root=PARTUUID=xxx to the command-line or create an initramfs that understands how to mount devices by filesystem [G]UID and let grub-mkconfig pass the filesystem [GU]UID to the initramfs.The goal of this patch set is to enable root=PARTUUID=xxx support in grub-mkconfig, so that users don't have to manually edit
/etc/default/grubor grub.cfg, or create an initramfs for the sole purpose of having a robust bootloader configuration for Linux.--- util/grub-probe.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+)util/grub-probe.c +9
-0@@ -28,6 +28,7 @@#include <grub/partition.h> #include <grub/msdos_partition.h> #include <grub/gpt_partition.h> +#include <grub/i386/pc/boot.h> #include <grub/emu/hostdisk.h> #include <grub/emu/getroot.h> #include <grub/term.h> @@ -62,6 +63,7 @@ enum {PRINT_DRIVE ,PRINT_DEVICE ,PRINT_PARTMAP , +PRINT_PARTUUID ,PRINT_ABSTRACTION ,PRINT_CRYPTODISK_UUID , PRINT_HINT_STR,@@ -85,6 +87,7 @@ static const char *targets[] = [PRINT_DRIVE] = "drive", [PRINT_DEVICE] = "device", [PRINT_PARTMAP] = "partmap", + [PRINT_PARTUUID] = "partuuid", [PRINT_ABSTRACTION] = "abstraction", [PRINT_CRYPTODISK_UUID] = "cryptodisk_uuid", [PRINT_HINT_STR] = "hints_string",@@ -181,6 +184,48 @@ probe_partmap (grub_disk_t disk, char delim) } } +static void +probe_partuuid (grub_disk_t disk,char delim) +{ +/* +* Nested partitions not supported for now. +* Non-nested partitions must have disk->partition->parent == NULL
util/grub-probe.c probe_partmap (grub_disk_t disk, char delim) · line 202
Quoted 10 lines
util/grub-probe.c +10
-0+*/ +if (disk->partition && disk->partition->parent ==NULL ) + { +if (strcmp (disk->partition->partmap->name,"msdos" ) ==0 ) + { +/* +* The partition GUID for MSDOS is the partition number (starting +* with 1) prepended with the NT disk signature. +*/ +grub_uint32_t nt_disk_sig;
Here you use spaces...
util/grub-probe.c probe_partmap (grub_disk_t disk, char delim) · line 203
Quoted 1 line
util/grub-probe.c +1
-0+grub_partition_t p = disk->partition;
...and here tab and spaces. I prefer the latter.
Please fix this.
util/grub-probe.c probe_partmap (grub_disk_t disk, char delim) · line 211
Quoted 8 lines
util/grub-probe.c +8
-0+ disk->partition = p->parent; + +if (grub_disk_read (disk,0 ,GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC , +sizeof (nt_disk_sig), &nt_disk_sig) ==0 ) + { +grub_printf ("%08x-%02x" , +grub_le_to_cpu32 (nt_disk_sig),1 + p->number); + }
These curly brackets are not needed. Please remove them and leave empty line before next instruction.
util/grub-probe.c probe_partmap (grub_disk_t disk, char delim) · line 223
Quoted 12 lines
util/grub-probe.c +12
-0+ disk->partition = p; + } +else if (strcmp (disk->partition->partmap->name,"gpt" ) ==0 ) + { +grub_partition_t p = disk->partition; +struct grub_gpt_partentry gptdata; + + disk->partition = p->parent; + +if (grub_disk_read (disk, p->offset, p->index, +sizeof (gptdata), &gptdata) ==0 ) +print_gpt_guid (gptdata.guid);
Please add empty line here.
util/grub-probe.c probe_partmap (grub_disk_t disk, char delim) · line 228
Quoted 5 lines
util/grub-probe.c +5
-0+ disk->partition = p; + } + } +} +
Otherwise patch LGMT.
Daniel
Re: [GRUB PARTUUID PATCH V5 2/3] Add PARTUUID detection support to grub-probe
Quoted 76 lines · Daniel Kiper
Quoted 62 lines · Nicholas Vinson
Add PARTUUID detection support grub-probe for MBR and GPT partition schemes. The Linux kernel supports mounting the root filesystem by Linux device name or by the Partition [GU]UID. GRUB's mkconfig, however, currently only supports specifing the rootfs in the kernel command-line by Linux device name unless an initramfs is also present. When an initramfs is present GRUB's mkconfig will set the kernel's root parameter value to either the Linux device name or to the filesystem [GU]UID.
Therefore, the only way to protect a Linux system from failing to boot when its Linux storage device names change is to either manually edit grub.cfg or
/etc/default/gruband append root=PARTUUID=xxx to the command-line or create an initramfs that understands how to mount devices by filesystem [G]UID and let grub-mkconfig pass the filesystem [GU]UID to the initramfs.The goal of this patch set is to enable root=PARTUUID=xxx support in grub-mkconfig, so that users don't have to manually edit
/etc/default/grubor grub.cfg, or create an initramfs for the sole purpose of having a robust bootloader configuration for Linux.--- util/grub-probe.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+)util/grub-probe.c +9
-0@@ -28,6 +28,7 @@#include <grub/partition.h> #include <grub/msdos_partition.h> #include <grub/gpt_partition.h> +#include <grub/i386/pc/boot.h> #include <grub/emu/hostdisk.h> #include <grub/emu/getroot.h> #include <grub/term.h> @@ -62,6 +63,7 @@ enum {PRINT_DRIVE ,PRINT_DEVICE ,PRINT_PARTMAP , +PRINT_PARTUUID ,PRINT_ABSTRACTION ,PRINT_CRYPTODISK_UUID , PRINT_HINT_STR,@@ -85,6 +87,7 @@ static const char *targets[] = [PRINT_DRIVE] = "drive", [PRINT_DEVICE] = "device", [PRINT_PARTMAP] = "partmap", + [PRINT_PARTUUID] = "partuuid", [PRINT_ABSTRACTION] = "abstraction", [PRINT_CRYPTODISK_UUID] = "cryptodisk_uuid", [PRINT_HINT_STR] = "hints_string",@@ -181,6 +184,48 @@ probe_partmap (grub_disk_t disk, char delim) } } +static void +probe_partuuid (grub_disk_t disk,char delim) +{ +/* +* Nested partitions not supported for now. +* Non-nested partitions must have disk->partition->parent == NULL util/grub-probe.c probe_partmap (grub_disk_t disk, char delim) · line 202
Quoted 10 lines
util/grub-probe.c +10
-0+*/ +if (disk->partition && disk->partition->parent ==NULL ) + { +if (strcmp (disk->partition->partmap->name,"msdos" ) ==0 ) + { +/* +* The partition GUID for MSDOS is the partition number (starting +* with 1) prepended with the NT disk signature. +*/ +grub_uint32_t nt_disk_sig;Here you use spaces...
Quoted 5 lines
util/grub-probe.c probe_partmap (grub_disk_t disk, char delim) · line 203
Quoted 1 line
util/grub-probe.c +1
-0+grub_partition_t p = disk->partition;...and here tab and spaces. I prefer the latter.
Please fix this.
Fixed.
Quoted 12 lines
util/grub-probe.c probe_partmap (grub_disk_t disk, char delim) · line 211
Quoted 8 lines
util/grub-probe.c +8
-0+ disk->partition = p->parent; + +if (grub_disk_read (disk,0 ,GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC , +sizeof (nt_disk_sig), &nt_disk_sig) ==0 ) + { +grub_printf ("%08x-%02x" , +grub_le_to_cpu32 (nt_disk_sig),1 + p->number); + }These curly brackets are not needed. Please remove them and leave empty line before next instruction.
Curly braces removed and a new line added.
Quoted 6 lines
Quoted 6 lines
util/grub-probe.c +6
-0+ disk->partition = p; + } +else if (strcmp (disk->partition->partmap->name,"gpt" ) ==0 ) + { +grub_partition_t p = disk->partition; +struct grub_gpt_partentry gptdata;
Quoted 9 lines
util/grub-probe.c probe_partmap (grub_disk_t disk, char delim) · line 223
Quoted 6 lines
util/grub-probe.c +6
-0+ + disk->partition = p->parent; + +if (grub_disk_read (disk, p->offset, p->index, +sizeof (gptdata), &gptdata) ==0 ) +print_gpt_guid (gptdata.guid);Please add empty line here.
Added. These changes will also be included in version 6. Thanks,
Nicholas Vinson
Quoted 10 lines
util/grub-probe.c probe_partmap (grub_disk_t disk, char delim) · line 228
Quoted 5 lines
util/grub-probe.c +5
-0+ disk->partition = p; + } + } +} +Otherwise patch LGMT.
Daniel
PATCH v5 3/3 Update grub script template files
In reply to Nicholas VinsonUpdate grub-mkconfig.in and 10_linux.in to support grub-probe's new partuuid target. Update grub.texi documenation.
--- docs/grub.texi | 9 +++++++++ util/grub-mkconfig.in | 3 +++ util/grub.d/10_linux.in | 12 +++++++++--- 3 files changed, 21 insertions(+), 3 deletions(-)
docs/grub.texi +9 -0
@@ -1405,6 +1405,15 @@ the Linux kernel, using a @samp{root=UUID=...} kernel parameter. This is usually more reliable, but in some cases it may not be appropriate. To disable the use of UUIDs, set this option to @samp{true}. +@item GRUB_ENABLE_LINUX_PARTUUID +Setting this option to @samp{true} changes the behavior of +@command{grub-mkconfig} so that it identifies the device containing the root +filesystem by the partition UUID via the @samp{root=PARTUUID=...} kernel +parameter. This is desirable for Linux systems where identifying the root +filesystem by its filesystem UUID or device name is imappropriate. However, +this option is only supported in Linux kernel versions least 2.6.37 (3.10 for +systems using the MSDOS partition scheme) or newer. + @item GRUB_DISABLE_RECOVERY If this option is set to @samp{true}, disable the generation of recovery mode menu entries.
util/grub-mkconfig.in +3 -0
@@ -134,6 +134,7 @@ fi # Device containing our userland. Typically used for root= parameter. GRUB_DEVICE="`${grub_probe} --target=device /`" GRUB_DEVICE_UUID="`${grub_probe} --device ${GRUB_DEVICE} --target=fs_uuid 2> /dev/null`" || true +GRUB_DEVICE_PARTUUID="`${grub_probe} --device ${GRUB_DEVICE} --target=partuuid 2> /dev/null`" || true # Device containing our /boot partition. Usually the same as GRUB_DEVICE. GRUB_DEVICE_BOOT="`${grub_probe} --target=device /boot`"
@@ -182,6 +183,7 @@ if [ "x${GRUB_ACTUAL_DEFAULT}" = "xsaved" ] ; then GRUB_ACTUAL_DEFAULT="`"${grub # override them. export GRUB_DEVICE \ GRUB_DEVICE_UUID \ + GRUB_DEVICE_PARTUUID \ GRUB_DEVICE_BOOT \ GRUB_DEVICE_BOOT_UUID \ GRUB_FS \
@@ -215,6 +217,7 @@ export GRUB_DEFAULT \ GRUB_TERMINAL_OUTPUT \ GRUB_SERIAL_COMMAND \ GRUB_DISABLE_LINUX_UUID \ + GRUB_ENABLE_LINUX_PARTUUID \ GRUB_DISABLE_RECOVERY \ GRUB_VIDEO_BACKEND \ GRUB_GFXMODE \
util/grub.d/10_linux.in +9 -3
@@ -45,12 +45,18 @@ esac # btrfs may reside on multiple devices. We cannot pass them as value of root= parameter # and mounting btrfs requires user space scanning, so force UUID in this case. -if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \ - || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \ +if [ "x${GRUB_DEVICE_UUID}" = "x" ] && [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] \ + || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \ + || ( ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \ + && ! test -e "/dev/disk/by-partuuid/${GRUB_DEVICE_PARTUUID}" ) \ || ( test -e "${GRUB_DEVICE}" && uses_abstraction "${GRUB_DEVICE}" lvm ); then LINUX_ROOT_DEVICE=${GRUB_DEVICE} -else +elif [ "x${GRUB_ENABLE_LINUX_PARTUUID}" != "xtrue" ] \ + || [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] \ + || ! test -e "/dev/disk/by-partuuid/${GRUB_DEVICE_PARTUUID}"; then LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID} +else + LINUX_ROOT_DEVICE=PARTUUID=${GRUB_DEVICE_PARTUUID} fi case x"$GRUB_FS" in
Signature · 1 line
2.15.1
Re: [GRUB PARTUUID PATCH V5 3/3] Update grub script template files
Quoted 2 lines · Nicholas Vinson
Update grub-mkconfig.in and 10_linux.in to support grub-probe's new partuuid target. Update grub.texi documenation.
As earlier lack of SOB. Otherwise LGTM.
Daniel
Re: [GRUB PARTUUID PATCH V5 3/3] Update grub script template files
Quoted 5 lines · Daniel Kiper
Quoted 2 lines · Nicholas Vinson
Update grub-mkconfig.in and 10_linux.in to support grub-probe's new partuuid target. Update grub.texi documenation.
As earlier lack of SOB. Otherwise LGTM.
Will be added in V6.
Thanks,
Nicholas Vinson
Quoted 3 lines
Daniel