It is possible to configure GRUB2 in BIOS mode to boot from a partition without embedding into the area after the MBR, but there are some complications:
You must have
/boot on a plain partition (it may be a primary or logical partition, but must not use software RAID (md) or LVM). A separate partition for
/boot is not absolutely required, but if
/boot is stored on the root filesystem, the same partition restrictions will apply to the root filesystem partition.
The filesystem used for
/boot must support blocklist installation mode. Most commonly used Linux filesystems support this; important exceptions are
btrfs has a large enough bootloader area to embed
core.img there, so installing GRUB2 there could still work). Again, if you do not have a separate partition for
/boot, these restrictions will apply to your root filesystem.
The blocklist installation mode is not recommended by GRUB2 developers, because in this mode
core.img is stored in the
/boot filesystem as a plain file, but actually it is accessed using sector numbers stored in the partition boot sector generated by GRUB (and in
core.img itself), therefore doing any file operation on this file may break booting. This is another reason to have separate
/boot partition when using this mode — there is less chance that you do some filesystem operation that will affect
/boot is on a logical partition, you must have some means to start the bootloader code from the partition boot sector — many versions of MBR code support booting only from primary partitions. One solution is to use the MBR code from Syslinux, which supports booting even from logical partitions.
Suppose that your
/boot partition is
/dev/sda2; then you should install GRUB2 there with the following command:
grub-install --force /dev/sda2
You need to use the
--force option, because recent GRUB2 versions refuse to use the blocklist installation mode without it.
Then you should use
fdisk /dev/sda to mark the partition 2 active.
Finally, if you had some non-default boot code in the MBR (e.g., an older GRUB installation), you need to install code which loads the boot sector from the active partition — e.g., you can take
mbr.bin from Syslinux:
dd bs=440 count=1 conv=notrunc if=mbr.bin of=/dev/sda
When using a logical partition for
/boot, you may also consider using
altmbr.bin from Syslinux, which takes the boot partition number from a byte in MBR instead of looking for the active partition, so that any non-Linux operating system you have on the computer will not be confused by a logical partition marked as active.