(I'm separating this from the grub2 stuff because it works with any
bootloader that allows you pass a boot parameter to your kernel.)

This turned out to be easier than I thought -- but be aware that your
kernel must have "EFI GUID partition table support" compiled in before
you start anything else. (See the File Systems/Partition Types menu.)

BTW, you don't need to have a newer computer with EFI support. An old
BIOS machine uses a GPT just fine as long as your kernel knows about it.

The only other tool you need is sys-apps/gdisk, which will convert your
traditional DOS partition table to GPT -- and back again if you want.

I strongly suggest that you practice on a USB thumb drive before you
risk your real partition table!

There is one small complication with thumb drives that you won't run
into with real hard drives: gdisk may complain that the thumb drive's
partition table overlaps a partition.

If you don't want to delete your thumb drive's partition you can use
gparted (or parted) to shrink the drive's partition to leave 3 megabytes
or so at the end of the drive.  Again, you won't need to worry about
this if/when you work on a real hard drive.

# gdisk /dev/sdd  (assuming your USB stick is sdd and newer than FAT16)

After reading the horrifying warnings you can type ? to see a list of
gdisk commands.  If you know fdisk, most of the commands will be old
friends by now.

You want "recovery and transformation options (experts only)". You'll
soon be an expert, so worry not.

Next: "load MBR and build fresh GPT from it".  You can ignore the next
horrifying warning because gdisk will give you yet another last chance
to quit without saving your disgusting changes.

When you're finally ready: "write table to disk and exit".  Done!

Now unplug/replug your thumb drive to force the kernel to re-read its
shiny new GPT partition table.

If you see errors, you probably forgot step number one:  build and boot
a kernel with CONFIG_EFI_PARTITION=y.  Otherwise you should be able to
use the thumb drive as you always do.

I suggest that you use gdisk to convert the thumb drive's GPT back to
the traditional DOS/MBR partition table, just so you know you can do it
if you really need to.  And then convert it back again to GPT so you can
try the next part of our experiment.

Now, the point of this whole exercise (IIRC) is to allow your kernel to
mount your root partition without knowing its name (/dev/sdxx).

You can now try it without risking your hard drive, thanks to the new
GPT on your thumb drive. (This will work only for kernels >=2.6.37!!!)

The secret is to use your bootloader (e.g.grub) to pass a kernel boot
parameter like this: root=PARTUUID=<your partition UUID>.

Ah, but exactly what *is* your partition UUID?  This is important!

The only way I've discovered to find the correct UUID (out of the many
possible choices) is to use gdisk, which created the UUID in the first
place.

Note: the UUID you need is *not* the one you see in /dev/disk/by-uuid.
This is indeed very stupid, and I'm hoping that someone will fix it.

# gdisk /dev/sdd  (again assuming that your thumb drive is sdd)

Use the "i" command to display detailed info about the partition where
you plan to save a copy of your kernel.  For example:

Partition GUID code: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (Linux/Windows data)
Partition unique GUID: 6BAD4248-FC6D-4487-A255-A3B57504BE10
First sector: 16065 (at 7.8 MiB)
Last sector: 131106464 (at 62.5 GiB)
Partition size: 131090400 sectors (62.5 GiB)
Attribute flags: 0000000000000000
Partition name: Linux/Windows data

The one you need is the "unique GUID": 6BAD4248-FC6D-4487-A255-A3B57504BE10

(I wish I could tell you what the "GUID code" is for, but I have NFI.)

So, in this specific example, the kernel boot parameter I would use is:

root=PARTUUID=6BAD4248-FC6D-4487-A255-A3B57504BE10

Note that the "PARTUUID" keyword was introduced very recently in linux kernel
2.6.37, and it has nothing whatever to do with the "UUID" keyword used in the
many online tutorials on how to build an initrd!

The whole point of this exercise is to show you how to avoid the need for an
initrd in the first place.

I've run out of steam for today.  Questions/corrections are welcome :)





Reply via email to