Blog post about making a GRUB tampoline
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			This commit is contained in:
		@@ -69,7 +69,7 @@ address_format: dk
 | 
			
		||||
 | 
			
		||||
# Site features
 | 
			
		||||
 | 
			
		||||
highlight: false
 | 
			
		||||
highlight: true
 | 
			
		||||
math: false
 | 
			
		||||
diagram: false
 | 
			
		||||
privacy_pack: false
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ subtitle: "Tips and trick for embedded C/C++"
 | 
			
		||||
summary: "Tips and trick for embedded C/C++"
 | 
			
		||||
date: 2020-06-13T19:01:19+02:00
 | 
			
		||||
lastmod: 2020-06-13T19:01:19+02:00
 | 
			
		||||
highlight: true
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
# Set a bit
 | 
			
		||||
@@ -24,7 +25,6 @@ output = input & ~(1 << bit);
 | 
			
		||||
variable &= ~(1 << bit);
 | 
			
		||||
// Multiple bits
 | 
			
		||||
variable &= ~(0b101 << bit);
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
# Toggle a bit
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										86
									
								
								content/post/grub-trampoline/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								content/post/grub-trampoline/index.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,86 @@
 | 
			
		||||
---
 | 
			
		||||
# Documentation: https://wowchemy.com/docs/managing-content/
 | 
			
		||||
 | 
			
		||||
title: "GRUB Trampoline"
 | 
			
		||||
subtitle: "Install GRUB on a spare drive"
 | 
			
		||||
summary: "Using a spare drive to act as a trampoline during the boot process."
 | 
			
		||||
date: 2021-05-03T15:28:14+02:00
 | 
			
		||||
lastmod: 2021-05-03T15:28:14+02:00
 | 
			
		||||
highlight: true
 | 
			
		||||
---
 | 
			
		||||
# Background
 | 
			
		||||
 | 
			
		||||
Due to a BIOS bug in my HP MicroServer I have applied this workaround. The MicroServer Gen8 has a bug that prevents the use of the 5th SATA port as the primary boot device. It will automatically attempt to boot from SATA port 1 if a drive is inserted, then port 2 and so forth. By removing all the fixed drives it is possible to make the system boot from port 5.
 | 
			
		||||
 | 
			
		||||
It is however possible to boot from the internal USB port or the internal MicroSD slot. So to solve this issue we are going to install GRUB onto a spare MicroSD card or a USB stick. The size or quality of the drive should not matter since we only need it for GRUB to jump to the drive present on the 5th SATA port.
 | 
			
		||||
 | 
			
		||||
# Steps
 | 
			
		||||
## Format the USB/SD Card
 | 
			
		||||
Find the correct device identifier.
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
lsblk
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Clear the drive by writing all zeros to the drive (for good measure)
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
sudo dd if=/dev/zero of=/dev/sdX
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Format the disk
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
sudo fdisk /dev/sdX
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Fdisk provides a shell where you can enter commands.
 | 
			
		||||
- Set the type to "o" for MSDOS
 | 
			
		||||
- Set the disk to be bootable "a"
 | 
			
		||||
- Make a new primary partition "n" followed by "n" Accept the remaining as default.
 | 
			
		||||
- Use "w" to commit the changes and exit the tool.
 | 
			
		||||
 | 
			
		||||
Now create a filesystem in the newly created partition.
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
sudo mkfs -t ext2 /dev/sdX1
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Prepare for GRUB install
 | 
			
		||||
Create a mount point
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
mkdir /tmp/mysub
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Mount the new parition
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
sudo mount /dev/sdX1 /tmp/myusb
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Create a folder named "boot" on the drive
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
sudo mkdir /tmp/myusb/boot
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Install GRUB
 | 
			
		||||
Install GRUB by running the grub-install script
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
sudo grub-install --boot-directory=/tmp/myusb/boot /dev/sdX
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Update the GRUB configuration
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
sudo update-grub --output=/tmp/myusb/boot/grub/grub.cfg
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Test
 | 
			
		||||
Finally unmount and reboot 
 | 
			
		||||
```shell
 | 
			
		||||
sudo unmount /tmp/myusb
 | 
			
		||||
sudo reboot
 | 
			
		||||
```
 | 
			
		||||
		Reference in New Issue
	
	Block a user