diff -Nru grub-installer-1.32ubuntu1/debian/changelog grub-installer-1.32ubuntu2/debian/changelog --- grub-installer-1.32ubuntu1/debian/changelog 2008-06-16 10:45:16.000000000 -0500 +++ grub-installer-1.32ubuntu2/debian/changelog 2008-08-06 19:40:14.000000000 -0500 @@ -1,3 +1,10 @@ +grub-installer (1.32ubuntu2) intrepid; urgency=low + + * grub-installer: add support for writing an MBR on each disk in an + mdadm-managed RAID providing /boot (LP: #33649). + + -- Dustin Kirkland Wed, 06 Aug 2008 19:38:08 -0500 + grub-installer (1.32ubuntu1) intrepid; urgency=low * Resynchronise with Debian. Remaining changes: diff -Nru grub-installer-1.32ubuntu1/grub-installer grub-installer-1.32ubuntu2/grub-installer --- grub-installer-1.32ubuntu1/grub-installer 2008-06-16 10:22:17.000000000 -0500 +++ grub-installer-1.32ubuntu2/grub-installer 2008-08-06 19:54:23.000000000 -0500 @@ -349,6 +349,19 @@ $chroot $ROOT mount /proc $chroot $ROOT dmsetup mknodes fi +# Check of the boot file system is on an mdadm device +elif type mdadm >/dev/null 2>&1; then + frdisk_list= + md=$(findfs "/boot") + for frdisk in $(mdadm --detail "$md" 2>/dev/null | \ + grep " active sync " 2>/dev/null | \ + sed "s/^.* active sync\s*//" 2>/dev/null \ + ); do + # Build a list of devices in the mirror + frdisk_list="$frdisk_list $frdisk" + frdev= + frtype="mdadm" + done fi info "Identified partition label for $bootfs: $bootfslabel" @@ -661,15 +674,14 @@ else # Semi-manual grub setup for Serial ATA RAID/multipath - info "Boot partition is on a Serial ATA RAID disk or multipath device" - info "Installing GRUB to $frdev; grub root is $disc_offered" + info "Boot partition is on a Serial ATA RAID disk, multipath, or mdadm device" case $(archdetect) in i386/*) stagedir=i386-pc ;; amd64/*) stagedir=x86_64-pc ;; *) - error "Unsupported architecture for SATA RAID/multipath installation" + error "Unsupported architecture for SATA RAID/multipath/mdadm installation" exit 1 ;; esac @@ -680,6 +692,22 @@ mkdir -p $ROOT/boot/grub cp $ROOT/usr/lib/grub/$stagedir/* $ROOT/boot/grub + if [ "$frtype" = "mdadm" ]; then + for frdisk in $frdisk_list; do + frdev=$(echo "$frdisk" | sed "s/[0-9]\+$//") + disc_offered=$frdev + frbootpart=${frdisk#$frdev} + frgrubroot=$((frbootpart-1)) + write_grub + done + else + write_grub + fi + +fi + +write_grub() { + info "Installing GRUB to $frdev; grub root is $disc_offered" # TODO: Check for errors during this process! TERM=linux $chroot $ROOT \ grub --device-map=/dev/null >/var/log/grub-${frtype}.log 2>&1