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

Re: Ultimate Fedora partition scheme ?



On Thu, 18 Jun 2009 15:24:40 +0200
Valent Turkovic wrote:

> Could you be persuaded to publish more details on these tricks on your
> blog or here? ;)

Here's pretty much all the gory details:

I currently have the system setup like so:

/dev/sda1 - a fedora 10 "master" system 20GB partition with no
separate /boot, the /boot for this is just a directory inside
this root partition. Grub was installed for this one in the
MBR of the disk, and this is the normal default boot system.

/dev/sda2 - a swap area I share between all the different
linuxes (works well as long as you don't hibernate :-).

/dev/sda3 - the shared 60MB /boot partition. Every other linux
installed on this system is told to use this as /boot and
format it ext3 during the install and install grub on this
partition, NOT in the MBR.

In the master linux on /dev/sda1, I have one grub entry that
looks like this:

title Boot other linux
        rootnoverify (hd0,2)
        chainloader +1

So whatever copy of /boot happens to currently reside in
/dev/sda3 will determine which linux actually boots if I tell
grub to "Boot other linux".

By convention, I always use e2label to give the /boot
partition a unique disk label every time I install a new
linux, then my shell scripts can use e2label to check what is
currently installed and use the label name as the output file
name when doing a dd to save an existing /boot.

The dd commands are relatively simple, but grub is tricky.
When I want to boot a different linux (especially from
automated scripts while I'm not around to interact with grub),
I need to tell grub to boot the "other linux" entry next time
I say reboot.

That procedure is documented in great detail in the grub info
file, and the actual grub binary doesn't work anything like
the info file says it works :-(.

Here's my boot-other script to trick grub into booting entry #2
(instead of the normal defaul 0) the next time I reboot:

cat > /tmp/bo$$ <<'EOF'
savedefault --stage2=/boot/grub/stage2 --default=2 --once
quit
EOF
grub < /tmp/bo$$
rm -f /tmp/bo$$

That makes the fedora 10 grub boot my "other linux" entry on
the next reboot, but if the system is rebooted again (from the
other linux, or by power hit or whatever), it will come back
up the next time in my "master" system.

The other scripts aren't so tricky, they are just doing some
dd commands. Here's the save-boot script that saves the
current contents of /dev/sda3:

othername=`e2label /dev/sda3`
if [ -n "$othername" ]
then
   dd if=/dev/sda3 of=/bootbox/"$othername" ibs=10240
else
   echo Missing label for /dev/sda3 partition 1>&2
   exit 2
fi

And the corresponding restore-boot script:

if [ $# -eq 1 ]
then
   if [ -r /bootbox/"$1" ]
   then
      dd if=/bootbox/"$1" of=/dev/sda3 ibs=10240
   else
      echo No such image /bootbox/$1 1>&2
      exit 2
   fi
else
   echo Missing partition label name to be restored 1>&2
   exit 2
fi

And the master switch-linux script that puts all the bits
together:

if [ $# -eq 1 ]
then
   newlinux="$1"
   curlinux=`e2label /dev/sda3`
   if [ -r /bootbox/"$newlinux" ]
   then
      if [ "$newlinux" != "$curlinux" ]
      then
         /usr/local/bin/save-boot
         /usr/local/bin/restore-boot "$newlinux"
      fi
      /usr/local/bin/boot-other
      reboot
   else
      echo $newlinux is not a saved linux I can boot 1>&2
      exit 2
   fi
else
   echo Missing linux name argument 1>&2
   exit 2
fi


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