On Wed, 2010-01-06 at 21:50 +0800, Robert Millan wrote: > Hi, > > On Wed, Jan 06, 2010 at 05:10:04PM +0800, Zhu Yi wrote: > > diff --git a/util/i386/pc/grub-install.in b/util/i386/pc/grub-install.in > > index 8a06213..4d0043e 100644 > > --- a/util/i386/pc/grub-install.in > > +++ b/util/i386/pc/grub-install.in > > @@ -51,6 +51,7 @@ no_floppy= > > force_lba= > > recheck=no > > debug=no > > +restore= > > > > if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then > > disk_module=biosdisk > > @@ -77,6 +78,7 @@ Install GRUB on your drive. > > --no-floppy do not probe any floppy drive > > --recheck probe a device map even if it already exists > > --force install even if problems are detected > > + --restore restore the previous boot sectors > > EOF > > if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then > > cat <<EOF > > @@ -129,6 +131,10 @@ for option in "$@"; do > > debug=yes ;; > > -f | --force) > > setup_force="--force" ;; > > + --restore) > > + restore="$grub_prefix/bootsectors.bak" ;; > > + --restore=*) > > + restore=`echo "$option" | sed 's/--restore=//'` ;; > > -*) > > echo "Unrecognized option \`$option'" 1>&2 > > usage > > @@ -203,6 +209,29 @@ else > > exit 1 > > fi > > > > +if test -f "$restore"; then > > + if test `stat -c%s $restore` -eq 512; then > > + dd if=$restore of=$install_device bs=512 count=1 > > + exit 0 > > + fi > > + start=`od -j92 -N8 -An -td8 $grubdir/boot.img` > > + > > + # Synaty check > > + if test $((`stat -c%s $restore` - $start * 512)) -ne \ > > + `stat -c%s $grubdir/core.img`; then > > + echo "Error: $restore doesn't match core.img, restore aborted." > > + exit 1 > > + fi > > + > > + # Restore > > + dd if=$restore of=$install_device bs=512 count=1 > /dev/null 2>&1 > > + dd if=$restore of=$install_device skip=512 seek=`expr $start \* 512` \ > > + bs=1 > /dev/null 2>&1 > > + rm -f $restore > > + echo "Restore boot sectors from $restore successfully" > > + exit 0 > > +fi > > Please don't add this to grub-install. This kind of highly BIOS-specific > logic would suit much better in grub-setup.
Do you prefer to implement above in C code and add a "--restore" option to grub-setup or create a separate script for doing this? Thanks, -yi _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel