[Bug 1466150] Re: grub-install breaks when ESP is on raid
Alejandro Mery
amery at geeks.cl
Mon Mar 4 15:06:19 UTC 2019
I wrote a not-so-little wrapper for efibootmgr to pretend grub-install
isn't broken:
# cd /bin
# mv efibootmgr efibootmgr.real
# ln -s efibootmgr.sh efibootmgr
efibootmgr.sh
---
#!/bin/sh
die() {
echo "$*" >&2
exit 1
}
run_device() {
local devdir="$1" label= label_set=
local devname= dev= partition=
shift
if [ "x$1" = "x-L" ]; then
label_set=true
label="$2"
shift 2
fi
devdir="$(cd "$devdir" && pwd -P)"
if [ -s "$devdir/partition" ]; then
read partition < "$devdir/partition"
devname="${devdir##*/}"
devdir="${devdir%/*}"
fi
dev="/dev/${devdir##*/}"
if [ -n "$label_set" -a -z "$label" ]; then
label=$devname
else
[ -n "$label" ] || label="$(lsb_release -si)"
label="$label ($devname)"
fi
set -x
"${0%.sh}.real" "$@" -L "$label" -d "$dev" ${partition:+-p $partition}
}
run_raid() {
local x= argv=
local label= label_set= label_next=
local device= devdir=
local md_level= md_disks=
# extract label
for x; do
if [ "$x" = "-L" ]; then
label_next=true
label_set=
label=
elif [ -n "$label_next" ]; then
label_next=
label_set=true
label="$x"
else
x=$(echo -n "$x" | sed -e 's|"|\\"|g')
argv="$argv \"$x\""
fi
done
if [ -n "$label_set" ]; then
x=$(echo -n "$label" | sed -e 's|"|\\"|g')
argv="-L \"$x\" $argv"
fi
device="$(grep ' /boot/efi ' /proc/mounts | cut -d' ' -f1)"
[ -b "$device" ] || die "ESP not mounted"
device="$(readlink -f "$device")"
devdir=/sys/class/block/${device##*/}
if read md_level < $devdir/md/level 2> /dev/null; then
if [ "$md_level" = raid1 ]; then
read md_disks < $devdir/md/raid_disks
for i in `seq $md_disks`; do
set +x
eval "run_device '$devdir/md/rd$(($i - 1))/block' $argv"
done
else
die "RAID $md_level not supported"
fi
else
# not RAID
set -x
eval "run_device '$devdir' $argv"
fi
exit 0
}
run_normal() {
exec "${0%.sh}.real" "$@"
}
set -eu
argv=
i=1
for x; do
if [ "$x" = "-d" -a $i -eq $# ]; then
# /boot/efi is /dev/md and grub-install can't handle it yet
eval "run_raid $argv"
die "never reached"
fi
: $((i = i+1))
x=$(echo -n "$x" | sed -e 's|"|\\"|g')
argv="$argv \"$x\""
done
set -x
eval "run_normal $argv"
---
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to grub-installer in Ubuntu.
https://bugs.launchpad.net/bugs/1466150
Title:
grub-install breaks when ESP is on raid
Status in grub-installer package in Ubuntu:
Triaged
Bug description:
I run a server with mirrored (RAID1) disks using grub-efi.
Root and /boot and /boot/grub are on mirrored partitions.
I have EFI partitions on both disks but it is not possible to RAID1
these as they are FAT32. On an EFI system grub-install will only
install to one of the EFI partitions and so after running install-grub
you have to remember to copy the EFI file across.
Could grub configuration and grub-install be amended to automatically
install to multiple disks?
Searching around there seem to be many people asking this question
without any elegant solution.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/grub-installer/+bug/1466150/+subscriptions
More information about the foundations-bugs
mailing list