[Ocfs2-devel] [PATCH] ocfs2 support for blkid utility

Wim Coekaerts wim.coekaerts at oracle.com
Tue Feb 3 20:51:56 CST 2004


its actually in the redhat mount stuff, you can mount by label etc
afaik it's in the standard one too, I remember even seeing it in
manpages

On Tue, Feb 03, 2004 at 08:48:22PM -0800, Rusty Lynch wrote:
> In a an email thread on the Data Center Linux (DCL) working group mailing
> list about a proposed requirement for persistant device naming, Theodore Ts'o
> noted that his blkid utility in the e2fsprog package could be used as part
> of a persistent device naming implementation.
> 
> <<<<<<<<<<<<<< CUT 
> 
> On Tue, Feb 03, 2004 at 08:21:33AM -0800, Rusty Lynch wrote:
> > 
> > Can you point me to some documentation on how to add support for other 
> > filesystems.  I just recently started working with ocfs, and it looks 
> > like blkid is not picking up and partitions formated for ocfs.
> > 
> 
> No documentation, I'm afraid, although adding support for ocfs should
> be fairly straightforward.  The relevant file is
> e2fsprogs/lib/blkid/probe.c.  If the filesystem has a straightforward
> magic number, it can just be placed in the blk_magic type array:
> 
> /*
>  * Various filesystem magics that we can check for.  Note that kboff and
>  * sboff are in kilobytes and bytes respectively.  All magics are in
>  * byte strings so we don't worry about endian issues.
>  */
> static struct blkid_magic type_array[] = {
> /*  type     kboff   sboff len  magic			probe */
> 	...
>   { "xfs",	 0,	 0,  4, "XFSB",			probe_xfs },
> 	...
> }
> 
> The probe function (probe_xfs in this case) can also be used to do a
> more refined test.  The probe function is responsible for setting the
> label and uuid information for the filesystem, or else returning a
> non-zero value if it turns out that the filesystem is not of the
> specified type.  lib/blkid/probe.c probably could be more paranoid
> about identifying filesystems, but to date no one has reported any
> false positives so I haven't bothered to put in more stringent tests.
> (See the probe_reiserfs() function for an example of the sort of extra
> testing that can be done to make sure the superblock is consistent.)
> As always, patches are welcome.  :-)
> 
> 						- Ted
> 
> P.S.  I'm about to release a new e2fsprogs release soon, so if you
> have some additional filesystems that should be added (blkid currently
> supports ext2, ext3, jbd, jfs, xfs, reiserfs, minix, vfat, msdos,
> ntfs, hfs, vxfs, hpfs, sysv, romfs, bfs, cramfs, qnx4, udf, iso9660,
> and swap, with LABEL and/or UUID support for all filesystems that
> support such labelling), please let me know.  I'm aiming for blkid to
> be as complete as possible.
> 
> >>>>>>>>>>>>>> CUT
> 
> So... I downloaded the e2fsprog source tree and hacked the following
> patch that adds ocfs2 support.
> 
> In the probe_ocfs() function, buf contains the first kbytes of data
> from the disk, and I just grab the label, suggested mount point, and
> UUID by indexing into buf.
> 
> Some of the other probe functions define their super block structure
> in an e2fsprog header file, and then just cast buf to their own 
> super block.  Since ocfs2 structures are considerably more complex, 
> I just went with the offset method.
> 
> This code would totally break if ocfs2 changes the layout of the first
> kbyte on disk.  Are there any plans to change this?
> 
> Would anyone have a problem with me submitting this to the e2fsprogs
> project?
> 
>     --rusty
> 
> --- probe.c	2004-02-03 20:18:42.000000000 -0800
> +++ /home/rusty/probe.c	2004-02-03 20:21:50.000000000 -0800
> @@ -312,6 +312,27 @@
>  	return 1;
>  }
>  
> +static int probe_ocfs(int fd __BLKID_ATTR((unused)), 
> +		      blkid_cache cache __BLKID_ATTR((unused)), 
> +		      blkid_dev dev,
> +		      struct blkid_magic *id __BLKID_ATTR((unused)), 
> +		      unsigned char *buf)
> +{
> +	char *label = 0;
> +	char *mount_point = 0;
> +	
> +	if (strlen((char *) (buf + 0x230)))
> +		label = (char *) (buf + 0x230);	
> +	blkid_set_tag(dev, "LABEL", label, 64);
> +	
> +	if (strlen((char *) (buf + 0x88)))
> +		mount_point = (char *) (buf + 0x88);	
> +	blkid_set_tag(dev, "MOUNT", mount_point, 128);
> +
> +	set_uuid(dev, (char *)(buf + 0x272));
> +	return 0;
> +}
> +
>  /*
>   * BLKID_BLK_OFFS is at least as large as the highest bim_kboff defined
>   * in the type_array table below + bim_kbalign.
> @@ -371,6 +392,7 @@
>    { "swap",	 0, 0x1ff6, 10, "SWAPSPACE2",		0 },
>    { "swap",	 0, 0x3ff6, 10, "SWAP-SPACE",		0 },
>    { "swap",	 0, 0x3ff6, 10, "SWAPSPACE2",		0 },
> +  { "ocfs2",	 0,	 8,  9,	 "OracleCFS",  probe_ocfs },
>    {   NULL,	 0,	 0,  0, NULL,			NULL }
>  };
>  
> _______________________________________________
> Ocfs2-devel mailing list
> Ocfs2-devel at oss.oracle.com
> http://oss.oracle.com/mailman/listinfo/ocfs2-devel


More information about the Ocfs2-devel mailing list