grub-devel.gnu.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH] Allow user to choose between path or fs-label instead of UUID
@ 2014-05-15 16:23 jpacner
  2014-05-27  9:38 ` jpacner
  0 siblings, 1 reply; 10+ messages in thread
From: jpacner @ 2014-05-15 16:23 UTC (permalink / raw)
  To: grub-devel; +Cc: grub-devl-pma

[-- Attachment #1: Type: text/plain, Size: 225 bytes --]

Hello everybody,

any progress on this? I'm waiting for this feature already more than one
and half year, but the patch wasn't included yet. Could you please
incorporate it to the upstream branch ASAP?

Thanks

-- Jan Pacner

[-- Attachment #2: Type: text/html, Size: 453 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread
* [PATCH] Allow user to choose between path or fs-label instead of UUID
@ 2012-09-16 16:57 Pete Appleton
  2012-09-16 17:40 ` Vladimir 'φ-coder/phcoder' Serbinenko
  0 siblings, 1 reply; 10+ messages in thread
From: Pete Appleton @ 2012-09-16 16:57 UTC (permalink / raw)
  To: grub-devel

[-- Attachment #1: Type: text/plain, Size: 1337 bytes --]

Hi all,

The file attached is intended to allow a Linux user to easily specify 
whether GRUB2 should use the traditional device path (/dev/sda1) or the 
filesystem label instead of the default UUID scheme.  This functionality 
is currently supported by GRUB2 itself but the peripheral files 
(grub-mkconfig, 10-linux etc) don't directly support it, requiring the 
user to edit the distribution-supplied files on their installation with 
the potential for consequent upgrade conflicts.

This patch adds support for a new environment variable 
GRUB_DEVICE_IDENTIFICATION taking as value one of {uuid, label, path}; 
if not set or invalid then it defaults to uuid so that the current 
semantics are respected.  If set to label then the 'search' clause and 
root=XXX kernel parameter are written using file system label syntax as 
opposed to the current single behaviour of device path if 
GRUB_DISABLE_LINUX_UUID=true

This patch was written after needing the functionality in my environment 
as I frequently move filesystems around a multi-spindle system (using 
the label to keep track of them) and seeing a few articles online 
advising various modifications to distribution supplied files; I hope 
that it is deemed useful enough to get incorporated into trunk to remove 
this minor niggle with a great product.

Thanks,

Pete Appleton

[-- Attachment #2: linux_fslabel_support.patch --]
[-- Type: text/x-patch, Size: 5913 bytes --]

=== modified file 'docs/grub.texi'
--- old/docs/grub.texi	2012-07-31 22:18:57 +0000
+++ new/docs/grub.texi	2012-09-16 16:41:08 +0000
@@ -1285,6 +1285,14 @@
 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}.
+@samp{GRUB_DEVICE_IDENTIFICATION} governs the scheme used instead of
+the UUID, either the file system label or the traditional device path
+
+@item GRUB_DEVICE_IDENTIFICATION
+Works in conjunction with GRUB_DISABLE_LINUX_UUID to determine how the root filesystem
+will be identified for the Linux kernel.  The default value is @samp{uuid}, which will use UUIDs. 
+Other alternatives are @samp{label} to use the file system label, or @samp{path} to use
+the traditional device path (@samp{/dev/sda1})
 
 @item GRUB_DISABLE_RECOVERY
 If this option is set to @samp{true}, disable the generation of recovery

=== modified file 'util/grub-mkconfig.in'
--- old/util/grub-mkconfig.in	2012-04-07 17:49:25 +0000
+++ new/util/grub-mkconfig.in	2012-09-16 16:33:06 +0000
@@ -131,10 +131,12 @@
 # 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_LABEL="`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2> /dev/null`" || true
 
 # Device containing our /boot partition.  Usually the same as GRUB_DEVICE.
 GRUB_DEVICE_BOOT="`${grub_probe} --target=device /boot`"
 GRUB_DEVICE_BOOT_UUID="`${grub_probe} --device ${GRUB_DEVICE_BOOT} --target=fs_uuid 2> /dev/null`" || true
+GRUB_DEVICE_BOOT_LABEL="`${grub_probe} --device ${GRUB_DEVICE_BOOT} --target=fs_label 2> /dev/null`" || 
 
 # Filesystem for the device containing our userland.  Used for stuff like
 # choosing Hurd filesystem module.
@@ -170,13 +172,20 @@
 
 if [ "x${GRUB_ACTUAL_DEFAULT}" = "xsaved" ] ; then GRUB_ACTUAL_DEFAULT="`"${grub_editenv}" - list | sed -n '/^saved_entry=/ s,^saved_entry=,,p'`" ; fi
 
+# Default to UUID if GRUB_DEVICE_IDENTIFICATION is undefined or unrecognised
+if [ "x${GRUB_DEVICE_IDENTIFICATION}" = "x" ] ; then GRUB_DEVICE_IDENTIFICATION="uuid" ; fi
+if [ "${GRUB_DEVICE_IDENTIFICATION}" != "uuid" -a "${GRUB_DEVICE_IDENTIFICATION}" != "label" -a "${GRUB_DEVICE_IDENTIFICATION}" != "path" ] ; then
+    GRUB_DEVICE_IDENTIFICATION="uuid"
+fi
 
 # These are defined in this script, export them here so that user can
 # override them.
 export GRUB_DEVICE \
   GRUB_DEVICE_UUID \
+  GRUB_DEVICE_LABEL \
   GRUB_DEVICE_BOOT \
   GRUB_DEVICE_BOOT_UUID \
+  GRUB_DEVICE_BOOT_LABEL \
   GRUB_FS \
   GRUB_FONT \
   GRUB_PRELOAD_MODULES \

=== modified file 'util/grub-mkconfig_lib.in'
--- old/util/grub-mkconfig_lib.in	2012-07-22 18:02:17 +0000
+++ new/util/grub-mkconfig_lib.in	2012-09-16 16:15:50 +0000
@@ -146,22 +146,30 @@
       done
   fi
 
-  # If there's a filesystem UUID that GRUB is capable of identifying, use it;
+  # If there's a filesystem UUID or label that GRUB is capable of identifying, use it according to GRUB_DEVICE_IDENTIFICATION
   # otherwise set root as per value in device.map.
   fs_hint="`"${grub_probe}" --device "${device}" --target=compatibility_hint`"
   if [ "x$fs_hint" != x ]; then
     echo "set root='$fs_hint'"
   fi
-  if fs_uuid="`"${grub_probe}" --device "${device}" --target=fs_uuid 2> /dev/null`" ; then
+  if [ "x${GRUB_DEVICE_IDENTIFICATION}" = "xlabel" ] && fs_label="`"${grub_probe}" --device "${device}" --target=fs_label 2> /dev/null`" ; then
     hints="`"${grub_probe}" --device "${device}" --target=hints_string 2> /dev/null`" || hints=
     echo "if [ x\$feature_platform_search_hint = xy ]; then"
-    echo "  search --no-floppy --fs-uuid --set=root ${hints} ${fs_uuid}"
+    echo "  search --no-floppy --label --set=root ${hints} ${fs_label}"
     echo "else"
-    echo "  search --no-floppy --fs-uuid --set=root ${fs_uuid}"
+    echo "  search --no-floppy --label --set=root ${fs_label}"
     echo "fi"
+  else
+    if fs_uuid="`"${grub_probe}" --device "${device}" --target=fs_uuid 2> /dev/null`" ; then
+      hints="`"${grub_probe}" --device "${device}" --target=hints_string 2> /dev/null`" || hints=
+      echo "if [ x\$feature_platform_search_hint = xy ]; then"
+      echo "  search --no-floppy --fs-uuid --set=root ${hints} ${fs_uuid}"
+      echo "else"
+      echo "  search --no-floppy --fs-uuid --set=root ${fs_uuid}"
+      echo "fi"
+    fi
   fi
 }
-
 grub_get_device_id ()
 {
   device="$1"

=== modified file 'util/grub.d/10_linux.in'
--- old/util/grub.d/10_linux.in	2012-07-22 18:02:17 +0000
+++ new/util/grub.d/10_linux.in	2012-09-16 16:21:41 +0000
@@ -43,13 +43,27 @@
   ;;
 esac
 
-if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \
-    || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \
-    || uses_abstraction "${GRUB_DEVICE}" lvm; then
-  LINUX_ROOT_DEVICE=${GRUB_DEVICE}
-else
-  LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
-fi
+case x"$GRUB_DEVICE_IDENTIFICATION" in
+    xpath)
+        LINUX_ROOT_DEVICE=${GRUB_DEVICE}
+        ;;
+    xlabel)
+        if [ "x${GRUB_DEVICE_LABEL}" = "x" ] \
+            || ! test -e "/dev/disk/by-label/${GRUB_DEVICE_LABEL}" \
+            || uses_abstraction "${GRUB_DEVICE}" lvm; then
+            LINUX_ROOT_DEVICE=${GRUB_DEVICE}
+        else
+            LINUX_ROOT_DEVICE=LABEL=\"${GRUB_DEVICE_LABEL}\"
+        fi;;
+    *)
+        if [ "x{GRUB_DEVICE_UUID}" = "x" ] \
+            || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \
+            || uses_abstraction "${GRUB_DEVICE}" lvm; then
+            LINUX_ROOT_DEVICE=${GRUB_DEVICE}
+        else
+            LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
+        fi;;      
+esac
 
 GRUBFS="`${grub_probe} --device ${GRUB_DEVICE} --target=fs 2>/dev/null || true`"
 


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2014-05-27  9:38 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-15 16:23 [PATCH] Allow user to choose between path or fs-label instead of UUID jpacner
2014-05-27  9:38 ` jpacner
  -- strict thread matches above, loose matches on Subject: below --
2012-09-16 16:57 Pete Appleton
2012-09-16 17:40 ` Vladimir 'φ-coder/phcoder' Serbinenko
2012-09-16 20:51   ` Pete Appleton
2012-09-18  8:54     ` Vladimir 'φ-coder/phcoder' Serbinenko
2012-09-18 18:26       ` Pete Appleton
2012-09-18 18:42         ` Vladimir 'φ-coder/phcoder' Serbinenko
2012-09-18 21:13           ` Pete Appleton
2012-09-18 21:22             ` Pete Appleton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).