disklabel differences FreeBSD, DragonFly

Andreas Klemm andreas at freebsd.org
Thu Jul 27 06:40:08 UTC 2006


Hi,

DragonFly uses another disklabel as FreeBSD I discovered.

Made a test installation of their 1.6 yesterday.

Later I wanted to mount the dfly filesystems on FreeBSD 6.1,
of course still my main Unix ;-) But it wasn't possible.

The disklabel couldn't be read and as a result devfs didn't
create the devices under /dev.

So I compared sys/disklabel.h on the 2 BSDs and
discovered a difference at the very beginning of the struct.

I'm not sure for what exact purpose Matt uses his new
pack identifier. Does somebody have a clue ???

Is this perhaps something useful that FreeBSD could also use/need ?
Or at least adopt, to be compatible if it doesn't hurt too much ???

Would be cool to be able to mount fs's across BSDs.

Our FreeBSD 6.1 one:
struct disklabel {
        u_int32_t d_magic;              /* the magic number */
        u_int16_t d_type;               /* drive type */
        u_int16_t d_subtype;            /* controller/d_type specific */
        char      d_typename[16];       /* type name, e.g. "eagle" */

        char      d_packname[16];       /* pack identifier */

                        /* disk geometry: */

DragonFly:
struct disklabel {
        u_int32_t d_magic;              /* the magic number */
        u_int16_t d_type;               /* drive type */
        u_int16_t d_subtype;            /* controller/d_type specific */
        char      d_typename[16];       /* type name, e.g. "eagle" */

        /* 
         * d_packname contains the pack identifier and is returned when
         * the disklabel is read off the disk or in-core copy.
         * d_boot0 and d_boot1 are the (optional) names of the
         * primary (block 0) and secondary (block 1-15) bootstraps
         * as found in /boot.  These are returned when using
         * getdiskbyname(3) to retrieve the values from /etc/disktab.
         */
        union {
                char    un_d_packname[16];      /* pack identifier */
                struct {
                        char *un_d_boot0;       /* primary bootstrap name */
                        char *un_d_boot1;       /* secondary bootstrap name */
                } un_b;
        } d_un;
#define d_packname      d_un.un_d_packname
#define d_boot0         d_un.un_b.un_d_boot0
#define d_boot1         d_un.un_b.un_d_boot1

                        /* disk geometry: */


	Andreas ///

-- 
Andreas Klemm - Powered by FreeBSD 6
Need a magic printfilter today ? -> http://www.apsfilter.org/


More information about the freebsd-hackers mailing list