diff options
author | des <des@FreeBSD.org> | 2006-07-12 16:05:51 +0000 |
---|---|---|
committer | des <des@FreeBSD.org> | 2006-07-12 16:05:51 +0000 |
commit | 72b19002fe39572d46b16b35d90b9d58e7b696ec (patch) | |
tree | 9cc82f8d6cdb6dffe60dd823237ba04471feefa3 /sbin/mount | |
parent | f82e9588d84ff8322c2063e9e0e1df59b4d8a184 (diff) | |
download | FreeBSD-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/mount')
-rw-r--r-- | sbin/mount/mount.8 | 23 | ||||
-rw-r--r-- | sbin/mount/mount.c | 22 |
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); |