GRUB 'Unknown filesystem' weirder than usual

Hello, bear with me, this will take some explaining.

This is a partition diagram of what I have currently connected to my notebook:


- Internal Hard Drive
  - NTFS - Winodws XP (currently broken)
  - Ext4  - openSUSE Tumbleweed
  - Swap
- External HDD
  - NTFS - Miscellaneous Data
  - Ext4  - /home
  - Ext4  - Ubuntu
  - Extended
    - Ext4   - openSUSE Tumbleweed
    - FAT32 - Currently unused
    - Swap

I want to boot the openSUSE Tumbleweed, that is on that external HDD. I have done that on other computers without a problem by just choosing the external HDD in the Boot Menu of the BIOS.

On this computer, it just doesn’t work. When I try to select it in the Boot Menu, it shows the ‘grub rescue: unknown filesystem’ error. There is a pretty common solution for this:

  1. ls
  2. ls (hdX,Y)/
  3. repeat 2. until it doesn’t say unknown filesystem
  4. set the partition from 3. as root
  5. insmod normal
  6. normal
    The problem for me is, that the internal drive’s partitions get recognised normally, but there are only four partitions listed under the external hdd and all of them are ‘unknown filesystem’.

As I said, if I connect the drive to a different computer, it works normally.

Many thanks in advance to whoever is able to solve my problem,
Greenscreener

PS: I am horrible at naming things, if you get an idea on a different title, tell me.

At that stage of booting, BIOS services are being used to read the disk.

It looks as if the BIOS on that computer has problems with your external drive.

Oh, my notebook is an HP EliteBook 6930p, is there anything I can do?

Can you show output of “fdisk -l” under Linux?


Disk /dev/sda: 232,9 GiB, 250059350016 bytes, 488397168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xdf4edf4e


Device     Boot     Start       End   Sectors   Size Id Type
/dev/sda1              63 390625000 390624938 186,3G  7 HPFS/NTFS/exFAT
/dev/sda2  *    390625280 480583679  89958400  42,9G 83 Linux
/dev/sda3       480583680 488396799   7813120   3,7G 82 Linux swap / Solaris








Disk /dev/sdb: 931,5 GiB, 1000202043392 bytes, 1953519616 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0002846e


Device     Boot      Start        End    Sectors   Size Id Type
/dev/sdb1  *          2048 1535508479 1535506432 732,2G  7 HPFS/NTFS/exFAT
/dev/sdb2       1535508480 1746444287  210935808 100,6G 83 Linux
/dev/sdb3       1746444288 1834354687   87910400  41,9G 83 Linux
/dev/sdb4       1834354688 1953519615  119164928  56,8G  f W95 Ext'd (LBA)
/dev/sdb5       1834356736 1937356799  103000064  49,1G 83 Linux
/dev/sdb6       1937358848 1937891327     532480   260M  c W95 FAT32 (LBA)
/dev/sdb7       1937893376 1953519615   15626240   7,5G 82 Linux swap / Solaris



(I am mildly surprised that the external can be booted from other computers, but that may be because we don’t know what boot code is installed on it.)

You should be able to boot the external TW from the internal TW’s Grub menu if you boot the internal and update its bootloader while the external is attached and turned on. Os-prober used by the internal’s update process should automatically add at least one entry to do so, unless you have disabled its os-prober in its /etc/default/grub.

Both likely have the same reason - if grub fails to read disk, it also fails to follow logical partitions chain. fdisk output looks good. How do you connect this disk (USB, eSATA, whatever)?

Actually, it workes on multiple computers without a problem, I would even say, that it works more often than it doesn’t. I also have a feeling, that it tends to work more on newer computers. Also, what is boot code, is there a way of me obtaining it and can it help you somehow?

Yes, GRUB detects all the OSes on the drive and shows them, but when I try to boot them, it says ‘unknown device: uuid’ and then something about having to select the kernel first.

The external drive is connected over USB. The cable and drive port is 3.0 but the computer’s port is 2.0, if that helps. (In the past, the drive has booted from both 3.0 and 2.0)

To be precise:


error: no such device: 267f0a04-2f07-463a-b981-a1c31fa48ddf.
error: no such partition.
error: you need to load the kernel first.

Press any key to continue...

This is expected in this case, if grub does not know filesystem on disk it also cannot search for UUID. Are you using legacy BIOS or EFI?

Legacy BIOS

That FAT32 partition was originally ment for the EFI, but then I decided to use legacy BIOS for support for older PCs as I connect my drive to a lot of various computers. But I am no professional and don’t know the advantages / disadvantages. Is it worth to switch to EFI and is it even possible?

Exactly which Grub version is installed in TW on the internal disk? As arvidjaar wrote, a UUID can’t be read from a filesystem it doesn’t understand. Grub Legacy cannot handle EXT4 partitions formatted with the 64bit option that’s been default since ~26 months ago.

Something to test: substitute /dev/sdb5 for the UUID=<blah…> string in the first disk’s Grub stanza.

Internal GRUB version: 2.02-26.1
External GRUB version: 2.02-26.1

What do you mean by that? I tried to google translate the word “stanza”, but I don’t think I got what you ment… Is GRUB composing poetry now? :smiley: I am confused.

menuentry 'TW' {
    set root=(blah)
    more blah
    even more blah
    blah blah blah blah
    linux /boot/vmlinuz blah UUID^H^H^H^Hroot=/dev/sdb5 blah
    initrd /boot/initrd...
}

Everything in the code block comprises one stanza.

Where can I find that to edit it?

Hit the e key at the Grub screen.

Give me a sec.

Still the same output.