[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] use UUIDs for cross-disk installs (Re: Issue with boot != ro
From: |
Robert Millan |
Subject: |
Re: [PATCH] use UUIDs for cross-disk installs (Re: Issue with boot != root and chainloading) |
Date: |
Sun, 27 Jul 2008 20:27:53 +0200 |
User-agent: |
Mutt/1.5.13 (2006-08-11) |
Aside from the discussion about removing / refurbishing make_install_device(),
is everybody ok with what this patch does?
If I don't hear any objections I'll commit it soon.
On Sat, Jul 26, 2008 at 12:10:50AM +0200, Robert Millan wrote:
> 2008-07-26 Robert Millan <address@hidden>
>
> * include/grub/i386/pc/kernel.h (GRUB_KERNEL_MACHINE_DATA_END):
> Increase from 0x50 to 0x60.
> * util/i386/pc/grub-install.in: Detect cross-disk installs, and
> use UUIDs to identify the root drive for them. If that's not
> possible, abort.
> * util/i386/pc/grub-setup.c (setup): Do not special-case, or even
> check, for cross-disk installs.
>
> Index: include/grub/i386/pc/kernel.h
> ===================================================================
> --- include/grub/i386/pc/kernel.h (revision 1733)
> +++ include/grub/i386/pc/kernel.h (working copy)
> @@ -41,7 +41,7 @@
> #define GRUB_KERNEL_MACHINE_PREFIX 0x20
>
> /* End of the data section. */
> -#define GRUB_KERNEL_MACHINE_DATA_END 0x50
> +#define GRUB_KERNEL_MACHINE_DATA_END 0x60
>
> /* The size of the first region which won't be compressed. */
> #if defined(ENABLE_LZO)
> Index: util/i386/pc/grub-install.in
> ===================================================================
> --- util/i386/pc/grub-install.in (revision 1733)
> +++ util/i386/pc/grub-install.in (working copy)
> @@ -233,15 +233,34 @@
> # Device abstraction module, if any (lvm, raid).
> devabstraction_module=`$grub_probe --target=abstraction --device
> ${grub_device}`
>
> +# The order in this list is critical. Be careful when modifying it.
> +modules="$modules $fs_module $partmap_module biosdisk $devabstraction_module"
> +
> +prefix_drive=
> if [ "x${devabstraction_module}" = "x" ] ; then
> - prefix_drive=
> + if echo "${install_device}" | grep -qx "(.*)" ; then
> + install_drive="${install_device}"
> + else
> + install_drive="`$grub_probe --target=drive --device ${install_device}`"
> + fi
> + grub_drive="`$grub_probe --target=drive --device ${grub_device}`"
> +
> + # Strip partition number
> + install_drive="`echo ${install_drive} | sed -e s/,[0-9]*//g`"
> + grub_drive="`echo ${grub_drive} | sed -e s/,[0-9]*//g`"
> + if [ "x${grub_drive}" != "x${install_drive}" ] ; then
> + uuid="`$grub_probe --target=fs_uuid --device ${grub_device}`"
> + if [ "x${uuid}" = "x" ] ; then
> + echo "You attempted a cross-disk install, but the filesystem
> containing ${grubdir} does not support UUIDs." 1>&2
> + exit 1
> + fi
> + prefix_drive="(UUID=${uuid})"
> + modules="$modules fs_uuid"
> + fi
> else
> prefix_drive=`$grub_probe --target=drive --device ${grub_device}`
> fi
>
> -# The order in this list is critical. Be careful when modifying it.
> -modules="$modules $fs_module $partmap_module biosdisk $devabstraction_module"
> -
> grub_prefix="${prefix_drive}`make_system_path_relative_to_its_root
> ${grubdir}`" || exit 1
>
> $grub_mkimage --output=${grubdir}/core.img --prefix=${grub_prefix}/ $modules
> || exit 1
> Index: util/i386/pc/grub-setup.c
> ===================================================================
> --- util/i386/pc/grub-setup.c (revision 1733)
> +++ util/i386/pc/grub-setup.c (working copy)
> @@ -339,18 +339,12 @@
> if (grub_disk_write (dest_dev->disk, embed_region.start, 0,
> core_size, core_img))
> grub_util_error ("%s", grub_errmsg);
>
> - /* The boot image and the core image are on the same drive,
> - so there is no need to specify the boot drive explicitly. */
> - *boot_drive = 0xff;
> + /* FIXME: can this be skipped? */
> + *boot_drive = 0xFF;
> + *root_drive = 0xFF;
> +
> *kernel_sector = grub_cpu_to_le64 (embed_region.start);
>
> - /* If the root device is different from the destination device,
> - it is necessary to embed the root drive explicitly. */
> - if (root_dev->disk->id != dest_dev->disk->id)
> - *root_drive = (grub_uint8_t) root_dev->disk->id;
> - else
> - *root_drive = 0xFF;
> -
> /* Write the boot image onto the disk. */
> if (grub_disk_write (dest_dev->disk, 0, 0, GRUB_DISK_SECTOR_SIZE,
> boot_img))
> @@ -480,15 +474,8 @@
>
> *kernel_sector = grub_cpu_to_le64 (first_sector);
>
> - /* If the destination device is different from the root device,
> - it is necessary to embed the boot drive explicitly. */
> - if (root_dev->disk->id != dest_dev->disk->id)
> - *boot_drive = (grub_uint8_t) root_dev->disk->id;
> - else
> - *boot_drive = 0xFF;
> -
> - /* When the core image is not embedded, the root device always follows
> - the boot device. */
> + /* FIXME: can this be skipped? */
> + *boot_drive = 0xFF;
> *root_drive = 0xFF;
>
> *install_dos_part = grub_cpu_to_le32 (dos_part);
> _______________________________________________
> Grub-devel mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/grub-devel
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What good is a phone call… if you are unable to speak?
(as seen on /.)
- Re: Issue with boot != root and chainloading, (continued)
- Re: Issue with boot != root and chainloading, Pavel Roskin, 2008/07/25
- [PATCH] use UUIDs for cross-disk installs (Re: Issue with boot != root and chainloading), Robert Millan, 2008/07/25
- Re: [PATCH] use UUIDs for cross-disk installs (Re: Issue with boot != root and chainloading), Pavel Roskin, 2008/07/25
- Re: [PATCH] use UUIDs for cross-disk installs (Re: Issue with boot != root and chainloading), Robert Millan, 2008/07/27
- Re: [PATCH] use UUIDs for cross-disk installs (Re: Issue with boot != root and chainloading), Pavel Roskin, 2008/07/27
- Re: [PATCH] use UUIDs for cross-disk installs (Re: Issue with boot != root and chainloading), Robert Millan, 2008/07/27
- UUID boot on ieee1275 (Re: [PATCH] use UUIDs for cross-disk installs (Re: Issue with boot != root and chainloading)), Robert Millan, 2008/07/27
- Re: [PATCH] UUID boot on ieee1275 (Re: [PATCH] use UUIDs for cross-disk installs (Re: Issue with boot != root and chainloading)), Robert Millan, 2008/07/27
- Re: [PATCH] UUID boot on ieee1275 (Re: [PATCH] use UUIDs for cross-disk installs (Re: Issue with boot != root and chainloading)), Robert Millan, 2008/07/27
- Re: [PATCH] UUID boot on ieee1275 (Re: [PATCH] use UUIDs for cross-disk installs (Re: Issue with boot != root and chainloading)), Robert Millan, 2008/07/30
- Re: [PATCH] use UUIDs for cross-disk installs (Re: Issue with boot != root and chainloading),
Robert Millan <=
- Re: [PATCH] use UUIDs for cross-disk installs (Re: Issue with boot != root and chainloading), Robert Millan, 2008/07/30
Re: Issue with boot != root and chainloading, Andy Kittner, 2008/07/22