summaryrefslogtreecommitdiffstats
path: root/sbin
diff options
context:
space:
mode:
authordes <des@FreeBSD.org>2006-07-12 16:05:51 +0000
committerdes <des@FreeBSD.org>2006-07-12 16:05:51 +0000
commit72b19002fe39572d46b16b35d90b9d58e7b696ec (patch)
tree9cc82f8d6cdb6dffe60dd823237ba04471feefa3 /sbin
parentf82e9588d84ff8322c2063e9e0e1df59b4d8a184 (diff)
downloadFreeBSD-src-72b19002fe39572d46b16b35d90b9d58e7b696ec.zip
FreeBSD-src-72b19002fe39572d46b16b35d90b9d58e7b696ec.tar.gz
Teach mount(8) about a 'late' keyword, which means the file system should
not be mounted unless the -l flag was specified. Add an rc script, mountlate, which basically runs 'mount -a -l'. It runs after DAEMON but before LOGIN. This is useful for things like loopback mounts, because mountcritremote runs before mountd / nfsd (since /usr might be a remote file system), so an attempt to mount a loopback network file system in mountcritremote will fail. Also add a progress message to mountcritlocal, for the sake of symmetry with similar messages in mountcritremote and mountlate. Reviewed by: freebsd-rc MFC after: 3 weeks
Diffstat (limited to 'sbin')
-rw-r--r--sbin/mount/mount.823
-rw-r--r--sbin/mount/mount.c22
2 files changed, 38 insertions, 7 deletions
diff --git a/sbin/mount/mount.8 b/sbin/mount/mount.8
index 47ea621..ec3ca96 100644
--- a/sbin/mount/mount.8
+++ b/sbin/mount/mount.8
@@ -28,7 +28,7 @@
.\" @(#)mount.8 8.8 (Berkeley) 6/16/94
.\" $FreeBSD$
.\"
-.Dd November 26, 2004
+.Dd July 12, 2006
.Dt MOUNT 8
.Os
.Sh NAME
@@ -36,7 +36,7 @@
.Nd mount file systems
.Sh SYNOPSIS
.Nm
-.Op Fl adfpruvw
+.Op Fl adflpruvw
.Op Fl F Ar fstab
.Op Fl o Ar options
.Op Fl t Ar ufs | external_type
@@ -78,7 +78,12 @@ All the file systems described in
are mounted.
Exceptions are those marked as
.Dq noauto ,
-excluded by the
+those marked as
+.Dq late
+(unless the
+.Fl l
+option was specified),
+those excluded by the
.Fl t
flag (see below), or if they are already mounted (except the
root file system which is always remounted to preserve
@@ -101,6 +106,11 @@ a file system mount status from read-write to read-only.
Also
forces the R/W mount of an unclean file system (dangerous; use with
caution).
+.It Fl l
+When used in conjunction with the
+.Fl a
+option, also mount those file systems which are marked as
+.Dq late .
.It Fl o
Options are specified with a
.Fl o
@@ -142,6 +152,13 @@ When used with the
flag, this is the same as specifying all the options listed in the
.Xr fstab 5
file for the file system.
+.It Cm late
+This file system should be skipped when
+.Nm is run with the
+.Fl a
+flag but without the
+.Fl l
+flag.
.It Cm multilabel
Enable multi-label Mandatory Access Control, or MAC, on the specified file
system.
diff --git a/sbin/mount/mount.c b/sbin/mount/mount.c
index 3da2d73..3d25b7b 100644
--- a/sbin/mount/mount.c
+++ b/sbin/mount/mount.c
@@ -191,17 +191,17 @@ main(int argc, char *argv[])
struct statfs *mntbuf;
FILE *mountdfp;
pid_t pid;
- int all, ch, i, init_flags, mntsize, rval, have_fstab;
+ int all, ch, i, init_flags, late, mntsize, rval, have_fstab;
char *cp, *ep, *options;
options = strdup("noro");
if (options == NULL)
errx(1, "malloc failed");
- all = init_flags = 0;
+ all = init_flags = late = 0;
vfslist = NULL;
vfstype = "ufs";
- while ((ch = getopt(argc, argv, "adF:fo:prwt:uv")) != -1)
+ while ((ch = getopt(argc, argv, "adlF:fo:prwt:uv")) != -1)
switch (ch) {
case 'a':
all = 1;
@@ -215,6 +215,9 @@ main(int argc, char *argv[])
case 'f':
init_flags |= MNT_FORCE;
break;
+ case 'l':
+ late = 1;
+ break;
case 'o':
options = catopt(options, optarg);
break;
@@ -265,6 +268,8 @@ main(int argc, char *argv[])
continue;
if (hasopt(fs->fs_mntops, "noauto"))
continue;
+ if (hasopt(fs->fs_mntops, "late") && !late)
+ continue;
if (!(init_flags & MNT_UPDATE) &&
ismounted(fs, mntbuf, mntsize))
continue;
@@ -628,6 +633,15 @@ mangle(char *options, int *argcp, char *argv[])
* not a real mount option.
*/
continue;
+ } else if (strcmp(p, "late") == 0) {
+ /*
+ * "late" is used to prevent certain file
+ * systems from being mounted before late
+ * in the boot cycle; for instance,
+ * loopback NFS mounts can't be mounted
+ * before mountd starts.
+ */
+ continue;
} else if (strcmp(p, "userquota") == 0) {
continue;
} else if (strncmp(p, userquotaeq,
@@ -737,7 +751,7 @@ usage(void)
{
(void)fprintf(stderr, "%s\n%s\n%s\n",
-"usage: mount [-adfpruvw] [-F fstab] [-o options] [-t ufs | external_type]",
+"usage: mount [-adflpruvw] [-F fstab] [-o options] [-t ufs | external_type]",
" mount [-dfpruvw] special | node",
" mount [-dfpruvw] [-o options] [-t ufs | external_type] special node");
exit(1);
OpenPOWER on IntegriCloud