[CentOS] Reinstall Windows but preserve CentOS

Phil Schaffner Philip.R.Schaffner at nasa.gov
Fri Jul 29 15:02:08 UTC 2005


On Fri, 2005-07-29 at 22:49 +0900, Dave Gutteridge wrote:
>     How can I reinstall Windows with a clean partition, and preserve my 
> dual booting?

Can make a Grub boot floppy with a copy of the current grub.conf - see
script at bottom, [a simpler approach is to use "grub-install /dev/fd0"
to create a GRUB floppy, but I like having the config on the floppy -
allows modifications for different boot defaults, as well as providing a
backup] and/or make a boot CD:

# mkbootdisk --iso --device boot`uname -r`.iso `uname -r`

On my system this results in file boot2.6.9-11.106.unsupportedsmp.iso
which can then be written to CD with

# cdrecord -v -dao -eject -data driveropts=burnfree dev=/dev/hda boot2.6.9-11.106.unsupportedsmp.iso

(all one line - watch for wraps)

Either method will let you boot back to the installed system without
going though the rescue gyrations.  Can then rewrite grub with

# grub-install /dev/hda [ or whatever boot device ]

Phil

------------------------  Cut Here  ---------------------------------
#!/bin/bash
# mkgrubdisk
#
# Written by Phil Schaffner <p.r.schaffner at ieee.org>
#  based on mkbootdisk by Erik Troan <ewt at redhat.com>

pause=yes
format=yes
device=/dev/fd0
unset verbose

GRUBDIR=/boot/grub
MOUNTDIR=/tmp/mkgrubmenu
PATH=/sbin:$PATH
export PATH

VERSION=0.1

usage () {
    cat >&2 <<EOF
usage: `basename $0` [--version] [--noprompt] [--noformat]
       [--device <devicefile>] [--grubdir <dir>] [--verbose -v]
       (ex: `basename $0` --device /dev/fd1)
EOF
    exit $1
}

while [ $# -gt 0 ]; do
    case $1 in
	--device)
	    shift
	    device=$1
	    ;;
	--grubdir)
	    shift
	    GRUBDIR=$1
	    ;;
	--help)
	    usage 0
	    ;;
	--noprompt)
	    unset pause
	    ;;
	--noformat)
	    unset format
	    ;;
	-v)
	    verbose=true
	    ;;
	--verbose)
	    verbose=true
	    ;;
	--version)
	    echo "mkgrubdisk: version $VERSION"
	    exit 0
	    ;;
	*)
            usage
	    ;;
    esac

    shift
done

[ -d $GRUBDIR ] || {
    echo "$GRUBDIR is not a directory!" >&2
    exit 1
}



if [ -e "$device" ]; then {
    [ -n "$pause" ] && {
	echo -n "Insert a"
	[ -n "$format" ] || echo -n " vfat formatted"
	echo " disk in $device."
	echo "Any information on the disk will be lost."
	echo -n "Press <Enter> to continue or ^C to abort: "
	read aline
    }

    [ -n "$format" ] && {
	[ -n "$verbose" ] && echo "Formatting $device... "
	fdformat $device || exit 0
	mkfs.msdos $device > /dev/null 2>/dev/null || exit 0
	[ -n "$verbose" ] && echo "done."
    }

    rm -rf $MOUNTDIR
    mkdir $MOUNTDIR || {
	echo "Failed to create $MOUNTDIR" >&2
	exit 1
    }
    [ -d $MOUNTDIR ] || {
	echo "$MOUNTDIR is not a directory!" >&2
	exit 1
    }

    mount -wt vfat $device $MOUNTDIR || {
	rmdir $MOUNTDIR
	exit 1
    }

    mkdir $MOUNTDIR/grub

    [ -n "$verbose" ] && echo -n "Copying $GRUBDIR files... "
    cd $GRUBDIR
    cp -a stage1 stage2 grub.conf device.map splash.xpm.gz
$MOUNTDIR/grub
    [ -n "$verbose" ] && echo "done."

    [ -n "$verbose" ] && echo -n "Setting up GRUB... "
    grub --device-map=$GRUBDIR/device.map --batch <<EOF
root (fd0)
setup (fd0)
quit
EOF

    [ -n "$verbose" ] && echo "done."

    umount $MOUNTDIR
    rmdir $MOUNTDIR
    [ -n "$verbose" ] && echo "done setting up GRUB."
    echo "Edit (fd0)/grub/grub.conf to customize."
    echo "May want to use splashimage=(fd0)/grub/splash.xpm.gz"
}
else
    echo "$device does not exist"
fi






More information about the CentOS mailing list