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
|
# Site features
|
||||||
|
|
||||||
highlight: false
|
highlight: true
|
||||||
math: false
|
math: false
|
||||||
diagram: false
|
diagram: false
|
||||||
privacy_pack: false
|
privacy_pack: false
|
||||||
|
@ -4,6 +4,7 @@ subtitle: "Tips and trick for embedded C/C++"
|
|||||||
summary: "Tips and trick for embedded C/C++"
|
summary: "Tips and trick for embedded C/C++"
|
||||||
date: 2020-06-13T19:01:19+02:00
|
date: 2020-06-13T19:01:19+02:00
|
||||||
lastmod: 2020-06-13T19:01:19+02:00
|
lastmod: 2020-06-13T19:01:19+02:00
|
||||||
|
highlight: true
|
||||||
---
|
---
|
||||||
|
|
||||||
# Set a bit
|
# Set a bit
|
||||||
@ -24,7 +25,6 @@ output = input & ~(1 << bit);
|
|||||||
variable &= ~(1 << bit);
|
variable &= ~(1 << bit);
|
||||||
// Multiple bits
|
// Multiple bits
|
||||||
variable &= ~(0b101 << bit);
|
variable &= ~(0b101 << bit);
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
# Toggle a 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