Cannot [dual] boot into Manjaro on BIOS/MBR system

I've been trying to install Manjaro alongside Windows 10 on a Dell e7450 today. Windows was set up using legacy boot/MBR because the system would myseteriously hang for several minutes and never boot when UEFI was enabled.

I followed the instructions in linux-aarhus's how-to, but since it's written for UEFI so I had to make some modifications.

  1. Windows already created 3 primary partitions, so for the 4th I was forced to choose extended.
  2. In the extended partition I created a boot partition (500MB, FAT32, /boot) and a single root (63.5GB, ext4, /).
  3. Installed the bootloader to the new boot partition.

In trying to follow the first fix instructions from gohlip, I get the following error.

grub> search.file /etc/manjaro-release root
grub> configfile /boot/grub/grub.cfg
[console clears]
grub> boot
error: you need to load the kernel first.

Must of the further searching I have done has led to deeper confusion, and it seems most search results are specific to UEFI systems rather than legacy boot.

Make sure that grub (boot menu) is started in bios-legacy. And use the [ More Completed Method] . You may not have grub.cfg created

My boot menu has different sections.

LEGACY BOOT:
    Internal HDD
    USD Storage Decive
UEFI BOOT:
    UEFI:   1100
... and some other stuff

What's odd is that if I select USB from legacy and 1100 from UEFI both take me to a Manjaro GRUB screen. The legacy one is a little different, though. It has an extra option Installed BIOS-System on hd1,msdos6, which causes the machine to hang with a blank screen. This blank screen hang, however, is precisely the bahvior I saw the last time I tried to enable UEFI on this machine. Which leads me to doubt whether or not it's really trying to boot in legacy mode.

TLDR: How can I be sure I'm properly starting grub in bios-legacy mode?

EDIT1: I'm in legecay mode.

echo $grub_platform
pc

EDIT2: The [More Completed Method] sort of worked. We managed to start Manjaro, but then it gets an error mounting the disk and diverts to emergency shell.

;; mounting 'UID={a guid} on real root
mount: /new_root: no filesystem type specified.
You are now being dropped into an emergency shell.

can you please
boot on USB manjaro ( not your disk)
open a terminal and returns

inxi -Fxxxza
parted -l

What disk? It is partition that it is trying to mount.
And that is most likely an entry in your stab that has a wrong or bad entry.

Check your fstab. Comment out any entry that is not relevant.
The fact that it boots to the installed OS means it works.

You will need to do 'grub-install /dev/sdx' and 'update-grub' when booted.
That may let you boot windows.

Show us your /etc/fstab (and 'sudo blkid' to make sense for us)

Whatever I try, I can't get the root drive to mount. The drive it is trying to mount is indeed the correct one. I verified the UUID with ls -lha /dev/disk/by-uuid. I'm thinking about starting the whole process over from scratch.

EDIT: If there are two drives $abc should be the UUID of the boot drive or the linux drive? (I've tried both and niether worked, but it would be good to know which is correct.)

Why don't you...

If you cannot boot to OS, from a livecd OS, use the file manager to get us that.
As said, it is most likely the fstab entry that's wrong.

If you have a separate boot partition, be careful that you point to the right partition. It is explained in that link on the [More Complicated Setup] section.
I still don't understand why people want a separate boot partition. Or want so many things complicated. Use Fedora.

Note to self: since the grub has returned to reasonable levels of less complication, perhaps I will need to make my link less complicated. let me pull out the first unedited version of that link.

@Wollie

OP has a separate boot partition.
He needs to point 'root' to boot partition
Then he needs to use 'root' partition in its linux line
He needs separate $abc and $pqr to work.
The commands you listed won't work for for his separate boot partition.

1 Like

Doing quickly. for OP
@Wollie, please check it over for mistakes. Thanks.
Out for walk with dog.

grub> search --file --set=root /intel-ucode.img  
grub> probe -u $root --set=abc
grub> search --file --set=xyz  /etc/manjaro-release  
grub> probe -u $xyz --set=pqr
grub> linux /vmlinuz-4.19-x86_64 root=UUID=$pqr rw
grub> initrd /initramfs-4.19-x86_64.img
grub> boot

use the right kernels of course, may not be 4.19.
To check verify kernels,
grub> ls ($root)/
after root is set
[EDIT]

@Wollie , I changed to the usual syntax for 'search' so you can follow.
Change to 'search --file' from search.file

search --no-floppy --file --set=root <file>

@gohlip, what about this step, doesn't work here?


grub> ls ($root)/boot/

Copy down kernel and initrd file, say vmlinuz-4.14-x86_64 and initramfs-4.14-x86_64.img
Use the right kernel below like 4.18 or 4.19 or...

I haven't checked with link. But I think you're right.
If $root is /boot (in separate boot partition), then list (ls) should be
grub> ls ($root)/

not ls ($root)/boot

good catch and thanks. cheers.
ps: my dog getting impatient. :joy:
Should be...
grub> ls ($root)/

1 Like

@Wollie

Checked with link. That is on the "no separate boot partition" section.
But I've edited that link to make it clearer on the 'separate boot' section.

Please go through my latest revision on that link and come back to me if you see any improvement that is needed. But please inform me first before going about editing it. Thanks.

@AgentS my old buddy and partner.
Please go through the revision too. But don't go about editing it yourself like you did the last time without informing me. :rofl: Thanks.

2 Likes

Looks good to me, I only would recommend to add it to post #10, too. :wink:

1 Like

Because I thought I was just moments away from resolving it myself... :sweat_smile:

blkid

/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
/dev/loop3: TYPE="squashfs"
/dev/sda1: LABEL="System Reserved" UUID="7AC2F519C2F4DA79" TYPE="ntfs" PARTUUID="da2ea3f4-01"
/dev/sda2: UUID="EA28FF8D28FF5753" TYPE="ntfs" PARTUUID="da2ea3f4-02"
/dev/sda3: UUID="A89A5D3A9A5D066A" TYPE="ntfs" PARTUUID="da2ea3f4-03"
/dev/sda5: UUID="CE70-E598" TYPE="vfat" PARTUUID="da2ea3f4-05"
/dev/sda6: UUID="b5ff75a5-65fc-4c10-85ae-fa9da7257344" TYPE="ext4" PARTUUID="da2ea3f4-06"
/dev/sdb1: UUID="2019-12-29-11-03-38-00" LABEL="MJRO1815" TYPE="iso9660"
/dev/sdb2: SEC_TYPE="msdos" LABEL_FATBOOT="MISO_EFI" LABEL="MISO_EFI" UUID="74D3-6C47" TYPE="vfat"

fstab

UUID=CE70-E598                            /boot          vfat    defaults,noatime 0 2
UUID=b5ff75a5-65fc-4c10-85ae-fa9da7257344 /              ext4    defaults,noatime,discard 0 1
# tmpfs                                     /tmp           tmpfs   defaults,noatime,mode=1777 0 0

Your /boot partition is vfat.
No can do.
Oh.. meaning you cannot have a non-esp /boot partition in fat filesystem.

Thanks, I never would have caught that.

I did not have enough background knowledge to try to follow a how-to made for UEFI and adapt it to MBR/legacy boot.

Since I made the wrong type of partition, I think I will need to repartition and re-install. What's the right way to partition and install a bootloader for dual-boot MBR/legacy boot? I was afraid to let the installer install the boat loader on the original MBR because I didn't know if it would interfere with Windows (and didn't want to experiment).

EDIT: The updated instructions in your wiki are much easier to follow now.

1 Like

Before we proceed (and this should be the first thing we need to know),
what is your disk partitioning (gpt or msdos)
what is your windows booted in (uefi or bios-legacy)

I assumed your disk is msdos and your windows bios-legacy too.
Can we confirm this?
Since you cannot boot manjaro, can you find out in windows?
At this very point, my windows know-how is suddenly zapped out.
can you find out or search for us and come back to us?

We certainly do not want you to do something however strong our assumption is.

ps: probably you have to reinstall. sorry.
and there's lots like yours (boot partition in vfat)
Here's one.
It installs and runs (for some time) but ultimately it will fail.

[edit] - you must install in same mode as your windows (unless you want to zap windows)
if windows is uefi, make you manjaro uefi
if your windows is bios-legacy, make manjaro bios-legacy.
if gpt, use uefi
if msdos, use bios-legacy

1 Like

Assuming that you come to the conclusion you have BIOS/MBR:

Only the old MBR will be overwritten by the approach of a dual boot install in this case. This is no issue as afterwards you can always boot into your Windows via the new grub bootloader menu.

(The MBR could also easily rewritten from Windows recovery DVD using simple command:
bootrec /fixMBR)

Details to the placement of the GRUB2 parts (especially boot.img and core.img) can be found in wikipedia:

You only need one partition for "/", unformatted (means formmated during installation) or formatted (usually ext4).

1 Like

@Wollie

  1. I assumed his disk is msdos based on above. An extended partition must imply msdos partitioning.
  2. Windows must therefore be bios-legacy.
  3. Manjaro allows installation of uefi in msdos (bad, won't change?)
    but is always bad and will end in failure.
  4. If manjaro is correctly installed in bios-legacy in a msdos partitioned disk,
    his boot partition cannot be a esp partition
    Therefore it is a 'normal' non-esp partition and if that is vfat fs, it will fail.

In all cases, it will fail.
Under no circumstance will his system survive.

The guide was for a re-install of Manjaro, no fix. Windows won't be affected other than usally by a dual boot. The two partitions for Manjaro can be deleted and merged afterwards.

Forum kindly sponsored by