grub-devel
[Top][All Lists]
Advanced

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

Re: [Patch] Enable libzfs detection on Linux


From: Vladimir 'φ-coder/phcoder' Serbinenko
Subject: Re: [Patch] Enable libzfs detection on Linux
Date: Thu, 18 Aug 2011 18:49:44 +0200
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.18) Gecko/20110626 Iceowl/1.0b2 Icedove/3.1.11

On 09.08.2011 19:48, Zachary Bedell wrote:
> Attached is a patch which allows Grub to detect and use libzfs on Linux as 
> provided by the ZfsOnLinux project.  
>
> Most of this work was originally done by Darik Horn (dajhorn on GitHub) 
> against the Grub 1.99 releases as patched by Ubuntu.  I've forward ported the 
> patches to trunk and separated some of the Ubuntu-specific stuff.  These 
> apply against trunk independent of the other ZFS work I've been doing.
>
> Changes include:
>
> configure.ac:  
>  * Add check for libspl to bring in Solaris Porting Library for Linux support.
>  * Include reference to Linux ZFS's config header to get necessary defines 
> for other ZFS headers on Linux.
>  * Add checks for libavl, libefi, libunicode, libzpool -- Linux decomposes 
> these libraries which are lumped into libzfs on other platforms.
>
> getroot.c:
>  * Add ref to mnttab.h from libspl to allow getextmntent to work on Linux.
>  * Change the order of the grub_find_root_device_from_mountinfo vs 
> find_root_device_from_libzfs calls so that libzfs runs first, falling down to 
> mountinfo if zfs isn't detected.
>  * Scan /proc/mounts and /etc/mtab in addition to /etc/mnttab to discover 
> mounted filesystems in grub_find_zpool_from_dir.
>

/etc/mtab is just a regular file and in many cases is out-of-sync with real 
state of affairs. Should be ignored altogether. Use of /etc/mnttab is 
unfortunate but I know of no other way on other platforms (since I haven't 
looked into it).

> These patches have been in use by a number of folks using ZfsOnLinux for some 
> time, and they've been robust on those systems.  I've tried to ensure the 
> changes won't impact non-Linux platforms, though I'm not sure I trust my 
> knowledge of autoconf enough to be positive there are no side effects.
>
You forget the effect of other code changes (below)
> - FILE *mnttab = fopen ("/etc/mnttab", "r");
> +    FILE *mnttab;
> +    mnttab = fopen ("/proc/mounts", "r");
/proc on FreeBSD is very different from Linux one. Don't try
/proc/mounts except if you have Linux.
> +
> +    if (! mnttab)
> +      mnttab = fopen ("/etc/mtab", "r");
> +
> +    if (! mnttab)
> +      mnttab = fopen ("/etc/mnttab", "r");
> +
>      if (! mnttab)
>        return;
>  
> -if [ "x`${grub_probe} --device ${GRUB_DEVICE} --target=fs 2>/dev/null || 
> true`" = xbtrfs ]; then
> +LINUX_ROOT_FS=`${grub_probe} --device ${GRUB_DEVICE} --target=fs 2>/dev/null 
> || true`
> +LINUX_ROOT_STAT=`stat -f --printf=%T / || true`
> +
> +if [ "x${LINUX_ROOT_FS}" = xbtrfs ] || [ "x${LINUX_ROOT_STAT}" = xbtrfs ]; 
> then
This changes logic for btrfs. I don't think it's necessary or good to
just change it.
> +if [ "x${LINUX_ROOT_FS}" = xzfs ]; then
> +  GRUB_CMDLINE_LINUX="boot=zfs \$bootfs ${GRUB_CMDLINE_LINUX}"
> +fi
> +
>    fi
> +  if [ "x${LINUX_ROOT_FS}" = xzfs ]; then
> +    cat << EOF
> +     insmod zfsinfo
> +     zfs-bootfs (\$root) bootfs
> +EOF
In this place $root refers to whereever kernel is. So if /boot is
separate it will be wrong. Moreover you completely forget the possible
subvolumes. One could have e.g.
FreeBSD in /freebsd/@/...
GNU/Linux in /gnu/linux/@
/boot in /boot/@
In this case $bootfs has to take subvolume into account.
Also nothing guarantees that / is accessible from GRUB proper at all.
The ZFS in question may be on e.g. SAN. You need to figure parameters in
10_linux, not on boot time.


-- 
Regards
Vladimir 'φ-coder/phcoder' Serbinenko


Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]