Hello,

I am trying to boot an "i386-pc" server using GRUB chain loading. I want the 
first GRUB installation to search by label for the disk containing the actual 
OS to be booted.

Implementation used: GRUB 2.02 as supplied on the arch linux 2017.10.01 live 
system .iso.

Disk layout:
(hd0) (hd0,msdos1) : USB memory key holding "primary" GRUB installation created 
with arch linux.
(hd1)  (hd1,gpt1)  (hd1,gpt2): FreeNAS 11 installation using "secondary" GRUB 
2.02 beta 2 to boot off a zfs partition. This has been verified to boot as 
expected by removing all other disks from the system.

Problem: The following sequence of commands from the primary GRUB shell 
successfully loads the secondary GRUB

echo $root # prints hd0,msdos1
set root=(hd1)
chainloader (hd1)0+1
boot

while the following commands crash after "boot" with an illegal instruction at 
EIP 7

echo $root # prints hd0,msdos1
chainloader (hd1)0+1
boot

From the GNU documentation and from instructions found on the net 
(https://wiki.bsdforen.de/howto:grub2-anleitung) I would have expected that 
"chainloader" takes a file as an argument, which may be an absolute path 
including a device.

However, looking at the source code in grub-core/loader/i386/pc/chainloader.c
I'd say that chainloader uses the information from the root variable in some 
places and the path supplied as an argument in other places, possibly causing 
the boot process to crash.

Could this behavior of chainloader be considered a bug? If not, would it be 
possible to update the documentation to reflect the observed behavior? I think 
it would be helpful if chainloader would issue at least a warning if passed an 
absolute path.

Regards
Harald Fricke

_______________________________________________
Help-grub mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/help-grub

Reply via email to