From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1NSgtE-0004OB-DJ for mharc-grub-devel@gnu.org; Wed, 06 Jan 2010 20:10:16 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NSgtD-0004O6-2A for grub-devel@gnu.org; Wed, 06 Jan 2010 20:10:15 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NSgt8-0004Nu-QQ for grub-devel@gnu.org; Wed, 06 Jan 2010 20:10:14 -0500 Received: from [199.232.76.173] (port=34176 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NSgt8-0004Nr-LA for grub-devel@gnu.org; Wed, 06 Jan 2010 20:10:10 -0500 Received: from mga02.intel.com ([134.134.136.20]:51938) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NSgt8-00083f-4Q for grub-devel@gnu.org; Wed, 06 Jan 2010 20:10:10 -0500 Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga101.jf.intel.com with ESMTP; 06 Jan 2010 17:09:37 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.49,232,1262592000"; d="scan'208";a="481928721" Received: from debian.sh.intel.com (HELO [10.239.13.65]) ([10.239.13.65]) by orsmga002.jf.intel.com with ESMTP; 06 Jan 2010 17:09:36 -0800 From: Zhu Yi To: Robert Millan In-Reply-To: <20100106135024.GA2360@thorin> References: <1262769004-21960-1-git-send-email-yi.zhu@intel.com> <1262769004-21960-2-git-send-email-yi.zhu@intel.com> <20100106135024.GA2360@thorin> Content-Type: text/plain; charset="UTF-8" Date: Thu, 07 Jan 2010 09:10:05 +0800 Message-ID: <1262826605.15653.157.camel@debian> Mime-Version: 1.0 X-Mailer: Evolution 2.28.1 Content-Transfer-Encoding: 7bit X-detected-operating-system: by monty-python.gnu.org: Genre and OS details not recognized. Cc: "grub-devel@gnu.org" , Zhu Yi Subject: Re: [PATCH 2/2] Add grub-install --restore option X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Jan 2010 01:10:15 -0000 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 < > @@ -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