This a problem in grub-setup.

grub2 ships a 'default' boot sector /boot/grub/boot.img created from
boot/i386/pc/boot.S

grub-setup is supposed to modify the code, over-writing a couple of
instructions with non-operations (nops =0x90) if it knows it is
installing onto the first hard disk of the target:

  /* If DEST_DRIVE is a hard disk, enable the workaround, which is
     for buggy BIOSes which don't pass boot drive correctly. Instead,
     they pass 0x00 or 0x01 even when booted from 0x80.  */
  if (dest_dev->disk->id & 0x80)
    /* Replace the jmp (2 bytes) with double nop's.  */
    *boot_drive_check = 0x9090;

The result of this is that the two bytes at offset 0x66 (decimal 102) in
the sector written to the hard disk should be nops to replace the jmp
instruction at 0x66:

00000065  FA                cli
00000066  EB07              jmp short 0x6f
00000068  F6C280            test dl,0x80
0000006B  7502              jnz 0x6f
0000006D  B280              mov dl,0x80

I manually wrote the nops to the boot sector and grub2 started
correctly. I'll now figure out why grub-setup is not doing this over-
write itself.

As a temporary workaround for this issue you can fix this by:

1. Boot from a LiveCD image from CD or network (via PXE).
2. Open a terminal (there are two ways)
 a. press Ctrl+Alt+F1 *twice* to get to virtual console #1
 b. Applications > Accessories > Terminal
3. Create a file containing the nops:
 echo -e -n  "\0220\0220" >/tmp/nop.bin
4. Write the nops into the boot sector (replace /dev/sda if necessary with the 
boot device name on *your* system):
 sudo dd if=/tmp/nop.bin of=/dev/sda bs=2 count=1 seek=102
5. Restart and test.

-- 
Acer Travelmate C100 fails to boot: "Geom Error"
https://bugs.launchpad.net/bugs/555500
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to