hammer2 - Require a @label in the device path
authorMatthew Dillon <dillon@apollo.backplane.com>
Thu, 27 Aug 2015 03:49:18 +0000 (20:49 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Thu, 27 Aug 2015 04:04:17 +0000 (21:04 -0700)
* If the user forgets to specify an @label in a hammer2 mount, complain
  in a way that does not leave the user confused.

* newfs_hammer2 no longer creates a "BOOT" and "ROOT" PFS by default.
  It still always creates the "LOCAL" PFS which we may use later to hold
  hammer2 configuration data.

  Now hammer2 creates one additional label by default, when no -L option is
  specified, based on the partition from the device path:

  'a' - newfs_hammer2 will create a "BOOT" PFS
  'd' - newfs_hammer2 will create a "ROOT" PFS
   *  - newfs_hammer2 will create a "DATA" PFS

* When -L is specified to indicate label(s) to create, newfs_hammer2 no longer
  creates any default labels other than "LOCAL" (which must always be
  created).

* Adjust manual page.

sbin/mount_hammer2/mount_hammer2.c
sbin/newfs_hammer2/newfs_hammer2.8
sbin/newfs_hammer2/newfs_hammer2.c

index 8ab725a..9c18cdd 100644 (file)
@@ -40,7 +40,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <strings.h>
+#include <string.h>
 #include <unistd.h>
 #include <dmsg.h>
 
@@ -70,6 +70,14 @@ main(int argc, char *argv[])
                exit(1);
        }
 
+       if (strchr(argv[1], '@') == NULL) {
+               fprintf(stderr,
+                       "hammer2_mount: no @LABEL specified: \"%s\"\n"
+                       "typical labels are @BOOT, @ROOT, and @DATA\n",
+                       argv[1]);
+               exit(1);
+       }
+
        /*
         * Connect to the cluster controller.  This handles both remote
         * mounts and device cache/master/slave mounts.
index ba34d71..19dd61d 100644 (file)
@@ -30,7 +30,7 @@
 .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd May 23, 2011
+.Dd Aug 26, 2015
 .Dt NEWFS_HAMMER2 8
 .Os
 .Sh NAME
@@ -42,7 +42,7 @@
 .Op Fl b Ar bootsize
 .Op Fl r Ar redosize
 .Op Fl V Ar version
-.Op Fl L Ar label
+.Op Fl L Ar label ...
 .Ar special
 .Sh DESCRIPTION
 The
@@ -57,19 +57,31 @@ of a larger cluster.
 Regardless, you must still format each block device separately using
 this command.
 .Pp
-By default the
+The
+.Nm
+program always creates a PFS called "LOCAL" which may be used for
+device-specific configuration.  This PFS should never be used for generic
+data.
+.Pp
+If no
+.Fl L
+option is specified,
 .Nm
-program creates three local MASTER PFSs: "LOCAL", "BOOT", and "ROOT".
-The "LOCAL" PFS is mandatory and is always created.  It represents an
-unclustered mount point representative of the just block device you
-formatted.
+will use the partition id to create a default label for you. 
+.Bl -tag -width indent
+.It partition 'a'
+"BOOT" is created.
+.It partition 'd'
+"ROOT" is created.
+.It otherwise
+"DATA" is created.
+.El
+.Pp
+You can override the default PFS name by specifying one or more
+.Fl L
+options.
+By default these PFSs all represent unclustered mount points.
 .Pp
-The "BOOT" and "ROOT" PFSs are optional and will be created by default.
-These provide convenient initially non-clustered mount points for your
-boot or root filesystem.
-These PFSs are not created if the
-.Fl L Ar label
-option is specified.
 You can specify
 .Fl L Ar none
 if you do not want
@@ -135,7 +147,9 @@ Specify a fixed area in which a boot related kernel and data can be stored.
 The
 .Ar bootsize
 is specified in bytes.
-By default a boot area of approximately 4MB will be created.
+By default a boot area of approximately 64MB will be created.
+This area is not currently used for booting and may be repurposed in the
+future.
 .It Fl f
 Force operation.
 This is needed for the creation of a
index c65e721..10b4c81 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011-2014 The DragonFly Project.  All rights reserved.
+ * Copyright (c) 2011-2015 The DragonFly Project.  All rights reserved.
  *
  * This code is derived from software contributed to The DragonFly Project
  * by Matthew Dillon <dillon@dragonflybsd.org>
@@ -97,7 +97,7 @@ main(int ac, char **av)
        int ch;
        int fd = -1;
        int i;
-       int nolabels = 0;
+       int defaultlabels = 1;
        char *vol_fsid;
        char *sup_clid_name;
        char *sup_fsid_name;
@@ -137,8 +137,8 @@ main(int ac, char **av)
                        ForceOpt = 1;
                        break;
                case 'L':
+                       defaultlabels = 0;
                        if (strcasecmp(optarg, "none") == 0) {
-                               nolabels = 1;
                                break;
                        }
                        if (NLabels >= MAXLABELS) {
@@ -178,16 +178,6 @@ main(int ac, char **av)
                }
        }
 
-       /*
-        * Adjust Label[] and NLabels
-        */
-       if (nolabels) {
-               NLabels = 1;
-       } else if (NLabels == 1) {
-               Label[NLabels++] = "BOOT";
-               Label[NLabels++] = "ROOT";
-       }
-
        /*
         * Check Hammer2 version
         */
@@ -214,16 +204,32 @@ main(int ac, char **av)
                }
        }
 
-       /*
-        * Collect volume information.
-        */
        ac -= optind;
        av += optind;
 
-       if (ac != 1) {
+       if (ac != 1 || av[0][0] == 0) {
                fprintf(stderr, "Exactly one disk device must be specified\n");
                exit(1);
        }
+
+       /*
+        * Adjust Label[] and NLabels.
+        */
+       if (defaultlabels == 0) {
+               NLabels = 1;
+       } else {
+               char c = av[0][strlen(av[0]) - 1];
+               if (c == 'a')
+                       Label[NLabels++] = "BOOT";
+               else if (c == 'd')
+                       Label[NLabels++] = "ROOT";
+               else
+                       Label[NLabels++] = "DATA";
+       }
+
+       /*
+        * Collect volume information.
+        */
        total_space = check_volume(av[0], &fd);
 
        /*
@@ -235,6 +241,9 @@ main(int ac, char **av)
        /*
         * Calculate defaults for the boot area size and round to the
         * volume alignment boundary.
+        *
+        * NOTE: These areas are currently not used for booting but are
+        *       reserved for future filesystem expansion.
         */
        if (BootAreaSize == 0) {
                BootAreaSize = HAMMER2_BOOT_NOM_BYTES;
@@ -251,6 +260,9 @@ main(int ac, char **av)
        /*
         * Calculate defaults for the redo area size and round to the
         * volume alignment boundary.
+        *
+        * NOTE: These areas are currently not used for logging but are
+        *       reserved for future filesystem expansion.
         */
        if (AuxAreaSize == 0) {
                AuxAreaSize = HAMMER2_REDO_NOM_BYTES;