enhacement to mdmfs

Ruben de Groot mail25 at bzerk.org
Tue Nov 30 04:06:46 PST 2004


On Tue, Nov 30, 2004 at 12:21:35PM +0100, Michal Mertl typed:
> Hello,
> 
> I've recently shot my foot with mdmfs. Of course it was a pilot error but 
> the funcioanility I was looking for might be usefull.
> 
> I want to mount vnode-backed md(4) on boot without formatting it (e.g. for 
> a jail). Is it possible with current boot scripts?
> 
> I wrote a simple patch to mdmfs so such md disk can be put in /etc/fstab. 
> It adds '-K' option do mdmfs(8) to Keep contents. The line to attach such 
> disk in fstab looks like this:
> 
> md       /jail        mfs     rw,-K,-F=/var/jailfile 0 0
> 
> Comments welcome. If people find it usefull I'd like to have it commited. I 
> can fill the PR with enhancement request.

I filed a PR about this allready in October 2003:

http://www.freebsd.org/cgi/query-pr.cgi?pr=57641

Ruben

> Patch attached.
> 
> -- 
> Michal Mertl
> 
> 
> 

> Index: mdmfs.8
> ===================================================================
> RCS file: /home/fcvs/cvs/src/sbin/mdmfs/mdmfs.8,v
> retrieving revision 1.20
> diff -u -3 -r1.20 mdmfs.8
> --- mdmfs.8	17 May 2004 08:35:41 -0000	1.20
> +++ mdmfs.8	30 Nov 2004 10:56:22 -0000
> @@ -36,7 +36,7 @@
>  driver
>  .Sh SYNOPSIS
>  .Nm
> -.Op Fl DLlMNSUX
> +.Op Fl DKLlMNSUX
>  .Op Fl a Ar maxcontig
>  .Op Fl b Ar block-size
>  .Op Fl c Ar cylinders
> @@ -57,7 +57,7 @@
>  .Ar mount-point
>  .Nm
>  .Fl C
> -.Op Fl lNU
> +.Op Fl KlNU
>  .Op Fl a Ar maxcontig
>  .Op Fl b Ar block-size
>  .Op Fl c Ar cylinders
> @@ -162,6 +162,12 @@
>  The fragment size of the file system in bytes.
>  .It Fl i Ar bytes
>  Number of bytes per inode.
> +.It Fl K
> +Preserve contents of vnode-backed
> +.Pq Dv MD_VNODE
> +memory disk.
> +Must be used in conjunction with
> +.Fl F .
>  .It Fl l
>  Enable multilabel MAC on the new file system.
>  .It Fl L
> Index: mdmfs.c
> ===================================================================
> RCS file: /home/fcvs/cvs/src/sbin/mdmfs/mdmfs.c,v
> retrieving revision 1.20
> diff -u -3 -r1.20 mdmfs.c
> --- mdmfs.c	17 May 2004 07:07:20 -0000	1.20
> +++ mdmfs.c	30 Nov 2004 10:51:56 -0000
> @@ -89,7 +89,7 @@
>  	    *mount_arg;
>  	enum md_types mdtype;		/* The type of our memory disk. */
>  	bool have_mdtype;
> -	bool detach, softdep, autounit;
> +	bool detach, softdep, autounit, keepdata;
>  	char *mtpoint, *unitstr;
>  	char *p;
>  	int ch;
> @@ -119,7 +119,7 @@
>  		compat = true;
>  
>  	while ((ch = getopt(argc, argv,
> -	    "a:b:Cc:Dd:e:F:f:hi:LlMm:Nn:O:o:p:Ss:t:Uv:w:X")) != -1)
> +	    "a:b:Cc:Dd:e:F:f:hi:KLlMm:Nn:O:o:p:Ss:t:Uv:w:X")) != -1)
>  		switch (ch) {
>  		case 'a':
>  			argappend(&newfs_arg, "-a %s", optarg);
> @@ -167,6 +167,8 @@
>  				usage();
>  			loudsubs = true;
>  			break;
> +		case 'K':
> +			keepdata = true;
>  		case 'l':
>  			argappend(&newfs_arg, "-l");
>  			break;
> @@ -233,7 +235,6 @@
>  	argv += optind;
>  	if (argc < 2)
>  		usage();
> -
>  	/* Make compatibility assumptions. */
>  	if (compat) {
>  		mi.mi_mode = 01777;
> @@ -258,6 +259,11 @@
>  	mtpoint = argv[1];
>  	if (!have_mdtype)
>  		mdtype = MD_SWAP;
> +
> +	/* If we want to use vnode backed file and don't newfs it */
> +	if (keepdata && mdtype != MD_VNODE)
> +		err(1, "Must specify -F with -K");
> +
>  	if (softdep)
>  		argappend(&newfs_arg, "-U");
>  
> @@ -268,7 +274,8 @@
>  		do_mdconfig_attach_au(mdconfig_arg, mdtype);
>  	else
>  		do_mdconfig_attach(mdconfig_arg, mdtype);
> -	do_newfs(newfs_arg);
> +	if (!keepdata)
> +		do_newfs(newfs_arg);
>  	do_mount(mount_arg, mtpoint);
>  	do_mtptsetup(mtpoint, &mi);
>  
> @@ -665,13 +672,13 @@
>  		name = "mdmfs";
>  	if (!compat)
>  		fprintf(stderr,
> -"usage: %s [-DLlMNSUX] [-a maxcontig [-b block-size] [-c cylinders]\n"
> +"usage: %s [-DKLlMNSUX] [-a maxcontig [-b block-size] [-c cylinders]\n"
>  "\t[-d rotdelay] [-e maxbpg] [-F file] [-f frag-size] [-i bytes]\n"
>  "\t[-m percent-free] [-n rotational-positions] [-O optimization]\n"
>  "\t[-o mount-options] [-p permissions] [-s size] [-w user:group]\n"
>  "\tmd-device mount-point\n", name);
>  	fprintf(stderr,
> -"usage: %s -C [-lNU] [-a maxcontig] [-b block-size] [-c cylinders]\n"
> +"usage: %s -C [-lKNU] [-a maxcontig] [-b block-size] [-c cylinders]\n"
>  "\t[-d rotdelay] [-e maxbpg] [-F file] [-f frag-size] [-i bytes]\n"
>  "\t[-m percent-free] [-n rotational-positions] [-O optimization]\n"
>  "\t[-o mount-options] [-s size] md-device mount-point\n", name);

> _______________________________________________
> freebsd-current at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"



More information about the freebsd-current mailing list