On 08/06/2015 02:19 PM, Chris Murphy wrote:
stage 1 cannot point to another drive at all. It's sole purpose is to find stage 2, which must be on the same drive. Stage 1.5 is optional, and I've never seen it get used on Linux, mainly because in the time of GRUB legacy, I never encountered an installer that supported XFS for /boot.
Grub's documentation is slightly unclear about that. Here's a system where /boot is part of a RAID1 set on /dev/vdc1 and /dev/vdd1:
[root@localhost ~]# cat /boot/grub/device.map # this device map was generated by anaconda (hd0) /dev/vda (hd2) /dev/vdc (hd3) /dev/vdd [root@localhost ~]# grub Probing devices to guess BIOS drives. This may take a long time.
GNU GRUB version 0.97 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists the possible completions of a device/filename.] grub> root (hd2,0) root (hd2,0) Filesystem type is ext2fs, partition type 0xfd grub> setup (hd0) setup (hd0) Checking if "/boot/grub/stage1" exists... no Checking if "/grub/stage1" exists... yes Checking if "/grub/stage2" exists... yes Checking if "/grub/e2fs_stage1_5" exists... yes Running "embed /grub/e2fs_stage1_5 (hd0)"... 27 sectors are embedded. succeeded Running "install /grub/stage1 d (hd0) (hd0)1+27 p (hd2,0)/grub/stage2 /grub/grub.conf"... succeeded Done. grub>
I believe the final line can be interpreted as:
0: install: the install command 1: /grub/stage1: path to the stage1 file, relative to the root 2: d: grub will look for stage2_file at the address specified in arg 4 3: (hd0): grub will be written to the first block of (hd0), currently mapped to /dev/vda 4: (hd0)1+27: stage1_5 has been embedded to this location. It is being used as "stage2_file" 5: p: the first block of stage2 will be modified with the value of the partition where stage2_file is found 6: (hd2,0)/grub/stage2: 7: /grub/grub.conf: because this arg is present and #4 is really a stage 1.5, the stage2 config file is patched with this configuration file name.
If I specify "root (hd3,0)" in the grub shell, the boot loader will differ at 0002032, where it will refer to BIOS device 3 instead of BIOS device 2 for the location of /grub/stage2.
--- vda.2 2015-08-06 16:05:32.039999919 -0700 +++ vda.3 2015-08-06 16:05:59.441999927 -0700 @@ -53,7 +53,7 @@ * 0001760 \0 \0 \0 \0 \0 \0 \0 \0 002 \0 \0 \0 032 \0 002 0002000 352 p " \0 \0 \0 003 002 377 377 377 \0 \0 \0 \0 \0 -0002020 002 \0 0 . 9 7 \0 377 377 \0 202 / g r u b +0002020 002 \0 0 . 9 7 \0 377 377 \0 203 / g r u b 0002040 / s t a g e 2 / g r u b / g r 0002060 u b . c o n f \0 \0 \0 \0 \0 \0 \0 \0 \0 0002100 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
...unless I'm mistaken. :)