diff options
author | Wilken 'Akiko' Gottwalt | 2021-05-27 09:29:01 +0200 |
---|---|---|
committer | Wilken 'Akiko' Gottwalt | 2021-05-27 09:29:01 +0200 |
commit | 79b08b2af3a551bcc32dd469ef8b50666c581c14 (patch) | |
tree | a5fddf03bc13818aaac4fdeaf41f72ecead86e84 /raid.patch | |
parent | 7c7ee87e51afb0b166e93fc399d39cf5c0729717 (diff) | |
download | aur-79b08b2af3a551bcc32dd469ef8b50666c581c14.tar.gz |
updated version to last maintained debian version (77)
Current binutils 2.36+ introduces an odd bug that causes the stage1
and stage2 files to bloat to over 100 MiB. This is not fixed yet.
Diffstat (limited to 'raid.patch')
-rw-r--r-- | raid.patch | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/raid.patch b/raid.patch new file mode 100644 index 000000000000..18c250dd7c96 --- /dev/null +++ b/raid.patch @@ -0,0 +1,72 @@ + +Copyright: Charles Steinkuehler <charles@steinkuehler.net>, except he borrowed +some code from other sources. He's cooperative about rewriting and/or doing +the paperwork. +Upstream: pending + +Index: b/util/grub-install.in +=================================================================== +--- a/util/grub-install.in ++++ b/util/grub-install.in +@@ -81,6 +81,50 @@ + EOF + } + ++# Usage: getraid_mdadm mddevice ++# Routine to find a physical device from an md device ++# If found, the first grub BIOS device (from device.map) is returned ++# If no BIOS drives match the RAID devices, the first device returned ++# from mdadm -D is returned ++getraid_mdadm() { ++ device=$1 ++ mdadm=$(mdadm -D "$device") || { ++ echo "$PROG: mdadm -D $device failed" >&2 ++ exit 1 ++ } ++ eval "$( ++ echo "$mdadm" | awk ' ++ $1 == "Number" && $2 == "Major" { start = 1; next } ++ $1 == "UUID" { print "uuid=" $3; start = 0; next } ++ !start { next } ++ $2 == 0 && $3 == 0 { next } ++ { devices = devices "\n" $NF } ++ END { print "devices='\''" devices "'\''" } ++ ' ++ )" ++ ++ # Convert RAID devices list into a list of disks ++ tmp_disks=`echo "$devices" | sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' \ ++ -e 's%\(d[0-9]*\)p[0-9]*$%\1%' \ ++ -e 's%\(fd[0-9]*\)$%\1%' \ ++ -e 's%/part[0-9]*$%/disc%' \ ++ -e 's%\(c[0-7]d[0-9]*\).*$%\1%' \ ++ -e '/^$/d' | ++ sed -n '1h;2,$H;${g;s/\n/|/g;p}'` ++ ++ # Find first BIOS disk that's a member of the RAID array ++ # Default to first RAID member if no tmp_disks are BIOS devices ++ set -- `egrep $tmp_disks $device_map | \ ++ sort | \ ++ sed -n 1p ` ++ device=${2:-${tmp_disks%%|*}} ++ ++ # Return first partition on BIOS disk that's part of the RAID ++ echo "$devices" | \ ++ sed -n "\:${device}:p" | \ ++ sed -n 1p ++} ++ + # Usage: convert os_device + # Convert an OS device to the corresponding GRUB drive. + # This part is OS-specific. +@@ -96,6 +140,10 @@ + # Break the device name into the disk part and the partition part. + case "$host_os" in + linux*) ++ # Find an actual physical device if we're passed a RAID device ++ case $1 in ++ /dev/md*) set -- `getraid_mdadm $1` ++ esac + tmp_disk=`echo "$1" | sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' \ + -e 's%\(d[0-9]*\)p[0-9]*$%\1%' \ + -e 's%\(fd[0-9]*\)$%\1%' \ |