grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/2] Add grub-install --restore option


From: Robert Millan
Subject: Re: [PATCH 2/2] Add grub-install --restore option
Date: Wed, 6 Jan 2010 14:50:24 +0100
User-agent: Mutt/1.5.18 (2008-05-17)

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.

-- 
Robert Millan

  "Be the change you want to see in the world" -- Gandhi




reply via email to

[Prev in Thread] Current Thread [Next in Thread]