From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1TDIBY-0007Pq-5A for mharc-grub-devel@gnu.org; Sun, 16 Sep 2012 12:59:08 -0400 Received: from eggs.gnu.org ([208.118.235.92]:44247) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TDIBW-0007Pk-6P for grub-devel@gnu.org; Sun, 16 Sep 2012 12:59:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TDIBU-0004Mh-HT for grub-devel@gnu.org; Sun, 16 Sep 2012 12:59:06 -0400 Received: from woodbine.london.02.net ([87.194.255.145]:51572) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TDIBU-0004Mb-5z for grub-devel@gnu.org; Sun, 16 Sep 2012 12:59:04 -0400 Received: from coldfusion.catcity.dyndns.org (87.194.150.96) by woodbine.london.02.net (8.5.140) id 4FED9DF1023393A3 for grub-devel@gnu.org; Sun, 16 Sep 2012 17:59:01 +0100 Received: from localhost (localhost [127.0.0.1]) by coldfusion.catcity.dyndns.org (Postfix) with ESMTP id D421A8BC2B for ; Sun, 16 Sep 2012 17:58:59 +0100 (BST) Received: from coldfusion.catcity.dyndns.org ([127.0.0.1]) by localhost (coldfusion.catcity.dyndns.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id j+nroMu5dEbe for ; Sun, 16 Sep 2012 17:58:59 +0100 (BST) Received: from [192.168.0.4] (nebula.catcity.dyndns.org [192.168.0.4]) by coldfusion.catcity.dyndns.org (Postfix) with ESMTPSA id 93DA08BBB8 for ; Sun, 16 Sep 2012 17:58:59 +0100 (BST) Message-ID: <505604DF.305@catcity.dyndns.org> Date: Sun, 16 Sep 2012 17:57:03 +0100 From: Pete Appleton User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120910 Thunderbird/15.0.1 MIME-Version: 1.0 To: grub-devel@gnu.org Subject: [PATCH] Allow user to choose between path or fs-label instead of UUID Content-Type: multipart/mixed; boundary="------------060604000703030805090902" X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) X-Received-From: 87.194.255.145 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 16 Sep 2012 16:59:07 -0000 This is a multi-part message in MIME format. --------------060604000703030805090902 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit 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 --------------060604000703030805090902 Content-Type: text/x-patch; name="linux_fslabel_support.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="linux_fslabel_support.patch" === 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`" --------------060604000703030805090902--