EFI/ZFS Update: successful tests, need more complex vdevs
Eric McCorkle
eric at metricspace.net
Fri Jan 15 14:23:11 UTC 2016
On 01/15/16 06:51, Renato Botelho wrote:
>> On Jan 15, 2016, at 00:41, Steven Hartland <killing at multiplay.co.uk> wrote:
>>
>> Just wanted to let everyone know that I just finished committing these changes to the tree.
>>
>> Huge thanks to Eric's for his work on this, as well as everyone else who contributed.
>>
>> I've set the target for MFC of 2 weeks, so I hope to be able to get this into stable/10 before the 10.3 slush, so if you're interested in this change please test a head build > r294068 ASAP.
>
> Great work, thanks!
>
> Is there a way to move a installed ZFS system to EFI?
>
(Refer to Steven's guide for the simple case where you can create an EFI
partition)
== Using GRUB ==
GRUB can be used with loader.efi on a ZFS system (I use this myself, as
I have a Gentoo install in the same ZFS volume)
Make sure you install GRUB with EFI support (the ports collection will
handle this). The grub port comes with a script that auto-detects
filesystems and sets up a grub.cfg in /boot/grub/. However, that script
won't properly detect ZFS partitions, so you'll need to add it manually.
The entry is simple.
I have a zfs volume called "data", which has the freebsd system root on
the filesystem data/freebsd. The GRUB entry then is:
menuentry "FreeBSD" {
search.fs_label data ZFS_PART
chainloader ($ZFS_PART)/freebsd@/boot/loader.efi
}
The first line searches for the volume "data" and binds its device to
the variable ZFS_PART. The second specifies that the chained bootloader
is under the filesystem "freebsd" (the @ at the end of the name denotes
a filesystem, not a path), with the path /boot/loader.efi
== Disks without enough space to make the GPT or EFI partition ==
If you have a ZFS filesystem on an MBR disk, or on a GPT disk without
enough space to create a workable EFI partition, you can use one of
ZFS's lesser-known features: zfs send/recv.
ZFS send and recv allow an entire filesystem to be serialized out to a
stream, and then read back in. You can use this to dump the entire
filesystem out to a removable storage or an NFS mount. Then, use an
install disk or memstick and repartition your drive, using zfs recv to
recreate the filesystem.
== On a Mac ==
(Note: this is based on research that is several years old at this
point. Also, I never actually field tested this myself.)
Macs are wierd, due to their non-standard EFI. The Mac EFI
implementation looks for an HFS+ partition, and loads the "blessed" file
as the EFI bootloader (this is a special filesystem-level metadata
unique to HFS+ filesystems).
In order to do an EFI boot on a mac, you'd need some way of
manufacturing an HFS+ partition containing only your bootloader, with
that file being "blessed". The easiest way to do this would be to use a
Mac OS install to create an empty HFS+ filesystem, add your boot loader,
then use a shell command to "bless" it (this command exists, but I don't
remember what it is offhand). It also wouldn't be too hard to write a
tool to create an HFS+ image from a file (I have a half-written
implementation of that lying around somewhere).
Also note that Macs expect a 200MB EFI partition (which isn't actually
used for anything), and I've heard reports of the firmware flaking out
if it's not there.
I believe there are also GRUB and rEFIt options for Mac, if you don't
want to go to these lengths.
More information about the freebsd-hackers
mailing list