GRUB Installations Woes

Folks,

Running a triple boot system on a Toshiba laptop with 1TB hard drive, Ubuntu, Windoz10 and Fedora KDE - all running fine after installing Fedora with help from this forum.

Wanted to experiment with various GRUB options on an external 320GB SATA drive so installed Ubuntu-Mate, Fedora KDE and RaspberryPi Desktop, the latter being a Debian version of the popular SBC operating system.

Installation went OK but of course the GRUB on the external drive wanted to list all the systems on my internal drive too, Fedora gave me problems as it doesn’t say which drive it is operating from and as I had it on my internal and external drive I had numerous listings. On top of that when running from the external drive it takes /dev/sda and my internal drive becames /dev/sdb

So, after lengthy explanation question is;

  1. With Fedora is there a way of identifying which partition it is attached to on the GRUB menu?
  2. Can GRUB on the external drive be edited when running a system on the internal drive?

Geoff

1 Like

You can press e / Esc in the GRUB boot menu to see the details.
The required boot entry can be identified with unique VG name, label or UUID.

The chroot method should work.

1 Like

Thank you for prompt reply. That chroot link looks interesting.

I’ll check out the GRUB menu next time I boot up.

Geoff

1 Like

That was looking promising but ended up with message that directory EFI not found.

I’m getting totally confused with where GRUB is actually loaded, configuration files seem to be in a Linux partition but I thought it was installed to MBR of disk.

Geoff

1 Like

If you installed the system with EFI and want to use the chroot method, you need to mount the EFI partition manually in addition to the steps described in the instruction.

2 Likes

@geffers, I’m quite sure grub allows to resolve your inconvenience – through some manual config file manipulations.

I’ll provide an overview, we can discuss details later if you decide to take this route.

The easiest setup will be if all the systems on your external HDD are installed in UEFI mode and each has their own copy of bootloader installed.

In short you need – on your external HDD – to remove all the boot options from the internal harddrive – and do it once, make it persistent, so you don’t need to redo it after every kernel update. To do this you:

  1. Backup you existing /boot/efi/EFI/fedora/grub.cfg to be safe.

  2. Add GRUB_DISABLE_OS_PROBER=true in /etc/default/grub

  3. Add boot entries you need to /etc/grub.d/40_custom

    To do it you take an entry from your existing grub.cfg, paste it in 40_custom, then change it appropriately.

    For distros using grub you can use grub’s directive configfile <path_to_their_grub.cfg_here>, for other bootloaders you should be able to chainload their bootloaders.

  4. Update grub.cfg with grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg. Be sure to note any error messages from grub2-mkconfig on this step.

  5. Test it and correct any errors you’re able to correct.

If you need to undo these changes and are able to boot into this fedora installation – you just undo changes from steps 2 and 3 and regenerate grub.cfg.

If you’re unable to boot into Fedora installation – the you boot to your Fedora on an internal drive, plugin external drive, and restore original grub.cfg you’ve made on step 1.


After such a setup you end up with

  • Dynamic Fedora’s boot entries – new ones automatically added for new kernels – as usual.
  • A bunch of static boot entries for other distros – they will not change by themselves.

If you need to add another distro – you add it manually to 40_custom in a similar fashion.

New updated kernels for other distros would go to their own bootloaders’ config files, you’ll see them after selecting corresponding entry in Fedora’s boot menu.

And in fact it’s less complicated than it sounds :slight_smile:


You should have questions at this point, please ask them )))

3 Likes

I’ve actually hoped you would ask for some clarifications, as there are quite a few details for further discussion here. But I won’t write them all without your questions – it would be too long (and take too much time) – and would be pointless if you’re not interested and/or already know it yourself.


Also directly loading Ubuntu’s (for example) kernel – as I saw in yet another your thread – is a mistake with this unified menu approach. After Ubuntu (and other distribution) update their kernel your menuentry will become obsolete – you will have to update it after every kernel update for every installed distribution. That’s not good. You can (and really should!) avoid this situation by using configfile grub’s directive – as I’ve written in my overview – or this approach becomes to tedious to maintain and pointless really. in such a case you’re better off with dynamically generated menu (as it was originally) in the first place.

Apologies, I did acknowledge your advice then referenced it in another post. Had a wee mishap couple of days back, lost GRUB boot menu from both internal and external drive, would only boot into Windoz - oh no.

Resolved that manually booting from GRUB command line using a live image.

I am a bit confused as to difference between grub2-mkconfig and update-grub

Geoff

No apology is needed, I just think it may be more productive (and easier on someone else with similar questions) to discuss it all in one topic, that’s all.

If your grub was bypassed completely – then likely BIOS/UEFI boot entry for Fedora/grub either was lost (happened a couple times to me) or wasn’t the default one – so computer just booted to Windows bootloader instead of grub.

If the grub was booting Windows only – that’s a more interesting issue )

As far as I know, update-grub is a Ubuntu (maybe also Debian) script – invoking grub2-mkconfig in the process – and it isn’t available in Fedora. I haven’t seen the source of the script, it can do something else beside regenerating grub.cfg, but I’m quite sure you can safely run grub2-mkconfig -o <appropriate_path> when you see a suggestion to run update-grub. Well, that’s what I do :slight_smile:

Right, that makes sense, didn’t think a grub-update command would be distro specific.

My main machine GRUB boot display is fine, I can boot to the external drive fine, it is just editing the external drive’s GRUB boot options I am struggling with. What adds to confusion is (appreciate they tend to use UUID) my internal drive is sda but if I boot to the external drive and issue lsblk the external drive becomes sda and the internal changes to sdb :thinking:

Geoff

One possible reason for this would be update-grub is the Ubuntu’s attempt to make working with grub – or installing new kernels – easier. And Fedora historically used grubby for updating grub menu after installing new kernels. As far as I understand it, both grubby and update-grub is not part of upstream grub distribution.

Also it looks like going forward the use of grubby will be deprecated in Fedora.

Well, I think you’ll just have to live with this ) As far as I know, the first drive (usually one containing root partition) is always designated as sda in linux. Although it may be possible to force linux to designate external drive as sdb even when you’re booting from it (through use of udev rules, for example) – I wouldn’t do it as it breaks the defaults.

And the strategy for consistent boot menu on external drive I’ve outlined above should help you reach your target regardless of drive designations.

1 Like

Appreciate this is an awfully late reply but had an extended visit to US, Fedora was not available to me over there on the machine I was using.

With guidance from this forum, and a few mistakes on my part, I now have custom menus on both internal and external drives.

I did have one awkward mishap, seeing a post elsewhere I disabled the 30_os-prober by removing the x flag on permissions. For some reason 40_custom then did not show up on the menu. I’d already disabled 10_linux so didn’t have a menu at all.

Re-enabled 30_os-prober and all returned.

Once again, thanks for all the input.

Geoff