1.94. UEFI & OpenBSD 6.9 & Ubuntu 21.04 & Windows 10 Triple boot on 2 hard drives (engl)

Als Ausnahme für unser Wiki dieser englische Artikel von Dettus, damit er nicht im Forum verloren geht.

Usally this wiki is only in German, but we thought this might be intresting for everyone.

So, I am posting this in English, since I googled A LOT to find it. I am sure there are other people out there with the same problem.

I have a special setup! My computer has 2 hard drives, and I wanted to install 3 operating systems. So why Dual Boot when you can TRIPLE BOOT? I was also forced to use UEFI (Damn you Ubuntu 21.04), luckily this is no longer a problem for my favorite OS, OpenBSD 6.9. And because I like playing StarCraft 2, I needed a Windows 10 as well.

Here it goes…

Hinweis

First of all: NO BACKUP, NO MERCY! Secondly: The order of installing the Operating systems is important. Mine was Windows, OpenBSD, Ubuntu. Windows got the first hard drive, (actually nvme). OpenBSD got the first 50% of the second drive, Ubuntu the second 50%.

For the impatient ones: This is what it looks like from the Ubuntu point of view in the end.

 % fdisk /dev/nvme0n1

 ..
 Command (m for help): p
 ...
 Device              Start        End    Sectors   Size Type
 /dev/nvme0n1p1       2048     206847     204800   100M EFI System
 /dev/nvme0n1p2     206848     239615      32768    16M Microsoft reserved
 /dev/nvme0n1p3     239616 1999364205 1999124590 953,3G Microsoft basic data
 /dev/nvme0n1p4 1999366144 2000406527    1040384   508M Windows recovery environm
 ...
 Command (m for help): q
 ...
 % fdisk /dev/nvme1n1
 ...
 Command (m for help): p
 ...
 Device              Start        End    Sectors   Size Type
 /dev/nvme1n1p2         64       1023        960   480K EFI System
 /dev/nvme1n1p3 1000101124 2000409200 1000308077   477G Linux filesystem
/dev/nvme1n1p4       1024 1000101123 1000100100 476,9G OpenBSD data
 ...

 Command (m for help): q
 ...

 % cat /etc/grub.d/40_custom
 #!/bin/sh
 exec tail -n +3 $0
 # This file provides an easy way to add custom menu entries.  Simply type the
 # menu entries you want to add after this comment.  Be careful not to change
 # the 'exec tail' line above.
 menuentry 'OpenBSD 6.9/amd64' {
   set root='(hd0,gpt4)'
   chainloader (hd0,gpt2)/efi/boot/bootx64.efi
 }
 % update-grub

STEP1: I started by doing a backup. (NO BACKUP, NO MERCY).

STEP 2: I used a different machine to create 3 USB drives for my 3 operating systems. One for Windows, OpenBSD and Ubuntu.

Creating the USB drive for the OpenBSD install works best on a Unix system:

% wget https://ftp.openbsd.org/pub/OpenBSD/6.9/amd64/install69.img
% dd if=install69.img of=/dev/XXXX bs=1M

For the other two, I used Windows.

STEP 3: I erased the first sector from my drives, to clear the partition table

% dd if=/dev/zero of=/dev/nvme0XXXX bs=1M count=16
% dd if=/dev/zero of=/dev/nvme1XXXX bs=1M count=16

Now there was no way back. Luckily, I had a backup ;)

STEP 4: I installed Windows. My BIOS required me to press F12 to see the boot options, I chose UEFI boot from the USB drive. I installed it on the first hard disk.

STEP 5: I booted the OpenBSD stick. At the prompt, I chose (S)hell.

# cd /dev/
# sh MAKEDEV sd1
# fdisk -e /dev/rsd1c

set up the partions. In the following order: 0, 1, 3, 2

0: unused
1: type EF. From 64-960
3: type A6. From 1024-1000100100
2: type 83. From 1000100124-end

The exit and (I)nstall. I used the OpenBSD partition. To be honest: I am writing this one down from memory. If it does now work, I guess that starting the installation, choosing WHOLE when prompted, and Interrupting during the disklabel setup, and then doing an fdisk might also be an option.

The next time I booted using the boot options, I had a new UEFI entry which was giving me OpenBSD. NICE!

STEP 6: I installed Ubuntu. When asked about the partitioning, I chose Something else and was LUCKY THAT Ubuntu used the Windows-UEFI-Partition for its bootloader. The GRUB bootloader was able to find Windows on its own. I rebooted twice: Once to see if Linux was booting. Once to see if windows was booting, and if I could select which one using GRUB menu.

STEP 7: I had to figure out which harddrive the OpenBSD efi bootloader was on. So when the grub screen showed up, I pressed c for command line options.

grub> ls

Which showed me some partitions. Since I installed the OpenBSD efi loader on partition 1 and OpenBSD on partition 3, I was able to find what i needed on hd0,gpt2 and hd0,gpt4.

grub> ls (hd0,gpt2)/efi/boot
bootx64.efi ...
grub> ls (hd0,gpt4)/
bsd bsd.rd ...

I tried it out, using

grub> set root='(hd0,gpt4)'
grub> chainloader (hd0,gpt2)/efi/boot/bootx64.efi
grub> boot

And it booted!

STEP 8: I rebooted into Linux, and updated grub. More precisely /etc/grub.d/40_custom. This is what it looked like afterwards:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry 'OpenBSD 6.9/amd64' {
    set root='(hd0,gpt4)'
    chainloader (hd0,gpt2)/efi/boot/bootx64.efi
}

All that was left now was running

% update-grub

(I ignored the warnings about those extra partitions. )
So now, at boot time, I can choose any of my three Operating systems.

Keywords: Tutorial. Tripe Boot. Dual Boot. Grub. UEFI. OpenBSD. Linux. Ubuntu. Windows.

This howto was originally created by dettus and postet in our forum.

Zuletzt geändert: 2023-07-22