Ultra nasty hack made to 'gpt' for booting support.

Matthew Dillon dillon at apollo.backplane.com
Tue Jul 29 18:12:21 PDT 2008


    I've made a really ultra-nasty hack to gpt to make it possible to boot
    from a gpt, but there are some issues:

    * We don't have an EFI boot yet, so this hack probably only works on
      non-EFI BIOSes (which are most of them).

    * There are a lot of steps to making this thing actually boot.   Very
      little of it is automated or cleaned up yet.

    Here's how it works (using da8 as an example):

    * Destroy any previous gpt or mbr on the disk so you can start fresh.

      dd if=/dev/zero of=/dev/da8 bs=512 count=4

    * Create a fresh gpt for the disk. 

      gpt create da8

    * Create the hacked up special boot partition.  It must be partition 0
      and it will complain if you already have a gpt partition 0:

      gpt boot da8

    * Create a disklabel32 on the boot partition and set up the boot
      filesystem.

      disklabel -B -r -w da8s0 auto
      disklabel -e da8s0
      (add the 'a' partition)

      newfs /dev/da8s0a
      mount /dev/da8s0a /mnt
      cpdup /boot /mnt/boot
      cp /kernel /mnt/kernel

      vi /mnt/boot/loader.conf 
      (add the rootmount line)

	  vfs.root.mountfrom="ufs:da8s1a"

      umount /mnt

    * Add a gpt partition for your root.  This will use up the entire
      remainder of the disk:

      gpt add da8

    * For the moment the root partition does have to be disklabeled, until
      I (or someone) fixed the kernel to allow just a slice to be specified.
      You CAN use either a 32 or a 64 bit disklabel here, and no boot
      blocks are needed (or supported):

      disklabel64 -r -w da1s1 auto
      disklabel64 -e da1s1
      (add the 'a' partition)
      mount /dev/da1s1a /mnt
      cpdup / /mnt
      umount /mnt

    And that's it.  When the machine boots up the loader will see the boot
    partition as a MBR slice, and the kernel will see that whole disk as a
    GPT disk.

    I think it will work with a HAMMER root but I haven't tested that
    yet.

    This may not work on all boxes, and it should be considered HIGHLY
    EXPERIMENTAL.

    --

    If someone would like to take on some easy loader and kernel projects,

    * We want to fix the loader so the boot partition does not have to be
      disklabeled, and

    * We want to fix the kernel so the root partition (specified in the
      vfs.root.mountfrom kernel load variable) does not have to be
      disklabeled.

    This is pretty cool, I have one of my test boxes booting from a USB
    key which I've GPT-partitioned using this hack.

						-Matt






More information about the Kernel mailing list