10-setup in GRUB_PC does not work for software raid 4.0~beta2+experimental41

David Dreezer dave at socialstrata.com
Wed Dec 1 01:57:53 CET 2010


Hi All,

The 10-setup in GRUB_PC as provided with 4.0~beta2+experimental41 does not seem to work for software raid. I managed to make it work after a fashion, but not elegantly so, as you'll see.

Hope I'm not going overboard with providing information, but more is better than less, I'd imagine.

My fai server is Debian GNU/Linux 5.0 \n \l  and I am installing the same.

dpkg --list | grep fai
ii  fai-client                        4.0~beta2+experimental41   Fully Automatic Installation client package
ii  fai-doc                           4.0~beta2+experimental41   Documentation for FAI
ii  fai-server                        4.0~beta2+experimental41   Fully Automatic Installation server package
ii  fai-setup-storage                 4.0~beta2+experimental41   automatically prepare storage devices

/usr/share/doc/fai-doc/examples/simple/scripts/GRUB_PC/10-setup/config/scripts/GRUB_PC/10-setup

#! /bin/bash

error=0 ; trap "error=$((error|1))" ERR

set -a

# during softupdate use this file
[ -r $LOGDIR/disk_var.sh ] && . $LOGDIR/disk_var.sh

[ -z "$BOOT_DEVICE" ]    && exit 701

$ROOTCMD grub-mkdevicemap --no-floppy

for device in $BOOT_DEVICE; do
  $ROOTCMD /usr/sbin/grub-install --no-floppy --modules="lvm raid" "$device"
done

$ROOTCMD update-grub

exit $error

The scenario:

We have a number of servers, of which we have two classes: multidisk hardware raid, and 2 disk software raid (raid1). On all servers we have /boot as the first partition, then swap, then /. The provided sample 10-setup did work successfully with the hardware raid servers, however on the software raid servers it did not.

What do I mean didn't work?

The script actually ran with no error, nothing in fai.log or the error log to indicate a problem. No issues in shell.log. But, the servers would reboot, go to grub, then error 15, which is file not found. Pretty vexing.

What finally did work?

I came out with a pretty crude hack, as you see below. It is a combination of parts that I've found posted here. The reason I call it crude is obvious, I'm sure. I'm hardcoding  the SW_RAID part of the script to match my needs, boot being (md0) not (hd0), but a more elegant solution would be to programmatically determine the correct place for it. I am setting TYPE=HW_RAID or TYPE=SW_RAID in my vars file for the case switch, and while seems to make it work OK it would be far nicer if the script could figure this out by itself. In any event, I've just got to think I'm not the only guy trying to get software raid going and the supplied 10-setup doesn't seem to work for it at all. At least this should help.

$FAI/config/scripts/GRUB_PC/10-setup

#! /bin/bash

# copyright Thomas Lange 2001-2007, lange at debian.org

error=0 ; trap "error=$((error|1))" ERR

# during softupdate use this file
[ -r $LOGDIR/disk_var.sh ] && . $LOGDIR/disk_var.sh

[ -z "$BOOT_DEVICE" ]    && exit 701

# FIXME terrible hack below here. I'm assuming that SW_RAID is always using /dev/md0 as the BOOT_DEVICE
# This may not necessarily be true and needs to be fixed programatically.

case $TYPE in

   HW_RAID)

	$ROOTCMD /usr/bin/grub-mkimage --output=/boot/grub/core.img ext2 pc biosdisk raid
	$ROOTCMD /usr/sbin/grub-install $BOOT_DEVICE
	$ROOTCMD /usr/sbin/grub-setup $BOOT_DEVICE
	$ROOTCMD /usr/sbin/update-grub
	$ROOTCMD update-initramfs -k all -u
	;;

   SW_RAID)

	$ROOTCMD /usr/bin/grub-mkimage --output=/boot/grub/core.img ext2 pc biosdisk raid
	$ROOTCMD /usr/sbin/grub-install '(md0)'
	$ROOTCMD /usr/sbin/grub-setup '(md0)'
	$ROOTCMD /usr/sbin/update-grub
	$ROOTCMD update-initramfs -k all -u
	;;

esac

exit $error



David Dreezer
Social Strata, Inc.





More information about the linux-fai mailing list